vue版本的仿京东放大镜

<template><div class="maxBox"><divref="left"class="left"@mousemove="showImg"@mouseleave="flag = false"><imgsrc="https://imgres.crsky.com/crsky/60/297162-20210421095209607f8549bd770.jpg"alt=""/><div v-show="flag" ref="mask" class="mask"></div></div><div v-show="flag" ref="right" class="right"><imgref="maxImg"src="https://imgres.crsky.com/crsky/60/297162-20210421095209607f8549bd770.jpg"alt=""/></div></div>
</template><script>
export default {data() {return {flag: false,};},methods: {showImg(e) {this.flag = true;let left = this.$refs.left;//  获取鼠标在 left 的当前坐标let x = e.pageX - left.offsetLeft; //x轴的let y = e.pageY - left.offsetTop;//   拿到小方块的坐标let mask = this.$refs.mask;// 小方块移动的坐标 例:小方块移动的横向坐标就是 x-小方块的一半var maskX = x - mask.offsetWidth / 2;var maskY = y - mask.offsetHeight / 2;// 小方块可以移动的最大横向坐标   最大盒子 - 小盒子算出可移动范围let maxX = left.offsetWidth - mask.offsetWidth;let maxY = left.offsetHeight - mask.offsetHeight;// 判断横向超出,让他不超出  移动的坐标 大于 可移动的范围  赋值为最大的值if (maskX > maxX) {maskX = maxX;} else if (maskX < 0) {maskX = 0;}//   判断纵向if (maskY > maxY) {maskY = maxY;} else if (maskY < 0) {maskY = 0;}mask.style.left = maskX + "px";mask.style.top = maskY + "px";// 右边盒子let rightBox = this.$refs.right;// 右边大图的位置let maxImg = this.$refs.maxImg;//   大图片的移动的最大距离let imgMaxX = maxImg.offsetWidth - rightBox.offsetWidth;let imgMaxY = maxImg.offsetHeight - rightBox.offsetHeight;//   放大镜图片移动的距离let imgX = maskX * (imgMaxX / maxX);let imgY = maskY * (imgMaxY / maxY);maxImg.style.left = -imgX + "px";maxImg.style.top = -imgY + "px";},},
};
</script><style lang="scss" scoped>
* {padding: 0;margin: 0;
}
.mask {width: 220px;height: 220px;background-color: rgba(29, 192, 201, 0.4);position: absolute;
}
.maxBox {width: 1000px;height: 800px;margin: 10px auto;display: flex;
}
.left {width: 350px;height: 350px;border: 1px solid rgb(209, 208, 208);position: relative;&:hover {cursor: move;}img {width: 100%;height: 100%;}
}
.right {width: 500px;height: 500px;border: 1px solid rgb(202, 202, 202);position: relative;overflow: hidden;img {width: 1000px;height: 1000px;position: absolute;flex-shrink: 0;left: 0;top: 0;}
}
</style>

原生js版本放大镜

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta http-equiv="X-UA-Compatible" content="ie=edge" /><title>Document</title><style>* {margin: 0;padding: 0;}.goods {width: 300px;height: 400px;position: relative;margin-left: 100px;float: left;}.goods img {width: 100%;height: 100%;}.mask {width: 200px;height: 200px;background-color: rgba(247, 150, 4, 0.8);position: absolute;top: 0;left: 30px;cursor: move;display: none;}.big {width: 400px;height: 500px;position: relative;float: left;margin-left: 20px;overflow: hidden;}.big img {width: 800px;height: 1000px;position: absolute;left: 0;top: 0;}</style>
</head><body><div class="hh"><div class="goods"><img src="https://imgres.crsky.com/crsky/60/297162-20210421095209607f8549bd770.jpg" alt="" /><div class="mask"></div></div><div class="big" style="display: none"><img src="https://imgres.crsky.com/crsky/60/297162-20210421095209607f8549bd770.jpg" alt="" /></div></div><script>// 1、先获取元素var goods = document.querySelector(".goods");var mask = document.querySelector(".mask");var hh = document.querySelector(".hh");var big = document.querySelector(".big");hh.onmouseover = function () {big.style.display = "block";};hh.onmouseout = function () {big.style.display = "none";};goods.onmouseover = function () {mask.style.display = "block";};goods.onmouseout = function () {mask.style.display = "none";};goods.onmousemove = function (event) {// 2、获取鼠标在goods里面的坐标var x = event.pageX - goods.offsetLeft;var y = event.pageY - goods.offsetTop;// 3、小方块移动的坐标 例:小方块移动的横向坐标就是 x-小方块的一半var maskX = x - mask.offsetWidth / 2;var maskY = y - mask.offsetHeight / 2;// 4、小方块可以移动的最大横坐标var maxX = goods.offsetWidth - mask.offsetWidth;var maxY = goods.offsetHeight - mask.offsetHeight;// 判断横向超出,让他不超出if (maskX > maxX) {maskX = maxX;} else if (maskX < 0) {maskX = 0;}// 判断纵向超出,让他不超出if (maskY > maxY) {maskY = maxY;} else if (maskY < 0) {maskY = 0;}// 小方块移动的距离mask.style.left = maskX + "px";mask.style.top = maskY + "px";var big = document.querySelector(".big");var img = big.children[0];// 5、大图片移动的最大距离var imgMaxX = img.offsetWidth - big.offsetWidth;var imgMaxY = img.offsetHeight - big.offsetHeight;// 放大镜图片移动的距离var imgx = maskX * (imgMaxX / maxX);var imgy = maskY * (imgMaxY / maxY);img.style.left = -imgx + "px";img.style.top = -imgy + "px";};</script>
</body></html>

vue版本的仿京东放大镜代码还有原生js版本的。(组件封装)相关推荐

  1. vue版本的仿京东放大镜代码还有原生js版本的。(组件封装

    src="https://imgres.crsky.com/crsky/60/297162-20210421095209607f8549bd770.jpg" alt="& ...

  2. 29 仿京东放大镜案例

    1.仿京东放大镜案例 功能需求: 鼠标经过小图片盒子,黄色的遮挡层和大图片盒子显示,鼠标一离开隐藏2个盒子功能 // 当页面全部加载完毕,因此需要load,执行里面的js代码 window.addEv ...

  3. 仿京东放大镜效果的实现

    仿京东放大镜 (1) 整个案例可以分为三个功能模块 (2) 鼠标经过小图片盒子, 绿色的遮挡层 和 大图片盒子显示,离开隐藏2个盒子功能 (3)绿色的遮挡层跟随鼠标功能. (4)移动绿色遮挡层,大图片 ...

  4. vue仿京东放大镜加商品缩略图轮播组件

    以下是最终的vue版本,光滑流畅,99%还原京东放大镜甚至更好,不会出现多次操作会变卡的问题 1.vue版本 6/23日更新,处理图片尺寸过小无法通过拖动实现放大移动效果的问题 7/18日更新,关于视 ...

  5. JS案例-仿京东放大镜效果

    需要实现的效果图如下: ①布局:布局采用一个大盒子里面首先分为上下两个部分,然后下部分又分为左右两个部分.左边的盒子里面放了一个img和一个遮罩层cover,右边盒子里面放的是800*800的大图片, ...

  6. 仿京东商城左侧商品分类导航-JS网页特效

    网页特效:仿京东商城左侧商品分类导航 演示地址:http://www.iiwnet.com/js_menu/976.html <html xmlns="http://www.w3.or ...

  7. html制作翻页效果代码,使用原生JS实现滚轮翻页效果的示例代码

    一.滚轮事件 当用户通过鼠标滚轮与页面交互.在垂直方向上滚动页面时,就会触发mousewheel事件,这个事件就是实现全屏切换效果需要用到的.在IE6, IE7, IE8, Opera 10+, Sa ...

  8. js 写html代码编辑器,原生JS写一个功能强大的编辑器

    因为一个同学,要做一个能加入图片的留言板功能,类型与QQ空间留言板和百度贴吧发帖的那种形式,同时在网上找了找发生网上对这方面的交流很少,所以发表这篇文章抛砖引玉,希望能帮助广大的学习者,也同时希望大佬 ...

  9. b站pink老师JavaScript的PC端网页特效 案例代码——仿京东放大镜效果

    目录 原理讲解: 代码段: 1. detail.html部分(重点在标红区) 2. detail.js部分(全部都是重点) 3. detail.css部分(重点在标红区) 4. base.css部分( ...

最新文章

  1. XCMS V1.0 Beta1 发布
  2. 【Android 应用开发】Activity 任务亲和性 taskAffinity 设置 ( taskAffinity 属性 )
  3. window用ssh连接本机虚拟机中的ubuntu
  4. jQuery核心函数的使用总结
  5. 博士申请 | 香港科技大学谢知遥教授实验组招收机器学习全奖博士生
  6. Andorid之bitmap里面的压缩总结
  7. python毕业设计总结范文大全_毕业设计心得体会范文【优秀】
  8. 取得浏览器当前鼠标的X,Y坐标的JavaScript脚本及document元素的一些重要属性
  9. Educational Codeforces Round 43 (Rated for Div. 2)题解
  10. Keytool 工具使用
  11. 余光中 听那冷冷的雨
  12. 关于CVR建模中延迟反馈问题
  13. 港科资讯|香港科技大学委任罗康锦教授为新一任工学院院长
  14. SPI Flash/Nor Flash/Nand Flash
  15. 数据密集型系统设计:索引及存储(B树、LSM树、OLTP及OLAP)
  16. sql server 设置自动备份
  17. 2018年全国心理测试技术研究、应用及专业人员培养研讨会活动简报
  18. 2021下半年最好的活法
  19. 如何高效学习3D视觉?
  20. 策略模式-表单验证的策略模式

热门文章

  1. vue中使用xlsx实现excel表的导入和导出
  2. .Net-C# 第一学期-第三章 上机练习+课后练习(简答题)
  3. Nginx proxy_pass详解
  4. Spring AOP 自定义注解记录操作日志
  5. Java EE开发基础
  6. 这份新年豪礼面试锦囊,真舍不得给你们!
  7. HTML5~问卷调查页面的设计与实现
  8. Metasploit 渗透测试框架的基本使用(扩展:利用永恒之蓝漏洞攻击WIN7靶机)
  9. Python通知Epic白嫖游戏信息
  10. ffmpegguitool下载不了_FFmpeg GUI Tool下载|FFmpeg GUI Tool(视频处理)下载v1.2.4 安卓版