今天来写常见的放大镜功能,这是各个电商网站经常使用的东西
样式

    <style>* {margin: 0;padding: 0;}.box {width: 350px;height: 350px;margin: 100px;border: 1px solid #ccc;position: relative;}.big {width: 400px;height: 400px;position: absolute;top: 0;left: 360px;border: 1px solid #ccc;overflow: hidden;display: none;}.big img {position: absolute;width: 800px;}.mask {width: 175px;height: 175px;background: rgba(255, 255, 0, 0.4);position: absolute;top: 0px;left: 0px;cursor: move;display: none;}.small {position: relative;}</style>
</head><body><div class="box" id="box"><div class="small"><img src="data:images/small.jpg" width="350" alt="" /><div class="mask"></div></div><div class="big"><img src="data:images/big.jpg" alt="" /></div></div>
</body>

**注意:**这里是两张一样的图片,只是大小不同。还有要注意的是想要能够移动的部分一定要加定位这样才能移动。

js部分

1.首先要拿到要用的元素

      var mask = document.querySelector('.mask')var big = document.querySelector('.big')var small = document.querySelector('.small')var box = document.getElementById('box')var bigImg = big.getElementsByTagName('img')[0]
  1. 鼠标经过的时候 显示 mask和bigBox , 当鼠标离开box的时候隐藏mask和bigBox
      box.addEventListener('mouseenter', function () {mask.style.display = 'block'big.style.display = 'block'})box.addEventListener('mouseleave', function () {mask.style.display = 'none'big.style.display = 'none'})

这样遮罩层和右边大图就会随着鼠标一起出现消失了。
3.mask(小图遮罩层)跟着鼠标走

box.addEventListener('mousemove', function (e) {// 计算鼠标在盒子里的距离var x = e.pageX - this.offsetLeftvar y = e.pageY - this.offsetTop//    mask移动的距离,除2是为了让鼠标在mask中心var maskX = x - mask.offsetWidth / 2var maskY = y - mask.offsetHeight / 2//限制mask范围不让超出小图范围if (maskX <= 0) {maskX = 0;} else if (maskX >= small.offsetWidth - mask.offsetWidth) {//mask在盒子里的移动距离maskX = small.offsetWidth - mask.offsetWidth}if (maskY <= 0) {maskY = 0;} else if (maskY >= small.offsetHeight - mask.offsetHeight) {//mask在盒子里的移动距离maskY = small.offsetHeight - mask.offsetHeight}mask.style.left = maskX + 'px'mask.style.top = maskY + 'px'

4.大图跟着mask走

    // 3 当mask移动的时候,让大图片移动// 求 大图片移动的距离// 大图片移动的距离 = mask移动的距离  * 大图片最大能够移动的距离/ mask最大能够移动的距离var bigMaxX = bigImg.offsetWidth - big.offsetWidthvar bigMaxY = bigImg.offsetHeight - big.offsetHeightvar bigX = maskX * bigMaxX / (small.offsetWidth - mask.offsetWidth)var bigY = maskY * bigMaxY / (small.offsetHeight - mask.offsetHeight)bigImg.style.left = -bigX + 'px'bigImg.style.top = -bigY + 'px'

js全部代码

    <script>var mask = document.querySelector('.mask')var big = document.querySelector('.big')var small = document.querySelector('.small')var box = document.getElementById('box')var bigImg = big.getElementsByTagName('img')[0]// 1 鼠标经过的时候 显示 mask和bigBox , 当鼠标离开box的时候隐藏mask和bigBox// mouseenter   mouseleave     不会触发事件冒泡// mouseover   mouseout        会触发事件冒泡box.addEventListener('mouseenter', function () {mask.style.display = 'block'big.style.display = 'block'})box.addEventListener('mouseleave', function () {mask.style.display = 'none'big.style.display = 'none'})// mask跟着鼠标走box.addEventListener('mousemove', function (e) {// 计算鼠标在盒子里的距离var x = e.pageX - this.offsetLeftvar y = e.pageY - this.offsetTop//    mask移动的距离var maskX = x - mask.offsetWidth / 2var maskY = y - mask.offsetHeight / 2//限制mask范围if (maskX <= 0) {maskX = 0;} else if (maskX >= small.offsetWidth - mask.offsetWidth) {//mask在盒子里的移动距离maskX = small.offsetWidth - mask.offsetWidth}if (maskY <= 0) {maskY = 0;} else if (maskY >= small.offsetHeight - mask.offsetHeight) {//mask在盒子里的移动距离maskY = small.offsetHeight - mask.offsetHeight}mask.style.left = maskX + 'px'mask.style.top = maskY + 'px'// 3 当mask移动的时候,让大图片移动// 求 大图片移动的距离// 大图片移动的距离 = mask移动的距离  * 大图片最大能够移动的距离/ mask最大能够移动的距离var bigMaxX = bigImg.offsetWidth - big.offsetWidthvar bigMaxY = bigImg.offsetHeight - big.offsetHeightvar bigX = maskX * bigMaxX / (small.offsetWidth - mask.offsetWidth)var bigY = maskY * bigMaxY / (small.offsetHeight - mask.offsetHeight)bigImg.style.left = -bigX + 'px'bigImg.style.top = -bigY + 'px'})</script>

案例:电商放大镜写法相关推荐

  1. react基础06--react综合案例-电商网站导航

    react基础06--react综合案例-电商网站导航 1 介绍 2 案例设计模块 2.1 分类导航数据模型设计 2.2 一级分类导航切换高亮效果 2.3 显示二级分类导航 2.4 路由跳转到二级导航 ...

  2. 数据分析案例--电商指标的实际应用

    数据分析案例--天猫订单分析 数据分析的一般过程 数据来源及内容 天猫订单分析过程 数据分析的一般过程 明确项目背景,待解决的问题 : 分析逻辑,画出逻辑树,明确分析过程中的指标 : 提数分析,同时进 ...

  3. Python Web前端实战案例——电商网站商品菜单导航栏

    jQuery是一个快速.小巧.轻量级的.写的少.做的多.功能丰富的 JavaScript 库,是目前最流行的 JS 框架.利用它可以帮我们快速实现一些炫酷的效果. 目录 1 原理先知 2 思路概要 3 ...

  4. 项目案例——电商网站

    初学程序结构写的一个简单网站,使用了大量的循环语句,代码重复较多,因此参考度不大. 下面是完整代码: """ 用户登录的电商网站 """ # ...

  5. 实验八 项目案例-电商数据分析

    电商大数据离线计算 第1关:统计用户流失情况 任务描述 相关知识 数据文件格式说明 用户流失情况 编程要求 测试说明 代码实现 第2关:统计所有商品点击量排行 任务描述 相关知识 数据文件格式说明 商 ...

  6. 数据分析案例 - 电商行业数据分析

  7. 电商 静态页面(详细讲解)

    目录 实现步骤 实现代码 今日金句 实现步骤 1.在容器中引入图片(小图片) 2.设置图片大小 按照总图片大小以及间隔来设置容器大小 3.将图片和容器脱离文档流 4.插入向左向右控制的div 5.将所 ...

  8. 电商的1000+篇文章总结

    电商的1000+篇文章总结 本文收集和总结了有关电商的1000+篇文章,由于篇幅有限只能总结近期的内容,想了解更多内容可以访问:http://www.ai2news.com/, 其分享了有关AI的论文 ...

  9. 基于MaxCompute+开放搜索的电商、零售行业搜索开发实践

    简介:搜索一直是电商行业流量来源的核心入口之一,如何搭建电商行业搜索并提升搜索效果,一直是电商行业开发者努力攻克的难题.基于传统数据库或开源引擎虽然能够搭建基础搜索服务,但随着商品数据的增多和业务流量 ...

最新文章

  1. STM32低功耗模式下GPIO如何配置最节能?
  2. Web前端人员如何面试?常见vue面试题有哪些?
  3. LeetCode 138. 复制带随机指针的链表(哈希 / 深拷贝)
  4. CAD图纸上面缺失的线条如何将其进行补充?
  5. 小程序“成语猜题”部分答案,总共28667题
  6. 计算机专业大学生买什么u盘合适,12款热销U盘横评:哪款U盘最值得买?
  7. 201671010443 徐明锦 词频统计软件项目报告
  8. 邯郸市信息产业局关于参加2007’中国河北软件与信息服务业发展国际论坛的通知...
  9. SQL 如何返回最大值所在的多条记录
  10. JavaScript插件编写
  11. iframe、frame、frameset那些事
  12. 恶意代码分析实战 9 隐蔽的恶意代码启动
  13. Dobot的一些理解
  14. 用函数求斐波那契数列前n项和
  15. GitLab CI/CD .gitlab-ci.yaml 关键词(十二):条件限定,only ,except,触发规则rules,工作流workflow
  16. JNI入门课程-第二章:JNI基础调用
  17. 基于JAVA的远程屏幕监控系统
  18. win7pc请求kms激活失败,错误代码0xC004F035
  19. 东原晴天见版《花儿与少年》带你发现旅行的意义
  20. 升腾、实达终端绑定辅助脚本程序

热门文章

  1. KEAZ128 时钟配置
  2. ISIS-P2P网络的LSDB更新
  3. android 远吗编译 刷机 小米,小米10/小米10 Pro系统源代码现已开源,能刷机才是为发烧而生...
  4. 计算机多媒体技术的应用,计算机多媒体技术及其应用.ppt
  5. Resources Root目录和Sources Root目录的区别
  6. 4_竞赛无人机基本自动飞行支持函数与导航控制函数解析——零基础学习竞赛无人机搭积木式编程
  7. 华为设备配置小型园区网
  8. vue不具名插槽与具名插槽
  9. 编程语言理解3-目前主流的编程语言有哪些,分别的应用场景是什么
  10. 春天开始Spring