原生javascript防淘宝商品详情实现放大镜效果

用原生js实现淘宝详情页图片放大镜效果 这个功能是我在模仿淘宝详情页的时候做出来的,最初版本对于非1:1比例的图片没有做处理,后续对程序进行了完善和逻辑上修改,形成了当前的程序。废话不多说,直接进入正题了,先上个效果图先放上这段功能的html代码<div id="full-pic">     <img src="img/full-pic-1.jpg" alt="">     <span id="pic-sp. 阅读详情

我们经常逛淘宝的时候到淘宝商品详情看的时候,会经常使用到商品图片的放大镜功能,以前一直不知道怎么实现,遇到基本上都是网上找代码改,今天就用原生的js实现以下放大镜效果。

码云上的代码:
js淘宝放大镜效果

效果如下图所示(ps:请忽略掉图片那个丑逼):
这里写图片描述

实现原理:

准备好大图(清晰的)和小图,两张图片必须一样只是放大或者缩小了而已,鼠标移入小缩略图的时候,上面的小图显示相应的图片,当鼠标移入上面的小图的时候,显示zoom和大图的box,然后鼠标在里面移动的时候通过 //鼠标到可视化窗口左边的距离减去小图遮罩层的一半宽度则为zomm的left的值,同理可以求top的值

zoom.style.left = event.clientX - zoom.offsetWidth/2 + “px”;
zoom.style.top = event.clientY - zoom.offsetHeight/2 + “px”;

然后用大图的尺寸除以小图的尺寸,那么就可以得出两个图片的放大比,当鼠标在左边的小图上移动的时候,通过放大比,就可以求出右边大图要向左或者上偏移的值。即可得出想要的结果。

//左边小遮罩层left的值乘以图片之间的放大倍数,则为右边大图片的left偏移值,top同理

bigimg.style.left = “-” + zoom.offsetLeft*scale + “px”;
bigimg.style.top = “-” + zoom.offsetTop*scale + “px”;

直接上代码:

html部分:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>javascript防淘宝放大镜效果</title>
    <style>
        *{padding:0;margin:0;}
        #box{margin:10px 0 0 10px;}
        #box .smallbox{position:relative;height:327px;width:300px;}
        #box .bigbox{display:none;position:absolute;left:310px;top:0;height:327px;width:300px;overflow:hidden;}
        #box .bigbox img{position:relative;}
        #box .zoom{display:none;position:absolute;height:100px;width:100px;background:#000;opacity:0.75;}
        #box .item{margin-top:5px;font-size:0;}
        #box .item img{height:70px;width:70px;margin-right:6px;}
    </style>
</head>
<body>
    <div class="scale-img" id="box">
        <div class="wrapbox">
            <!--左边小图片-->
            <div class="smallbox">
                <!--放大镜小层-->
                <div class="zoom"></div>
                <img src="s-1.png" class="smallimg">
                 <!--右边大图片-->
                <div class="bigbox">
                    <img src="b-1.png" class="bigimg">
                </div>
            </div>
            <div class="item">
                <img src="s-1.png" date-num = "1">
                <img src="s-2.png" date-num = "2">
                <img src="s-3.png" date-num = "3">
                <img src="s-4.png" date-num = "4">
            </div>
        </div>
    </div>
</body>
</html>

javascript部分:

    (function(){
        //预先加载大图,避免后面鼠标移入后显示大图时再去请求资源,影响体验
        new Image().src = "b-1.png";
        new Image().src = "b-2.png";
        new Image().src = "b-3.png";
        new Image().src = "b-4.png";

        var smallbox = document.querySelector("#box .smallbox");    //小图片box
        var bigbox = document.querySelector("#box .bigbox");    //大图片box
        var smallimg = smallbox.querySelector(".smallimg"); //小图片
        var bigimg = bigbox.querySelector(".bigimg");   //大图片
        var zoom = document.querySelector(".zoom");
        var itemImg = document.querySelectorAll("#box .item img");

        for(var i = 0, len = itemImg.length; i < len; i++){
            (function(j){
                itemImg[j].onmouseenter = function(){
                    var imgSrc = this.src;
                    smallimg.src = imgSrc;
                    bigimg.src = "b-" + (j+1) + ".png"; 
                }
            })(i);
            

        }

        //鼠标移入事件
        smallbox.onmouseenter = function(event){
            zoom.style.display = "block";
            bigbox.style.display ="block";
            //注意:offsetWdith的值是要元素为可视状态下才可以计算出来,不然当display:none的时候则为0;

            var scale = bigimg.offsetWidth/smallimg.offsetWidth;    //放大倍数
            var ev = event || window.event;
            

            //鼠标在内部移动的时候
            this.onmousemove = function(event){
                //鼠标到可视化窗口左边的距离减去小图遮罩层的一半宽度则为zomm的left的值,同理可以求top的值
                zoom.style.left = event.clientX - zoom.offsetWidth/2 + "px";
                zoom.style.top = event.clientY - zoom.offsetHeight/2 + "px";

                //如果向左向上移动小于0,那么则设置left为0,实现紧贴着边框效果
                if(zoom.offsetLeft <= 0){
                    zoom.style.left = 0;
                }

                if(zoom.offsetTop <= 0){
                    zoom.style.top = 0;
                }
                
                //如果向右向下移动小于0,那么则设置top,实现紧贴着边框效果

                if(zoom.offsetLeft >= smallbox.offsetWidth - zoom.offsetWidth){
                    zoom.style.left = smallbox.offsetWidth - zoom.offsetWidth + "px";
                }

                if(zoom.offsetTop >= smallbox.offsetHeight - zoom.offsetHeight){
                    zoom.style.top = smallbox.offsetHeight - zoom.offsetHeight + "px";
                }

                //左边小遮罩层left的值乘以图片之间的放大倍数,则为右边大图片的left偏移值,top同理
                bigimg.style.left = "-" + zoom.offsetLeft*scale + "px";
                bigimg.style.top = "-" + zoom.offsetTop*scale + "px";

            }
        }

        //鼠标移出事件
        smallbox.onmouseleave = function(){
            bigbox.style.display = "none";
            zoom.style.display = "none";
            this.onmousemove = null;
        }

    }());
   
十六、JS实现淘宝商品详情的放大镜效果 一、思路1.界面由3种图片(小中大)组合而成;2.根据小图的索引值来控制中图的切换,但是由于大图不能直接索引,所以可以通过对中图的索引值间接索引来控制大图的切换;二、步骤1.绘制基础界面&lt;div class="block"&gt;    &lt;div class="big"&gt;&lt;/div&gt;    &lt;div class="middle"&gt;        阅读详情

相关推荐

仿淘宝的放大镜效果

主要介绍一下淘宝的放大镜效果是如何实现的,相信很多同学们对这个并不陌生。这个看似感觉很复杂的小功能,实际上原理却是非常的简单

findhappy117的博客 1945

vue3实现淘宝商品详情页放大镜效果

vue3实现淘宝商品详情页放大镜效果

留白声的博客 1594

用JS实现PC端淘宝查看商品图片放大镜效果

实现放大镜功能一、前言二、图示淘宝商品放大镜效果三、需要掌握的知识点四、放大镜实现原理五、放大镜代码及注释六、放大镜最终成果七、放大镜源码八、总结 一、前言         今天翻阅文件夹看到了之前写过的一个 js 放大镜特效.之所以想要发布在博客上,是因为觉得这个特效里面包含有一定量程度的 js 常用知识点和逻辑性,觉得发出来挺好的,我自己也能在复习掌握一下.我们废话不多说,开整! 二、图示淘宝商品放大镜效果  &n

L_u_c_k_y_m_a_n的博客 2240

使用js+css样式实现淘宝详情页图片放大镜的效果

前台: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript" src="/js/jquery-2.1.1.min.js...

听风动的博客 3625

用JavaScript实现淘宝放大镜的效果,附源码,音视频开发进阶指南

javaScript面向对象——淘宝放大镜实现图片的引用是一个大图,一个小图。传输用的ajax,记得改成自己的ip地址,js和html都改一下。js文件:LoadMethod.jsimg.num=0;this.num++;return;

m0_60635321的博客 1103

原生JS实现京东放大镜效果

js实现京东放大镜效果 我们经常会在京东、淘宝上看到一个效果 鼠标放到商品图片上会出现一个遮罩框,右侧会显示一个商品的大图细节,今天就来尝试一些自己写一个实现代码: 首先,将实现过程分为三个步骤 鼠标移入商品时,出现一个放大镜遮罩框;鼠标移出,遮罩框消失 遮罩框的位置跟随鼠标的移动而移动,但移动范围仅限为放置商品图片的盒子 右侧的大图随着放大镜的移动而移动,显示当前大图效果 在这里我们对HTML、CSS简单书写,主要对JS代码进行分析: 1.当鼠标移入左侧盒子的时候,出现放大镜以及右侧大图;移除后,放

富尔牛的博客 695

javascript--淘宝页面的放大镜效果

放大镜效果需求: 鼠标放入原图中,会出现一个黄色的遮盖层和一个放大的图片,鼠标移动时候,遮盖层会跟着鼠标一起移动,同时放大的图片会跟着一起移动。 实现过程: 1.鼠标移入,遮盖层和大图片显示 2.鼠标离开,遮盖层和大图片隐藏 3.鼠标移动的时候,遮盖层和鼠标对应移动 4.遮盖层移动时候,大图片跟着移动 效果图: ...

488

仿淘宝商品放大展示效果制作(放大镜效果)

如果您觉得这篇文章有用,欢迎点赞收藏或有什么建议请在评论区留言,我看到后会第一时间回复的,谢谢! (分享时刻) mac上取色比较好用的小工具:啜色; 好用的截屏小工具:Snipaste (常用的一个功能是可以将截图放在其他页面的顶部,尤其是在写css结构时非常方便) 接上篇玩转网页倒计时 通过这篇文章,大家可以了解到: ① 怎么制作放大效果的案例 ② 怎样将鼠标置于方框的中心 ③ 计算元素移动过程中的相对位置以及两个移动元素之间的数学关系 无人能阻挡我shopping的热情,尤其是在期盼已久的新品上架

asd18293347341的博客 2011

CSS3+JS完美实现放大镜模式

大概一年多之前写过一篇文章:仿放大镜效果的几种方式原理解析,别看标题这么牛气哄哄,其实也就算是介绍了css里的transform和animation两种动画方式 —— 当然,实现的效果也很简单。 虽然后来随着技术的增长又逐渐实现了canvas方式的放大镜以及用纯JS实现了另一种“淘宝式”的模型,其效果如下: //xz:这里是一张图片 但是仍然不尽人意:因为实现起来太复杂了,而且需依赖大部分JS逻辑,移动和显示的效果均依赖JS,通过JS计算偏移量再渲染样式。 但是CSS3自定义变量的出现让我看到了“希望之光”

flying meng的菜鸟居 1万+

淘宝详情页的图片放大效果

模拟淘宝详情页,鼠标在小图内移动,右侧出现方法大的图片

模仿淘宝产品图片左右切换js特效代码

模仿淘宝产品图片左右切换js特效代码,就像淘宝商城浏览产品展示那样,有缩略图,大图,鼠标放上去显示大图(放大镜效果)

vue项目——商品详情页面图片放大镜效果实现(完成)

昨天在做商品详情页面时,遇到一个需求,就是图片放大镜效果。在图片上鼠标划过时,右侧出现一个大图,用于展示鼠标移过的区域,也就是图片放大镜效果。 效果图基本类似如下: 我之前有篇文章js实现图片放大镜效果:https://blog.youkuaiyun.com/yehaocheng520/article/details/115278622?spm=1001.2014.3001.5501 当时是用js实现的效果,因此现在要把代码嫁接到vue创建的项目中。 html部分代码: <div class="big-img

yehaocheng520的博客 7066

js实现放大镜(类似淘宝可以切换图片).rar

js实现放大镜 (可以点击切换图片)

js实现天猫淘宝购物放大镜效果

前言 分享一个笔者写过的js实现天猫淘宝购物放大镜效果的例子 正文 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> *{ padding:...

Iwokei的博客 818

Outlook邮件规则实战:从自动化分类到GTD工作流整合

在信息过载的数字化办公环境中,自动化处理技术成为提升效率的关键。其核心原理是基于“条件-动作”的触发器模型,通过预设逻辑让系统自动执行重复性任务。这种自动化机制的技术价值在于将用户从繁琐的机械操作中解放出来,实现信息流的智能管控。在邮件管理这一典型应用场景中,自动化规则能精准处理项目邮件聚合、优先级分流等复杂需求。本文聚焦于微软Outlook的规则引擎,深入解析如何利用**规则引擎**和**触发器模型**构建高效的邮件处理系统,并进一步将其融入GTD(Getting Things Done)个人生产力框架,

weixin_31083901的博客 311

NE5532A与JRC4580在低噪声音频电路设计中的关键应用

本文深入探讨了经典运算放大器NE5532A与JRC4580在低噪声音频电路设计中的核心应用。文章从噪声模型分析入手,阐述了针对低阻抗信号源时,如何利用这两款BJT输入运放的低电流噪声特性进行优化设计。通过对比两者参数与实战守则,为设计高保真音频前级、耳机放大等电路提供了从原理图到PCB布局的完整低噪声解决方案。

weixin_29295541的博客 327

原生JS做淘宝商品放大镜

原生JS做淘宝商品放大镜 效果图预览 HTML部分 结构分析 首先要清楚整个界面的分布情况,这里用id或是class,我一开始用的都是id,但后面做js的时候有一些需要document. querySelectorAll("className")返回一个关于class="className"数组,,我才改过来的 div id="itemarea":整个区域最大的div,包含着其他的div元素 div id="pic":存放被选中的大图片的区域 div id="cover":跟随鼠标浮动的用于选择将要被

weixin_45702261的博客 650

Cadence HDL原理图库避坑指南:从Excel导入引脚到解决‘V- V+’报错(附FPGA实例)

本文详细介绍了Cadence HDL原理图库的高效构建与排错方法,重点讲解如何从Excel智能导入引脚数据并优化FPGA封装设计。通过数据预处理、智能导入和深度排错三个关键阶段,帮助工程师避免常见错误如‘V- V+’报错,提升设计效率和准确性。

weixin_28739079的博客 234

【每日一练】原生js仿淘宝主图放大镜功能,附学习源码

在我们的项目中,经常会遇到各种功能效果的实现,对于每一项功能的实现方式,都有很多种,这些实现方式没有好坏之分,只有适合与否,但是我个人建议,如果项目急就选择自己擅长的方式...

web前端开发 871

【数学建模】 进化计算与群体智能

遗传算法(GA)是一种用于优化和搜索问题的启发式算法。它模拟了自然选择的过程,其中个体通过遗传和变异进行繁殖,逐渐进化出更优的解。基本步骤初始化:生成初始种群。适应度评估:评估种群中每个个体的适应度。选择:根据适应度选择个体进行繁殖。交叉:选定个体对进行基因交换,生成新的后代。变异:对一些个体进行基因变异,以增加多样性。迭代:重复评估和繁殖过程,直至达到停止条件。粒子群优化算法(PSO)是一种基于群体智能的优化算法,由Kennedy和Eberhart于1995年提出。其灵感来源于鸟群觅食的行为。

weixin_42914989的博客 1113

整理并记录几种运算放大器

运算放大器是一种十分常见的电子元器件,最近我在学习运放,以前在学校没有好好的学习,今天在B站看了唐老师讲运算放大器-唐老师讲电赛系列视频教程,记录下所学的,纯当是自己的笔记 学习运放,有两个重要的概念及重要的计算法宝,虚短vp=vn;和虚断ip=in 1反向比例运算电路 Rf可以大于、小于或等于R,起到放大、跟随、衰减输入的作用; 平衡电阻没有太高的精度要求,可加可不加; 有些运放内部集成了补偿电路,就不需要使用平衡电阻,加了反而增大误差,如OPA227 2.同向比例运放电路 .

qq_36823004的博客 6364

实现淘宝放大镜效果

实现淘宝放大镜效果 首先应该清楚要实现的效果 然后确定图片、遮盖层的长宽,以及放大效果的长宽,然后实现遮盖层的移动,放大图片的同步,我们可以通过在图片中的半径来计算,下面贴下代码 <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="wi...

qq_38427709的博客 477

系统安全性评估 (SSA) 详细解析

系统安全性评估(SSA)是一种自下而上的验证过程,目的是确保系统设计中的每个功能、子系统、硬件和软件的实现,符合早期通过 FHA 和 PSSA 设定的安全性需求。它通过对已实现的系统进行系统性综合评价,检验各项设计和安装是否符合预期的安全性目标,最终支持飞机的适航认证。飞行控制系统是飞机安全性设计的核心子系统之一,负责控制飞机的姿态和方向。为了确保飞行控制系统能够在各种飞行条件下保持安全运行,SSA 被用于验证该系统的设计是否满足 FHA 中设定的安全性目标。

qq_41854911的博客 1651

web前端高级实战 - 实现京东淘宝商品详细放大镜效果

web前端高级实战:实现商品详细放大镜效果 在我们访问淘宝天猫或京东等购物网站时,点击某个商品进入详情页面会看到一个商品的缩略图,当鼠标浮到缩略图上时,在右侧就会出现一个大图并且可以挪动,如下图: 思路分析 HTML+CSS布局 首先有个小盒子用来存放缩略图 在小盒子中应该有张图片(缩略图)和一个半透明的遮罩层 遮罩层默认隐藏,当鼠标悬浮到小盒子上时,遮罩层显示 紧挨着小盒子有个大盒子,用来存放商品大图,默认也是隐藏,商品大图的大小要大于大盒子的大小 当鼠标悬浮到小盒子上时,大盒子显示

lixiaosenlin的专栏 6525

MIKE 21 教程 2.2 Domain, Time, Module Selection设置教学

上一节讲解了水动力模型的基本概念与文件创建MIKE 21 教程 2.1水动力模型介绍​本节讲解水动力模型前三个模块的设置此模块需导入之前绘制好的网格文件,导入后可预览网格文件点击上方的Domain Specification可查看网格的数据统计与高程属性,快速检查网格文件有无明显错误 点击上方的Boundary names,可查看之前定义的出入水边界。在网格文件中,我们对边界只能以数字属性进行区分,这里可以对数字属性进行命名,在name中直接修改即可。本实例中我们的2代表入水边界,3代表出水边界。因为博主日

Hello Word 3865

2025年09月中国电子学会青少年软件编程(Python)等级考试试卷(一级)答案 + 解析

2025年09月中国电子学会青少年软件编程(Python)等级考试试卷(一级)答案 + 解析

伶俐角少儿编程 639
上一篇: javascript倒置字符串的方法
下一篇: 原生javascript防jquery的trigger触发鼠标事件
#麻辣小龙虾#
博客等级 码龄11年 1万+粉丝 235原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值