Web APIs——实战案例

图片切换模块及放大镜效果

分析:

  1. 鼠标经过对应小盒子,左侧中等盒子显示对应中等图片
  2. 鼠标经过中盒子,右侧会显示放大镜效果的大盒子
  3. 黑色遮罩盒子跟着鼠标来移动
  4. 鼠标在中等盒子上移动,大盒子的图片跟着显示对应位置

思路分析:

①:鼠标经过小盒子,左侧中等盒子显示对应中等图片

  1. 获取对应的元素

  2. 采取事件委托的形式,监听鼠标经过小盒子里面的图片, 注意此时需要使用 mouseover 事件,因为需要事件冒泡触发small

  3. 让鼠标经过小图片的爸爸li盒子,添加类,其余的li移除类(注意先移除,后添加)

  4. 鼠标经过小图片,可以拿到小图片的src, 可以做两件事

    • 让中等盒子的图片换成这个 这个小图片的src

    • 让大盒子的背景图片,也换成这个小图片的 src (稍后做)

②: 鼠标经过中等盒子,右侧大盒子显示

  1. 用到鼠标经过和离开,鼠标经过中盒子,大盒子 利用 display 来显示和隐藏

  2. 鼠标离开不会立马消失,而是有200ms的延时,用户体验更好,所以尽量使用定时器做个延时 setTimeout

  3. 显示和隐藏也尽量定义一个函数,因为鼠标经过离开中等盒子,会显示隐藏,同时,鼠标经过大盒子,也会显示和隐藏

  4. 给大盒子里面的背景图片一个默认的第一张图片

③: 黑色遮罩盒子跟着鼠标来移动

  1. 先做鼠标经过 中等盒子,显示隐藏 黑色遮罩 的盒子

  2. 让黑色遮罩跟着鼠标来走, 需要用到鼠标移动事件 mousemove

  3. 让黑色盒子的移动的核心思想:不断把鼠标在中等盒子内的坐标给黑色遮罩层 let top 值,这样遮罩层就可以跟着移动了

    • 需求

      • 我们要的是 鼠标在 中等盒子内的坐标, 没有办法直接得到

      • 得到1: 鼠标在页面中的坐标

      • 得到2: 中等盒子在页面中的坐标

    • 算法

      • 得到鼠标在页面中的坐标 利用事件对象的 pageX

      • 得到middle中等盒子在页面中的坐标 middle.getBoundingClientRect()

      • 鼠标在middle 盒子里面的坐标 = 鼠标在页面中的坐标 - middle 中等盒子的坐标

      • 黑色遮罩层不断得到 鼠标在middle 盒子中的坐标 就可以移动起来了

      注意 y坐标特殊,需要减去 页面被卷去的头部

      为什么不用 box.offsetLet 和 box.offsetTop 因为这俩属性跟带有定位的父级有关系,很容被父级影响,而getBoundingClientRect() 不受定位的父元素的影响

    • 限定遮罩的盒子只能在middle 内部移动,需要添加判断

      • 限定水平方向 大于等于0 并且小于等于 400

      • 限定垂直方向 大于等于0 并且小于等于 400

    • 遮罩盒子移动的坐标:

      • 声明一个 mx 作为移动的距离

      • 水平坐标 x 如果 小于等于100 ,则移动的距离 mx 就是 0 不应该移动

      • 水平坐标 如果 大于等于100 并且小于300,移动的距离就是 mx - 100 (100是遮罩盒子自身宽度的一半)

      • 水平坐标 如果 大于等于300,移动的距离就是 mx 就是200 不应该在移动了

      • 其实我们发现水平移动, 就在 100 ~ 200 之间移动的

      • 垂直同理

        let mx = 0, my = 0;
        if (x <= 100) mx = 0
        if (x > 100 && x < 300) mx = x - 100
        if (x >= 300) mx = 200

        if (y <= 100) my = 0
        if (y > 100 && y < 300) my = y - 100
        if (y >= 300) my = 200
        

大盒子图片移动的计算方法:

  • 中等盒子是 400px 大盒子 是 800px 的图片

  • 中等盒子移动1px, 大盒子就应该移动2px, 只不过是负值

large.style.backgroundPositionX = - 2 * mx + 'px'
large.style.backgroundPositionY = - 2 * my + 'px'




  
  小兔鲜儿 - 新鲜 惠民 快捷!
  
  
  
  
  



  
  
  
  
  
  • 销量人气

    1999+

    销量人气

  • 商品评价

    999+

    查看评价

  • 收藏人气

    299+

    收藏商品

  • 品牌信息

    小米

    品牌主页

小米电视4A 32英寸

全面屏设计 / 高清分辨率 / 海量内容 / 1G+4G大内存 / 多核处理器

¥1899¥2999

促销
12月好物放送,App领券购买直降120元
配送
陕西 西安
服务
无忧退货 快速退款 免费包邮 了解详情
颜色
颜色
22英寸 42英寸 52英寸 62英寸
数量
- +
商品名称:小米L32M5-AZ
商品编号:4620979
商品毛重:8.0kg
商品产地:中国大陆
屏幕尺寸:32英寸及以下
能效等级:三级能效
电视类型:人工智能
选购指数:6.9-6.0
观看距离:2m以下(≤32英寸)

注意事项

• 购买运费如何收取?

单笔订单金额(不含运费)满88元免邮费;不满88元,每单收取10元运费。(港澳台地区需满500元免邮费;不满500元,每单收取30元运费)



• 使用什么快递发货?

默认使用顺丰快递发货(个别商品使用其他快递)

配送范围覆盖全国大部分地区(港澳台地区除外)。



• 如何申请退货?

1.自收到商品之日起30日内,顾客可申请无忧退货,退款将原路返还,不同的银行处理时间不同,预计1-5个工作日到账;

2.内裤和食品等特殊商品无质量问题不支持退货;

3.退货流程: 确认收货-申请退货-客服审核通过-用户寄回商品-仓库签收验货-退款审核-退款完成;

4.因小兔鲜儿产生的退货,如质量问题,退货邮费由小兔鲜儿承担,退款完成后会以现金券的形式报销。因客户个人原因产生的退货,购买和寄回运费由客户个人承担。

24小时热销榜

USB Type C数据线

快速充电,稳定传输

¥29

USB Type C数据线

快速充电,稳定传输

¥29

USB Type C数据线

快速充电,稳定传输

¥29

专题推荐

一往无前,诞生于崛起

一往无前,诞生于崛起

一往无前,诞生于崛起

 

你可能感兴趣的:(JavaScript,前端,javascript,html)