简单的电商商品详情图片放大镜(vue)

电商平台常常出现的鼠标移动到商品上面,放大商品图片查看商品细节,其实就是一个鼠标跟随事件的应用。

一、从服务器先获取图片:本次获取图片是从父组件传过来的

服务器请求回来的数据结构如下:一个数组包含多个对象,图片在对象里

 props 接收父组件传过来的图片,并对传过来的图片进行了简单处理

<script>
export default {
    name:"Zoom",
    props:["skuImageList"],
    computed:{
        // 当服务器的数据没有回来的时候父组件传过来 skuImageList 的是一个空数组
        // 空数组 [0] 就会 undefined 报错,  
        imgObj(){
            return this.skuImageList[0] || {}
        }
    }
}
</script>

二、书写 html 结构

放大镜由一个原图,一个放大的细节图,一个蒙版构成

<template>
  <div class="fangda">
    <!-- 放大镜 -->
    <div class="small">
        <img id="img1" :src="imgObj.imgUrl" />
    </div>
    <div class="event" @mousemove="handler"></div>
    <div class="big">
        <img id="img2" :src="imgObj.imgUrl" ref="big"/>
    </div>
    <!-- 蒙板 -->
    <div class="mask" ref="mask"></div>
  </div>
</template>

三、书写js

1、获取蒙版和放大图的元素

2、计算蒙版左边和顶部的数值

3、约束蒙版的上下左右范围,以免蒙版部分溢出

methods:{
        handler(event){
            console.log('1');
            let mask = this.$refs.mask   // 获取元素
            let big = this.$refs.big
            let l = event.offsetX - mask.offsetWidth/2  // 计算蒙版左边和顶部的数值
            let t = event.offsetY - mask.offsetHeight/2
            // 约束蒙版上下左右的范围
            if(l<0) l=0
            if(l>mask.offsetWidth)l = mask.offsetWidth
            if(t<0)t=0
            if(t>mask.offsetHeight)t = mask.offsetHeight
            mask.style.left = l+"px"
            mask.style.top = t+"px"
            big.style.left = -2*l +'px'
            big.style.top = -2*t +'px'
        }
    }

四、样式

小图采用 100%,大图采用 宽高都放大1倍

<style scoped>
    .fangda{
   position: relative;
  width: 400px;
  height: 400px;
  border: 1px solid #ccc;
    }  
    #img1{
        width: 100%;
        height: 100%;
    } 
  .event {
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0;
    left: 0;
    z-index: 998;
  }

  .mask {
    width: 50%;
    height: 50%;
    background-color: rgba(0, 255, 0, 0.3);
    position: absolute;
    left: 0;
    top: 0;
    display: none;
    border-radius: 50%;
  }
  .big {
    width: 100%;
    height: 100%;
    position: absolute;
    top: -1px;
    left: 100%;
    border: 1px solid #aaa;
    overflow: hidden;
    z-index: 998;
    display: none;
    background: white;
  }
    img {
      width: 200%;
      max-width: 200%;
      height: 200%;
      position: absolute;
      left: 0;
      top: 0;
    }     
      .event:hover ~ .mask,
  .event:hover ~ .big {
    display: block;
  }
</style>

最后效果

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值