vue中图片放大镜功能
仿淘宝详情页图片鼠标移过去可对图片放大显示在右侧
效果图如下图,此功能支持PC端与移动端

接下来进入代码实现环节:
先准备两张图片,一张小图片叫 '土味.jpg',大小160*91;一张大图片叫 ' 土味Big.jpg ',大小320*181。
大家看图片名字是什么就知道我要干什么,大家都懂的,接下来素材准备好了,进入代码环节:
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端')
}
}
}
css部分:
/* 左侧大小图样式 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;*/
}
兼容:移动端可f12选择移动端查看(鼠标长按移动查看效果),pc端鼠标移动查看效果
大家的图片的路径记得要写对!!!
还有第二种方法(vue的写法)

vue-piczoom
先安装此插件:
# 安装 install npm install vue-piczoom --save
使用:
# 使用 use
--script
import PicZoom from 'vue-piczoom'
export default {
name: 'App',
components: {
PicZoom
}
} --html
<pic-zoom url="static/aze.jpg" :scale="3"></pic-zoom>
Suggest 注意事项
组件默认是100%的高宽,所以建议将组件包含在一个有固定高宽的容器内。如:
<div class="pic-box"> <!--pic-box:width:500px;height:500px-->
<pic-zoom url="static/imac2.jpg" :scale="3"></pic-zoom>
</div>
兼容:支持pc端,不支持移动端
虽然以上的两种方法已经可以满足我们了,
但还为大家在网上搜索到以下的实现方法,大家有兴趣可以移步观看:
- 使用vue photo zoom pro:https://codepen.io/xbup/project/editor/AjnEgE
- js仿淘宝主图放大镜功能:https://www.moyublog.com/codes/2019-07-06/4.html
- vue.js手机端图片点击放大展示代码:https://www.sucaihuo.com/js/3144.html
vue中图片放大镜功能的更多相关文章
- Vue中图片的加载方式
一.前言 VUE项目中图片的加载是必须的,那么vue中图片的加载方式有哪些呢,今天博主就抽点时间来为大家大概地捋一捋. 二.图片的加载方法 1.在本地加载图片(静态加载) 图片存放assets文件夹中 ...
- vue项目js实现图片放大镜功能
效果图: 我写的是vue的组件形式,方便复用,图片的宽高,缩放的比例可以自己定义 magnifier.vue <template> <div class="magnif ...
- javascript 实现图片放大镜功能
淘宝上经常用到的一个功能是利用图片的放大镜功能来查看商品的细节 下面我们来实现这样一个功能吧,原理很简单: 实现一个可以随鼠标移动的虚框 在另外一个块中对应显示虚框中的内容 实现思路: 虚框用css中 ...
- js 图片放大镜功能
原理:放置两张相同的图片,一张作为主图片(图片1),另一张作为用来裁剪并放大的图片(图片2) 鼠标移动时,计算鼠标在图片1的位置(距离图片1左上角的x,y距离),以此决定在图片2开始 ...
- vue中图片预览(v-viewer库使用)
效果图: 注释: 可拖拽,可放大缩小旋转,全屏,功能齐全,底部有操作按钮 属性: npm install v-viewer --save //安装 //在main.js中引入 import Vie ...
- vue中图片返回404时,显示默认的图片
图片返回404时候的处理 <img :src="userMsg.portrait" ref="img" alt=""> _thi ...
- Jquery的jqzoom插件的使用(图片放大镜)
今天学习一下,图片放大镜功能,需要使用插件JQzoom 引入文件 <script type="text/javascript" src="js/jquery.min ...
- vue项目中图片预览旋转功能
最近项目中需要在图片预览时,可以旋转图片预览,在网上找了下,发现有一款功能强大的图片组件:viewerjs. git-hup: https://github.com/fengyuanchen/view ...
- 杂谈SharpDx中的WIC组件——我们需要WIC的图片编码功能么?
在前文 SharpDX之Direct2D教程II——加载位图文件和保存位图文件 中,发现在VB2010中不能很好的运用SharpDx中的WIC组件进行图片的编码工作.可能是我的设置问题,也可能是Sha ...
随机推荐
- Go操作etcd
etcd是近几年比较火热的一个开源的.分布式的键值对数据存储系统,提供共享配置.服务的注册和发现,本文主要介绍etcd的安装和使用. etcd etcd介绍 etcd是使用Go语言开发的一个开源的.高 ...
- Linux安装yum install gcc-c++出错:Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was 14: curl#6 - "Could not resolve host: mirrorlist.centos...
错误如图: 解决办法: 1.修改配置文件 /etc/resolv.conf,该配置文件如下: 2.输入:gedit resolv.conf,修改配置文件内容如下: 3.然后重启: 4.重新进行安装: ...
- 利用HBuilder打包Vue开发的webapp为app
众所周知,前端开发完成的webapp只能运行在浏览器上,对运行环境有一定的限制,也就是除了浏览器其他的环境下不支持:那么现在如果有个需求是这样的呢?需要一套代码三端运行呢?三端运行(黑人脸??)是的, ...
- apk签名发布及其原理
如果我们在ADT中开发完了一个android项目,如何将它打包呢?方法如下: 1.unsigned APP(无签名的APP) 最懒惰的方法,可以直接在项目的bin目录下直接将apk拷贝出来,就ok了. ...
- 记录一次oracle的坑
背景:程序正常运行中,突然技术支持人员反映数据库数据好久没有增加,于是乎各种排查问题,但是一直没有找到原因,由于代码比较久,也不是本人所写,更气的是居然用的是oracle数据库,并且是通过java代码 ...
- 4.1、顺序栈的实现(java实现)
1.实现源码 public class SeqStack { private final int MaxSize = 8; private int top; //栈顶 private Object s ...
- a417: 螺旋矩陣
题目: 每行有一正整数T,代表有几组测试数据 接下来有T行,每行有N.M两正整数 N为矩阵长宽,就是会有N*N矩阵 M为方向,M=1为顺时钟,M=2为逆时钟 N范围为1~100之间 思路: 所以,代码 ...
- 装系统 ------ 使用微PE 做系统盘
1.什么是PE系统 pe系统是一种装系统的系统,也就是预装系统的系统,它是一种系统预装环境和工具. 可以放在U盘或光盘里随身携带,可以用来给电脑装系统 2.常见的制作pe 系统的工具 大白菜,U启动, ...
- Java开发者薪资最低?程序员只能干到30岁?国外真的没有996?Intellij真的比Eclipse受欢迎?
Stack Overflow作为全球最大的程序设计领域的问答网站,每年都会出据一份开发者调查报告.近日,Stack Overflow公布了其第9次年度开发者调查报告(https://insights. ...
- 这些Mysql常用命令你是否还记得?
前言 记录mysql常用命令操作 基础操作 命令行登录mysql mysql -u用户名 -p用户密码 为表增加创建时间和更新时间 ALTER TABLE order_info_tbl ADD CO ...