js案例3---商品放大镜

本文介绍了一个JavaScript实现的交互效果,包括左右按钮控制小图滑动,点击小图显示选中状态并展示对应的中图和大图。通过创建层实现鼠标悬停时的放大显示,并限制层在中图内的移动范围,同时调整大图的背景位置以匹配层的位置变化。此外,还提供了点击小图时更新中图和大图的逻辑代码。
摘要由CSDN通过智能技术生成

一、案例效果

二、实现步骤

  • 首先设置左右两个按钮,点击左边按钮往左滑,点击右边按钮往右滑,然后设置点击底下小图的效果,出现红框以及右下角出现√,再根据小图得到最终的中图以及大图,在小图上创建一个层(鼠标进入出现层,鼠标离开层消失),设置层的大小(要成比例),然后对层的坐标进行限制,然后再根据比例滑动层的时候对应出现大图的部分。

三、核心代码

	//获取所有的small_box
    var small_box = document.querySelectorAll(".small_box");
    //获取两个按钮
    var leftbtn = document.querySelector(".leftbtn");
    var rightbtn = document.querySelector(".rightbtn");
    //获取小图的容器
    var small_list = document.querySelector(".small_list");
    //获取小图图片
    var small_img = document.querySelector(".small_img");
    //获取中图图片
    var c_middle_img = document.querySelector(".c_middle_img");
    //获取中图容器
    var c_middle = document.querySelector(".c_middle");
    //获取最大父容器
    var c_box = document.querySelector(".c_box");
    //获取大图容器
    var big_img = document.querySelector(".big_img");
    var bili=800/350;
    //使用变量接收层
    var pos_ceng=null;
    c_middle.onmouseenter=function(){
        pos_ceng=document.createElement("div");
        pos_ceng.className="ceng";
        //创建时要按照比例计算层的宽高
        var cenh_w = 500 / bili;
        pos_ceng.style.width = cenh_w + "px";
        pos_ceng.style.height = cenh_w + "px";
        this.appendChild(pos_ceng);
        big_img.style.display="block";
    };
    c_middle.onmouseleave=function(){
        pos_ceng.remove();
        big_img.style.display="none";
    };
    c_middle.onmousemove=function(e){
        var x= (e.pageX-c_box.offsetLeft)-pos_ceng.offsetWidth/2;
        var y= (e.pageY-c_box.offsetTop)-pos_ceng.offsetHeight/2;
        //对x,y进行限制
        var maxLeft=c_middle.offsetWidth-pos_ceng.offsetWidth;
        var maxTop=c_middle.offsetHeight-pos_ceng.offsetHeight;
        x=x<=0?0:x>=maxLeft?maxLeft:x;
        y=y<=0?0:y>=maxTop?maxTop:y;
        pos_ceng.style.left=x+"px";
        pos_ceng.style.top=y+"px";
        //设置大图的背景图片坐标
        big_img.style.backgroundPosition=(-x*bili)+"px "+(-y*bili)+"px";
    }
    //添加两个按钮的点击事件
    leftbtn.addEventListener("click",function(){
        small_list.style.transform="translatex(0px)";
    });
    rightbtn.addEventListener("click",function(){
        var transX=small_img.offsetWidth-small_list.offsetWidth;
        small_list.style.transform="translatex("+transX+"px)";
    });
    //使用变量接收已经选中的元素
    var save=null;
    save=small_box[0];
    for(var i=0;i<small_box.length;i++)
    {
        small_box[i].onclick=function(){
            save.classList.remove("userck");
            this.classList.add("userck");
            save=this;
            //点击小图找对应的中图
            var middle=this.getAttribute("data-middle");
            c_middle_img.src=middle;
            //点击小图换对应的大图
            var big=this.getAttribute("data-big");
            big_img.backgroundImage="url('"+big+"')";
        }
    } 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南初️

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值