原生JS实现图片放大镜插件

  前  言

  我们大家经常逛各种电商类的网站,商品的细节就需要用到放大镜,这个大家一定不陌生,今天我们就做一个图片放大镜的插件,来看看图片是如何被放大的……

先看一下我们要是实现的最终效果是怎么样的    ↓

看完效果,大家有思路了吗,没有的话,我们一起来看一下是如何实现的~

1实现思路

① 要实现指上后放大的效果,需要做三个div,一个用来放原图,另一个用来放放大效果的div,最后一个是鼠标指上后需要放大部分的div(这个div我们用p标签来代替)。

② 确定放大比例,最重要的一点,鼠标指上的div与放大效果的div,和原图与放大图的比例要相等。

③ 将鼠标指上后的放大效果显示出来。

2具体实现步骤

首先,我们先来建三个div。

      <div id="wrapper">
         <!--小图-->
        <div id="img_min">
              <!--图片-->
              <img src="img/11.png" alt="min">
              <!--跟随鼠标的白块-->
              <p id="mousebg"></p>
          </div>
      <!--大图-->
          <div id="img_max">
              <img id="img2_img" src="img/11.png" alt="max">
          </div>
     </div> 

我们HTML代码部分已经全部完成,接下来,我们用JS来实现功能:

给原图添加三个事件,分别是,鼠标进入,鼠标移动,鼠标移出。

当鼠标移入原图时,鼠标指上时的div和放大效果的div同时显示。

         img1.onmouseover = function () {
              //鼠标进入
              img2.style.display = ‘block‘;
              mousebg.style.display = ‘block‘; 

         }         

鼠标移出事件:

         img1.onmouseout = function () {
              //鼠标离开
              img2.style.display = ‘none‘;
              mousebg.style.display = ‘none‘;
         } 

重点是当鼠标移动时,根据p标签与原图的位置,来显示大图需要放大的部分。

            var _event = event||window.event;//兼容性处理
              var mouseX = _event.clientX - img1.offsetLeft;
              //计算鼠标相对与小图的位置
              var mouseY = _event.clientY  - img1.offsetTop; 

在做位置分析时,需要考虑四种临界情况:

就是当鼠标从图片的上、下、左、右刚刚进入时,并且这个距离小于鼠标指上的div宽度的二分之一时,放大效果的div显示出来,并不移动。

              //特殊情况处理,分别靠近四条边的时候
              if(mouseX<mousebg.offsetWidth/2){
               mouseX = mousebg.offsetWidth/2;
              }
              if(mouseX>img1.offsetWidth-mousebg.offsetWidth/2){
               mouseX = img1.offsetWidth-mousebg.offsetWidth/2;
              }
              if(mouseY<mousebg.offsetHeight/2){
               mouseY = mousebg.offsetHeight/2;
              }
              if(mouseY>img1.offsetHeight-mousebg.offsetHeight/2){
               mouseY = img1.offsetHeight-mousebg.offsetHeight/2;
              } 

最后,计算大图的显示范围:

              //计算大图的显示范围
              img2_img.style.left = -mul*mouseX+img2.offsetWidth/2+"px";
              img2_img.style.top = -mul*mouseY+img2.offsetHeight/2+"px";
              //使鼠标在白块的中间
              mousebg.style.left = mouseX-mousebg.offsetWidth/2+"px";
              mousebg.style.top = mouseY-mousebg.offsetHeight/2+"px"; 

这样,我们用JS实现图片放大镜的插件就全部完成了~

如果有任何疑问,欢迎大家留言指正~

时间: 2024-07-31 18:09:44

原生JS实现图片放大镜插件的相关文章

原生js实现的放大镜效果

这是我用原生js写的放大镜效果,与各种各样的框架技术相比,我喜欢使用原生的js,在这里,想和大家一起谈谈原生和框架技术的理解与个人喜好. <!DOCTYPE HTML><html> <head> <title>js放大镜效果</title> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> <style&

原生JS 实现图片延迟加载

当打开页面,在页面上有很多图片需要加载的情况下,为了不拖网页性能,我们完全可以使用JS延迟加载这些图片,甚至做到按需加载,这里说一下实现思路,可以事先在img标签上,增加一个属性data-url,如<img data-url="真实图片地址" src="默认图片地址" />,通过js获取首屏的高度,这部分img默认优先加载,后续通过滚动条的滚动区域来获取即将加载的img标签,找到这些img标签后,把src属性值替换为data-url的值,巧妙的做到img

页面性能优化-原生JS实现图片懒加载

在项目开发中,我们往往会遇到一个页面需要加载很多图片的情况.我们可以一次性加载全部的图片,但是考虑到用户有可能只浏览部分图片.所以我们需要对图片加载进行优化,只加载浏览器窗口内的图片,当用户滚动时,再加载更多的图片.这种加载图片的方式叫做图片懒加载,又叫做按需加载或图片的延时加载.这样做的好处是:1.可以加快页面首屏渲染的速度:2.节约用户的流量. 一.实现思路 1.图片img标签自定义一个属性data-src来存放真实的地址. 2.当滚动页面时,检查所有的img标签,判断是否出现在事业中,如果

原生JS编写图片切换效果和点击按钮的样式变化

这两天更进一步的了解了JS,老师让我们用原生的js编写图片切换和改变点击按钮样式,就是让我们学会怎么去把一个问题拆分,怎么将一个大问题拆分成许多的小问题,再用函数封装起来.比如一个点击按钮,让其点击时背景色发生改变,点击另一个时,上一个按钮要变回原来本有的颜色:这个问题用jquery,一行代码就搞定,但是用原生js就得分三个部分来考虑: 1.添加改变背景的样式. 2.怎么获取到除了当前点击的按钮以外其他的兄弟节点. 3.怎么去除按钮的样式属性. 也讲了事件委托,实现了可以删除新添加的元素的功能.

一个关于原生 js 开发一款插件的前端教程

教程链接: http://www.codeasily.net/course/plugin_course/ 写的不是很好,前面比较松后面比较急,请大家见谅,本人也没多少年前端经验,拿以前写过的教程网站,加上自己有个开源项目,可以拿出来讲一讲.也算是圆了一直以来想写关于原生 js 开发的教程的小目标??.因为原生 js 开发可能是很多新手最容易放弃的一道坎,以前我刚学前端的时候也是对原生 js 避而远之,选择一些现成的框架库就行了,直到有人肯教我才会学的?? 这是个免费教程,个人开发,没有内测的人,

Jqurey图片放大镜插件

最近在自学前端的东西,感觉很神奇的样子.没事的时候就写点小东西. 刚刚自己写了一个图片的放大镜效果.请大家多多提出修改建议. 不说废话了, 先贴代码! $(function () { var w = $(".mask img").width() / 2; //获取图片的宽和高. var h = $(".mask img").height() / 2; var mask = $(".mask"); mask.css({ "width&qu

原生js解决图片点击左右切换(简单轮播图)

想写一个综合性的小案例,主要会运用到数组和判断以及我前面几篇博客所复习到的js的知识.今天案例想要实现的效果图如下图所示: 效果是:点击"循环切换"按钮,那么"一号"位置的文案就要写入"图片可以循环",而下面的左右箭头在点击过程中可以循环点击,并且"二号"和"三号"要响应切换到相对应的数字和文字内容:否则,点击"顺序切换"按钮,那么"一号"位置的文案就要写入"

JS实现图片放大镜

将一个小图放置在一个小盒子里,当鼠标在小盒子里移动时,出现一个移动块,右侧出现一个大盒子,显示出小盒子中移动块所在区域的等比例放大的图片内容.需要实现的效果如下: 基本实现思路为:右侧大盒子为一个可视区域,有左侧小盒子中的图片的等比例放大图片,通过计算图片需要移动的距离来显示出想要放大的内容,超出部分设置为隐藏. HTML和CSS内容如下: <head> <meta charset="UTF-8"> <title>放大镜</title>

原生js实现图片网格式渐显、渐隐效果

写正文前先吐槽一下:端午放假完第一天去某千人以上公司面试前端工程师,第一轮是我应聘职位的部门小领导,谈的不错,面试主要围绕要用到的技术来:第二轮来了我要说的正主,我了个去,问的问题一个和前端无关,问我什么是"死锁",实现二叉树的先序遍历的算法,我真的想知道我面试的是前端么,职责不是用React框架实现公司官网的维护和迭代么.我不否认他问的这些知识点属于某一领域内的基础,但是我哪个前端工程师非必要的情况下在工作2,3年内专门去了解这些工作中几乎用不到的知识呢.我前端都学不完,没学透呢.