首页 > 其他分享 >vue - 图片的放大镜功能

vue - 图片的放大镜功能

时间:2023-07-18 18:24:49浏览次数:36  
标签:220 vue 放大镜 top width marks 图片 160 left

// html
<div class="productLeft">
   <!-- 左侧中图  -->
   <div class="mdImg">
      <img :src="qall" alt="">
   </div>
   <!-- 遮罩层  -->
   <div v-show="isShow" class="marks" :style="{top:top+'px',left:left+'px'}"></div>
      <!-- 遮罩层 玻璃板 superMarks -->
      <div v-if="isPC==false" @touchstart.prevent="enter" @touchend.prevent="leave"  @touchmove.prevent="marks" @click.prevent="sub()" class="superMarks" ></div>
      <div v-if="isPC==true" @mouseenter="enter" @mouseleave="leave"  @mousemove="marks" @click.prevent="sub()" class="superMarks" ></div>
      <div v-show="isShow" class="lgImg">
          <img :src="qallBig" alt="" :style="{top:topLgImg+'px',left:leftLgImg+'px'}">
      </div>
</div>
// js
export default{
   name : 'blog-header',
   data(){
     return{
       isPC:true,
       // 大图片
       qall: '../../static/image/土味.jpg',
       qallBig: '../../static/image/土味Big.jpg',
       isShow:false,   //控制遮罩层marks和大图片是否显示"
       left:0,       //marks左移位置
       top:0,         //marks下移位置
       leftLgImg:0,       //大图lgImg移动的位置
       topLgImg:0         //大图lgImg移动的位置
     }
    },
    methods:{
       //鼠标进入和离开
       enter(){
         this.isShow=true;
       },
       leave(){
         this.isShow=false;
       },
       //遮罩层放大镜
       marks(e){
         var marksWidth=48;//marks的宽
         var marksHeight=48;//marks的高
         if(this.isPC==true){
           //PC端
           this.left=e.offsetX-marksWidth/2;   
           this.top=e.offsetY-marksHeight/2;
           if(this.left<0){
              this.left=0;
           }else if(this.left>160){
              this.left=160;
           }
           if(this.top<0){
              this.top=0;
           }else if(this.top>160){
              this.top=160;
           }
           //大d图片除以小的图片的宽高
           this.leftLgImg=-this.left*320/160;
           this.topLgImg=-this.top*181/91;
         }else{
           //移动端
           this.left=e.changedTouches[0].clientX-marksWidth/2;   
           this.top=e.changedTouches[0].clientY-marksHeight/2;
           if(this.left<0){
              this.left=0;
           }else if(this.left>160){
              this.left=160;
           }
           if(this.top<0){
              this.top=0;
           }else if(this.top>45){ //45就是小图片的高度的一半,91/2
              this.top=45;
           }
           //大d图片除以小的图片的宽高
           this.leftLgImg=-this.left*320/160;
           this.topLgImg=-this.top*181/91;
         }
      }

   },
   mounted(){
      if (navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i,)) {
          this.isPC = false; 
      } else {
          console.log('PC端')
      }
    }
}
  /* 左侧大小图样式 160*91  320*181*/
    .productLeft{
        width:160px;
        position: relative;
    }
    /* 左侧中图 */
    .mdImg,.mdImg>img{
        width:160px;
        height:91px;
        margin-left: 15px;
    }
    /*遮罩层superMarks */
    .superMarks{
        width:160px;
        height:91px;
        background-color:rgba(220, 220, 220, 0);
        position:absolute;
        top:0px;
        left:0px;
    }
    /* 遮罩层 */
    .marks{
        width:48px;
        height:48px;
        position:absolute;
        background-color:rgba(220, 220, 220, 0.5);
        /*top:0px;  //内联设置了动态的top,left
        left:0px;*/
    }
    
    /* 左侧隐藏大图 */
    .lgImg{
        width:160px;
        height:91px;
        overflow: hidden;
        position:absolute;
        top:0px;
        left:195px;
        border:2px solid #aaa;
        background-color:#fff;
    }
    .lgImg img{
        width:320px;
        height:181px;
        position:absolute;
        /*top:100px;
        left:100px;*/
    }

标签:220,vue,放大镜,top,width,marks,图片,160,left
From: https://www.cnblogs.com/axingya/p/17563794.html

相关文章

  • HTML入门-----常见标签之图片标签
    图片标签:用于显示网页中的图片!相关属性:src:图片地址alt:图片错误的时候(图片显示不出来的时候)的提示信息title:图片的标题width:图片宽度height:图片高度......
  • vue手搓h5滚动日期选择器组件
    背景新项目为了省事和后台写一起了,所以用不了Uni-app(悲),然后element-ui的日期选择器h5不适配,看着也难受,就想找个好用的,结果找了一圈感慨,自己写个吧。 说明 为了加快速度,代码可能有些臃肿,但大概就是这样了,看着代码好多,其实只要会一个的滚动就会多个了。建议下看下参考文章,然后......
  • vue+zxing 扫描条形码
    背景扫描甲方商品身上的条形码。吐槽下:这玩意又细又小,还反光,最后用的uni-app上的插件,而且不用自己封装了。虽然和我之前的二方案差不多,即使用Quagga,打开video,将每帧画成canvas,然后转换为图片交给Quagga识别,缺点是功耗大,最后实装的表现还行,就是扫几个码,手机热了。回归正题,最开......
  • vue使用hiprint实现打印(vue-plugin-hiprint)
    1、安装插件:npminstallvue-plugin-hiprint或yarnaddvue-plugin-hiprint2、普通使用:<template><divclass="box"><divclass="box-tool"><el-button-group><el-buttontype="primary......
  • vue v-if 和v-permission 共同使用的奇怪问题
    背景后台系统某功能按钮需要订单状态和用户权限共同校验是否显示,将权限校验和v-if共同作用在同一div中,下方为实例代码<divv-if="status==0"><div@click="function1">某按钮功能</div></div><divv-if="status==1"v-permission="['admin......
  • antd+vue3 tree-select 组件库 筛选结果不正确的问题
    第一次遇到这种带搜索框的下拉树状列表搜索关键字的时候出现我不想要的结果。我感觉组件它只是搜索一级列表而没有搜索二级列表,然后一节列表把它整个的二级列表带出来了。二级列表里边包含搜索关键字的所有item才是我想要的。相关代码:1<!--页面名称-->2<div......
  • 图片格式介绍
    BMP,JPG(orJPEG),PNG,和RAW是四种常见的图像文件格式,它们在图像存储和使用方面有一些区别。下面是它们之间的主要区别:1.BMP(Bitmap):BMP是一种无损的图像文件格式,意味着图像质量不会因为文件大小的压缩而降低。它使用像素映射来存储图像数据,可以包含多种颜色和透明度。......
  • 粘贴上传图片
    粘贴上传图片<divv-on:paste="handlePaste">paste</div>handlePaste(event){letdata=event.clipboardData;try{letitems=data&&data.items;if(items&&items.length){for(leti=0;i<items.......
  • python将图片变4K
    Python将图片变4K![](在现代社会中,高清图像已经成为我们生活中不可或缺的一部分。随着4K显示技术的普及,越来越多的人希望能够将自己的图片转换成4K分辨率,以获得更加清晰和细腻的图像效果。本文将介绍如何使用Python编程语言将图片转换成4K分辨率,并提供相应的代码示例。什么是4K......
  • python获取图片的文件流
    如何使用Python获取图片的文件流介绍在开发过程中,有时候我们需要获取图片的二进制数据(文件流),然后对其进行处理或者保存到数据库中。本文将教你如何使用Python获取图片的文件流。流程概述下面是获取图片文件流的整个流程:步骤描述1通过URL获取图片2将图片转换为二......