用JS实线放大镜的效果

HTML代码如下:

<div id="preview">
                <div id="mediumDiv">
                    <img id="mImg" src="images/products/product-s1-m.jpg"/>//这是中级图片层
                    <div id="mask"></div>//这是遮罩
                    <div id="superMask"></div>//这是超级遮罩,作用是鼠标进入,1. 显示遮罩区域和图片放大区域;2提供鼠标移动区域
                </div>
                <div id="largeDiv"></div>//图片放大区域;
            <h1>
                <a class="backward disabled"></a>
                <a class="forward"></a>//这里注意类的书写,有类名后面有多余的空格容易导致出错,一定要注意。
                <ul id="icon_list">
                    <li><img src="images/products/product-s1.jpg" /></li>
                    <li><img src="images/products/product-s2.jpg" /></li>
                    <li><img src="images/products/product-s3.jpg" /></li>
                    <li><img src="images/products/product-s4.jpg" /></li>
                    <li><img src="images/products/product-s1.jpg" /></li>
                    <li><img src="images/products/product-s2.jpg" /></li>
                    <li><img src="images/products/product-s3.jpg" /></li>
                    <li><img src="images/products/product-s4.jpg" /></li>
                </ul>
            </h1>
            </div>

CSS代码如下:

#preview {position:absolute;top:0;left: 0;width: 352px;}
      #mediumDiv {border:1px solid #ddd;width: 350px;margin-bottom: 5px;text-align:center;position: relative;}
      #mediumDiv img { vertical-align:middle;width:350px;height:350px;}
      #mask {position:absolute;width: 175px;height: 175px;background: #ffa;opacity: 0.5;
              top:0;left:0;display: none;}
      #superMask {position: absolute;width: 350px;height: 350px;opacity: 0;left:0;top:0;cursor: move;}
      #largeDiv {position: absolute;top:0;left:351px;width: 400px;height: 400px;border:1px solid #ddd;z-index: 3;background: #fff;display: none;}
      #preview h1 {width: 352px;overflow: hidden;position:relative;height: 54px;}
      #preview .backward ,#preview .forward{height: 54px;width: 17px;background-repeat: no-repeat;background: url(Images/iconlist_1.png);display: block;position: absolute; top:0;z-index: 1}
      #preview .backward {background-position:0 -139px;left:0; }
      #preview .forward {background-position: -17px -139px;right:0;}
      #preview .backward:hover {background-position: -34px -139px;}
      #preview .forward:hover {background-position: -51px -139px;}
      #preview .backward.disabled {background-position: -68px -139px;}
      #preview .forward.disabled {background-position: -85px -139px;}
      #icon_list {position: absolute;left:25px;width: 496px;}
      #icon_list li {float:left;border:1px solid #ddd;margin-right: 8px;width: 50px;height: 50px;text-align:center;padding:1px;}
      #icon_list li:hover {border:2px solid #e4393c;padding:0;}
      #icon_list li img {width: 100%;height: 100%;}
JS代码:
// 放大镜
        (function(){
             const LIWIDTH = 62;//li的宽度
             const OFFSET = 25;//ul的其实left
             const MSIZE =175;//mask的大小
             const SMIZE =350;//supermask的大小
             var count = document.querySelectorAll(‘#icon_list>li‘).length,//li的个数
                 moved =0,//左移的个数;
                 aBackward = document.querySelector(‘#preview a.backward‘),//按钮
                 aForward = document.querySelector(‘#preview a.forward‘);//按钮
            aForward.addEventListener(‘click‘,move);
            aBackward.addEventListener(‘click‘,move);
            function move(){
                if (this.className.indexOf(‘disabled‘)==-1) {////如果当前a的class中没有disabled,这里是说没有disabled才移动,有disabled的话就不运行下面的
                if (this.className ==‘forward‘)                //代码
                    moved++;
                else
                    moved--;
                 console.log(moved)//这里注意类的书写,如果类后面有多余的空格导致出错;
                 this.parentNode.lastElementChild.style.left = -moved*LIWIDTH+OFFSET+‘px‘;
                 if (moved==0) {aBackward.className +=‘ disabled‘;}
                 else if(moved == count-5) aForward.className +=‘ disabled‘;
                 else {
                           aForward.className =‘forward‘;
                           aBackward.className=‘backward‘;
                 }
            }
          }
          var Image = document.getElementById(‘mImg‘);
          //为id为icon_list的ul绑定鼠标进入事件:
          document.getElementById(‘icon_list‘).addEventListener(‘mouseover‘,function(e){
                if (e.target.nodeName.toLowerCase() ==‘img‘) {//此处利用冒泡事件,给每个img元素绑定了鼠标移入事件、
                       var src = e.target.src.split(‘.‘)[0]+‘-m.jpg‘;
                       Image.src = src;

               }
          })
          var sm=document.getElementById("superMask")
              mask=document.getElementById("mask"),
              lgDiv=document.getElementById("largeDiv");

            sm.addEventListener(‘mouseover‘,function(){
                mask.style.display="block";
              lgDiv.style.display="block";
              var src = Image.src;
              var i = src.lastIndexOf(‘.‘);
              src = src.slice(0,i-1)+‘l‘+src.slice(i);
              lgDiv.style.backgroundImage = ‘url(‘+ src+‘)‘;
            })
            sm.addEventListener("mouseout",
                  function(){
                       mask.style.display="";
                       lgDiv.style.display="";
    }
  );
            //为sm绑定鼠标移动事件
            var MAX=SMIZE-MSIZE;
            sm.addEventListener(‘mousemove‘,function(e){
              var x = e.offsetX,y = e.offsetY;
              var top = y-MSIZE/2,left = x-MSIZE/2;
              if(top <0) top =0;
              else if(top >MAX) top =MAX;
              if (left <0) left =0;
              else if (left >MAX) left =MAX;
               mask.style.cssText=
                 "display:block; left:"+left+"px; top:"+top+"px";
              lgDiv.style.backgroundPosition=
                  -left*16/7+"px "+ -top*16/7+"px";
            })
时间: 2024-11-10 08:11:16

用JS实线放大镜的效果的相关文章

用js实现放大镜的效果

第一次发博客,还有点小激动,本人现在正在天津上大学,希望以后从事前端这一行业,学习的时间不长,写博客为了记录自己的学习过程和收获,当然也算是巩固.可能写的东西不会像大牛那样高大上,只是一些基本的内容,当然我也会收藏一些我认为好的,不错的文章(其实最主要是我能看懂....).我相信以后自己也能够写出高大上的东西.加油! 废话说的有点多,说正事.前几天看了一段潭州教育的教学视频,其中的老师是用JQuery实现放大镜的效果(老师讲的是在是太慢,各种乱扯,跳着看的).由于我还没有好好的学习过JQuery

js图片放大镜

JS图片放大镜效果. 应用场景:各大电商网站. (附件) <!-- Author: XiaoWen Create a file: 2017-01-13 12:28:36 Last modified: 2017-01-13 17:16:46 Start to work: Finish the work: Other information: --> <!DOCTYPE html> <html lang="en"> <head> <me

jquery.jqzoom.js图片放大镜

jqzoom插件实现图片放大镜效果 1. jquery.jqzoom.js //************************************************************** // jQZoom allows you to realize a small magnifier window,close // to the image or images on your web page easily. // // jqZoom version 2.2 // Autho

js的轮播效果

图片的轮播效果!主要运用了元素的style样式属性,与 setInterval(); <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> *{ margin: 0; padding: 0; } div{ width: 960px; height: 400px; o

如何撤销浏览器注入JS代码的执行效果?

如何撤销浏览器注入JS代码的执行效果? 可用的方法: 放弃所有本地修改,整体重新reload当前的URL(这相当于大粒度的savepoint/snapshot,应确保用户数据/视图状态能够按期望恢复) 内核实现immutable的DOM树,对DOM树的每个修改均产生一个新的版本快照,修改可以直接回退,比如提供一个document.revertTo方法 immutable数据结构上实现MVCC事务,事务本身的执行是原子的,但是并没有考虑用户如何手工反转事务 实现细粒度的对应每个业务逻辑层次写操作的

一步步教你js原生瀑布流效果实现

一步步教你js原生瀑布流效果实现 什么是瀑布流效果 首先,让我们先看一段动画: 在动画中,我们不难发现,这个动画有以下特点: 1.所有的图片的宽度都是一样的 2.所有的图片的高度是不一样的 3.图片一张挨着一张竖直排列 4.鼠标向下滚动,一直不停的加载图片 5.浏览器的宽度改变,图片的列数会进行相应的更改 那么这种效果类似现实生活中的瀑布,所以我们叫它瀑布流的效果. Js原生瀑布流效果的实现 从上述分析中,我们可以把整个效果分为以下四个部分: html+css界面搭建 瀑布流效果 浏览器向下滚动

静态书架和js模拟翻书效果

书籍图片随便找了个,有点难看,须要的自己替换个好看点的png格式图片 源代码下载:http://download.csdn.net/detail/sweetsuzyhyf/7604091 静态书架和js模拟翻书效果,布布扣,bubuko.com

js 同for一样效果 (延迟)每秒循环一次 追加

<script type="text/javascript"> var j = 1;        var timeID = null;        function display() {            timeID = window.setInterval("delay()", 1000);        }        function delay() {            if (j < 1000) {           

用html+css+js实现选项卡切换效果

文章转载自:http://tongling.github.io/JSCards/ 用html+css+js实现选项卡切换效果 使用之前学过的综合知识,实现一个新闻门户网站上的常见选项卡效果: 文字素材: 房产: 275万购昌平邻铁三居 总价20万买一居 200万内购五环三居 140万安家东三环 北京首现零首付楼盘 53万购东5环50平 京楼盘直降5000 中信府 公园楼王现房 家居: 40平出租屋大改造 美少女的混搭小窝 经典清新简欧爱家 90平老房焕发新生 新中式的酷色温情 66平撞色活泼家居