例如:

let imgs = {
small: ["imgA_1.jpg", "imgB_1.jpg", "imgC_1.jpg"],
middle: ["imgA_2.jpg", "imgB_2.jpg", "imgC_2.jpg"],
large: ["imgA_3.jpg", "imgB_3.jpg", "imgC_3.jpg"]
}; handleSmall();
handleMiddle();
handleMove(); function handleSmall(){
// 渲染小图
smallImg.innerHTML = imgs.small.map((item, index) => {
return `<li><a href="#"><img src="./images/${item}" _id="${index}" class="imgLi" /></a></li>`
}).join(""); smallImg.addEventListener("mouseover", (e) => {
if(e.target.nodeName === "IMG"){ let imgArr = document.getElementsByClassName("imgLi");
for(let i = 0;i < imgArr.length;i++){
imgArr[i].style.borderColor = "transparent";
}
e.target.style.borderColor = "black"; let i = e.target.getAttribute("_id");
middleImg.style.background = `url("./images/${imgs.middle[i]}") no-repeat`;
largeImg.style.background = `url("./images/${imgs.large[i]}") no-repeat`;
}
}, false);
} function handleMiddle(){
middleImg.addEventListener("mouseover", () => {
largeImg.style.display = "block";
enlarge.style.display = "block";
}, false)
middleImg.addEventListener("mouseout", () => {
largeImg.style.display = "none";
enlarge.style.display = "none";
}, false)
} function handleMove(){
middleImg.addEventListener("mousemove", (e) => {
// 鼠标相对于文档显示区的坐标
let mouseX = e.clientX;
let mouseY = e.clientY;
// middleImg 相对于文档显示区的坐标
let middleX = middleImg.offsetLeft;
let middleY = middleImg.offsetTop; let moveX = mouseX - middleX - enlarge.offsetWidth / 2;
let moveY =mouseY -middleY - enlarge.offsetHeight / 2; if(moveX <= 0){
moveX = 0;
}else if(moveX >= middleImg.clientWidth - enlarge.offsetWidth){
moveX = middleImg.clientWidth - enlarge.offsetWidth
}
if(moveY <= 0){
moveY = 0;
}else if(moveY >= middleImg.clientHeight - enlarge.offsetHeight){
moveY = middleImg.clientHeight - enlarge.offsetHeight
} enlarge.style.left = moveX + "px";
enlarge.style.top = moveY + "px"; largeImg.style.backgroundPositionX = -moveX * (800 / 430) + "px";
largeImg.style.backgroundPositionY = -moveY * (800 / 430) + "px"; }, false)
}

放大镜如何用js的更多相关文章

  1. 360极速浏览器UA怪异以及如何用js判断360浏览器

    本文最后一次更新于7个月前,文章内容可能略有出入.若发现文章中有错误之处,可以留言评论告诉作者. 1.360极速浏览器UA因域名不同而异 今天在写一个判断浏览器.浏览器版本.操作系统.操作系统版本.浏 ...

  2. 如何用js检测判断时间日期的间距

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  3. Jquery放大镜插件---imgzoom.js(原创)

    Jquery放大镜插件imgzoom能够实现图片放大的功能,便于与原图进行比较. 使用方法: 1.引入jQuery与imgzoom,imgzoom.css <link rel="sty ...

  4. 如何用js判断一个对象是不是Array

    .如何用js判断一个对象是不是Array 1.Array.isArray(obj) 调用数组的isArray方法 2.obj instanceof Array 判断对象是否是Array的实例 3.Ob ...

  5. 如何用 js 实现一个 class 类函数

    如何用 js 实现一个 class 类函数 原理 实现方式 总结 refs https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refere ...

  6. 如何用 js 实现一个 apply 函数

    如何用 js 实现一个 apply 函数 原理 实现方式 总结 refs https://developer.mozilla.org/en-US/docs/Web/JavaScript/Referen ...

  7. 如何用 js 实现一个 call 函数

    如何用 js 实现一个 call 函数 原理 实现方式 总结 refs https://developer.mozilla.org/en-US/docs/Web/JavaScript/Referenc ...

  8. 如何用 js 实现一个 sleep 函数

    如何用 js 实现一个 sleep 函数 原理 实现方式 总结 refs js sleep xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  9. 如何用 js 实现一个 new 函数

    如何用 js 实现一个 new 函数 原理 new 关键字实现经过了如下过程 创建一个空对象 obj = {} 链接到原型 obj.proto = constructor.prototype 绑定 t ...

随机推荐

  1. python3正则表达式详细用法示例

    转载自:https://www.runoob.com/python3/python3-reg-expressions.html

  2. 上传下载文件到Linux服务器

    转自链接:https://blog.csdn.net/drdongshiye/article/details/89430535Mac的终端是十分强大 , 可以通过命令进行上传下载下载文件夹 scp - ...

  3. SOS--DP(基础版本)未压缩空间

    #define IOS ios_base::sync_with_stdio(0); cin.tie(0); #include <cstdio>//sprintf islower isupp ...

  4. GIL全局解释器

    ' GIL是一个互斥锁:保证数据的安全(以牺牲效率来换取数据的安全) 阻止同一个进程内多个线程同时执行(不能并行但是能够实现并发) 并发:看起来像同时进行的 GIL全局解释器存在的原因是因为CPyth ...

  5. THUWC2020滚粗记

    \(Day-?\) 教练叫走了3个人,没叫我 感觉药丸,然后被告知pku没过,thu过了 神奇,然后就活了 后来在机房颓废,大声说笑被diss 当时感觉颓的有点过头,药丸 \(Day0\) 跟NC去T ...

  6. 怎样通过id属性快速从HTMLCollection对象中获取到目标元素节点

    方法1: 直接使用id或name属性: 比如我想获取 id 为 img1 的图片元素节点, 则可以这样写: document.images.img1 如果没有对应节点, 则返回undefined; 方 ...

  7. Python爬虫实战小项目

    爬取国家药品监督管理总局中基于中华人民共和国化妆品生产许可证相关数据 import requests from fake_useragent import UserAgent ua = UserAge ...

  8. vue和react区别

    vue和react区别  

  9. Func<>委托、扩展方法、yield、linq ForEach综合运用

    1.先定义一个Model类    public class P1    {        public string name { get; set; }        public int age ...

  10. 【js】面向对象学习资料

    1.面向对象模式: https://m.jb51.net/article/74549.htm 2.面向对象基础篇 http://www.cnblogs.com/chiangchou/p/js-oop1 ...