放大镜

  今天我们来学习一下怎样用原生态的代码实现放大的效果,。

  具体我们要掌握的知识点有哪些呢,

  1:offsetLeft 当前元素离父元素左边的距离;

  2:offsetTop 当前元素离父元素上面的距离。

  3: offsetWidth 当前元素的宽度;

  4:offsetHeight 当前元素的高度;

  5:clientX 鼠标离浏览器左边窗口的距离;

  5:clientY 鼠标离浏览器上边窗口的距离;

  有了这几点知识就差不多了,。

  接着来看看代码 html

    <div id="box">
        <div id="small-box">
            <div id="float"></div>
            <img src="images/a.jpg" alt="">
        </div>
        <div id="big-box">
            <img src="images/a.jpg" alt="">
        </div>
    </div>

html里面的代码很简单,一个最外层的盒子里面放了两个盒子,一个盒子放小照片和一个float盒子,这个float盒子是用来移动鼠标的时候跟着一起动的放大镜,。

另外big-box这个盒子是放大图片的,。

  css

  

#box{
            margin-top: 50px;
            width: 400px;
            height: 255px;
            position: relative;
        }
        #float{
            width: 160px;
            height: 100px;
            display: none;
            background-color: #fff;
            opacity: 0.5;
            position: absolute;
            top: 0;
            left:0;
        }
        #small-box img{
            width: 400px;
            height: 255px;

        }
        #big-box{
            position: absolute;
            top:0;
            left:450px;
            width: 450px;
            height: 350px;
            overflow: hidden;
            display: none;
        }
        #big-box img{
            position: relative;
        }

另外css代码没什么需要介绍的,首先#float和#big-box元素需要隐藏,当鼠标放上去的时候让其显示,移动鼠标的时候让大图片的局部放大,。那么久引出了3个事件了,。分别是onmouseover,onmouseout,onmousemove,。

  好了最后来看看js代码

  

<script>
        window.onload =function(){
            var box =document.getElementById(‘box‘);
            var small =document.getElementById("small-box");
            var float =document.getElementById("float");
            var big = document.getElementById("big-box");
            var bigImg =big.getElementsByTagName(‘img‘)[0];
            small.onmouseover =function(){
                float.style.display="block";
                big.style.display="block";
            }
            small.onmouseout =function(){
                float.style.display="none";
                big.style.display="none";
            }
            small.onmousemove =function(ev){
                var event =ev;
                var left =event.clientX-box.offsetLeft-small.offsetLeft-float.offsetWidth/2;
                var top =event.clientY-box.offsetTop-small.offsetTop-float.offsetHeight/2;

                if(left<0){
                    left=0
                }else if(left>(small.offsetWidth-float.offsetWidth)){
                    left=small.offsetWidth-float.offsetWidth
                }

                if(top<0){
                    top=0
                }else if(top>(small.offsetHeight-float.offsetHeight)){
                    top=small.offsetHeight-float.offsetHeight
                }

                float.style.left=left+"px";
                float.style.top=top+"px";
                var percentX=left/(small.offsetWidth-float.offsetWidth);
                var percentY=top/(small.offsetHeight-float.offsetHeight);

                bigImg.style.left=-percentX*(bigImg.offsetWidth-big.offsetWidth)+"px";
                bigImg.style.top=-percentY*(bigImg.offsetHeight-big.offsetHeight)+"px";

            }

        }
    </script>

  首先我们还是一如既往的找元素,我们习惯用getElementById和getElementsByTagName的方式来找元素,并给他们赋值。找到元素后,来两个事件,意识鼠标移入事件,二是鼠标移出事件,。

small.onmouseover =function(){
                float.style.display="block";
                big.style.display="block";
            }
            small.onmouseout =function(){
                float.style.display="none";
                big.style.display="none";
            }

再来引入最重要的事件,鼠标移动事件onmousemove,当鼠标移动的时候我们能获取很多我们想要的东西,。small.onmousemove =function(ev)

  所以我们可以在function后面的括号里面传入参数ev,目的是用来获取我们在移动鼠标时想要来获取的一系列的值,。

  var event =ev;声明一个变量event,给其赋值ev,也就是赋值移动鼠标的时候获得的参数,现在就可以通过变量event来获取值了,。

  var left =event.clientX-box.offsetLeft-small.offsetLeft-float.offsetWidth/2;
  var top =event.clientY-box.offsetTop-small.offsetTop-float.offsetHeight/2;  

  left和top分别指的是放大镜左边的距离和上面的距离,。

  if(left<0){
  left=0
  }else if(left>(small.offsetWidth-float.offsetWidth)){
  left=small.offsetWidth-float.offsetWidth
  }

  if(top<0){
  top=0
  }else if(top>(small.offsetHeight-float.offsetHeight)){
  top=small.offsetHeight-float.offsetHeight
  }

  再来做一个判断,。这个判断的目的是为了当放大镜移动到最左最右最上最下的时候让放大镜不在移动的作用。

  float.style.left=left+"px";

  float.style.top=top+"px;

  在算出放大镜左边的像素值和上面的像素值,记住一定的是加px的像素值,要不放大镜是不会跟着鼠标移动的,。元素只会跟着定位了的获得的带有像素的值走,虽然通过left=small.offsetWidth-float.offsetWidth,float.style.left=left+"px";虽然这两者获得的 值都是一样的,。但是作用却不一样,简单的来说,想让元素移动就必须获得px值。此时获得可px值之后放大镜就可以跟着鼠标一起动了,另外我们只需要获得大图片的left值和top值就可以实现我们想要的效果了,。

  

  var percentX=left/(small.offsetWidth-float.offsetWidth);
  var percentY=top/(small.offsetHeight-float.offsetHeight);

  bigImg.style.left=-percentX*(bigImg.offsetWidth-big.offsetWidth)+"px";
  bigImg.style.top=-percentY*(bigImg.offsetHeight-big.offsetHeight)+"px";

  这段代码是怎么出来的呢,left比上small.offsetWidth-float.offsetWidth等于bigImg.style.left比上bigImg.offsetWidth-big.offsetWidth,这样就可以很轻松的求出bigImg.style.left值,同理bigImg.style.top的值也是一样的道理求出来,最后还是记住,这两个值一定的加上px,要不图片是不会动的,。

好了,就是这样,放大镜出来了,是不是很简单呀。

还有一点

  bigImg.style.left=-percentX*(bigImg.offsetWidth-big.offsetWidth)+"px";
  bigImg.style.top=-percentY*(bigImg.offsetHeight-big.offsetHeight)+"px";

  看看这两串代码为什么percentX和percentY为什么是负值,那是因为我们移动鼠标的方向和大图片移动的方向正好是相反的,你可以试试的。

时间: 2024-10-12 18:11:50

放大镜的相关文章

用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"

jq放大镜效果

之前有在网上见过原生js实现放大镜的效果,但是代码量略多,今天和大家分享下我自己用jq实现的放大镜效果吧! 首先html布局结构和样式 贴上代码给大伙看一下: html结构: <div class="pic"> <img src="images/xiaotu.jpg" > <div class="big-pic"></div> </div> css样式: .pic{position:re

jQuery基础(常用插件 表单验证,图片放大镜,自定义对象级,jQuery UI,面板折叠)

1.表单验证插件--validate   该插件自带包含必填.数字.URL在内容的验证规则,即时显示异常信息,此外,还允许自定义验证规则,插件调用方法如下: $(form).validate({options}) 其中form参数表示表单元素名称,options参数表示调用方法时的配置对象,所有的验证规则和异常信息显示的位置都在该对象中进行设置.     2.表单插件--form 通过表单form插件,调用ajaxForm()方法,实现ajax方式向服务器提交表单数据,并通过方法中的option

放大镜 鼠标滑入 鼠标滑轮放大

今天是周六,陪朋友逛了一天,回来就写代码,写到吐血了~~~ 已实现功能: 1.图片局部放大 2.按住鼠标右键时,滑动鼠标滑轮,可修改放大缩小倍数 本段代码仍存在问题: 1.代码不够精简 2.按住鼠标右键移动时,放大镜内图片不能随之放大代码并不完善,有时间再写, 原理图,(本小牛手画的,不喜勿喷~~)大概原理是,等比例背景图定位 最终效果: 黄色部分有张 遮罩层背景图         代码: <!DOCTYPE html> <html> <head lang="en&

图片放大镜,可以用于商城内的商品图片查看

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; cha

商品图片切换+放大镜

<dl style="float:left" id="imgshow"> <dd> <div class="m_c_l_movebox"> <div> <div> <a class="on" href="javascript:;" supsrc="http://pic11.secooimg.com/product/500/500/7

关于jQuery中实现放大镜效果

1.1.1 摘要 相信大家都见过或使用过放大镜效果,甚至实现过该效果,它一般应用于放大查看商品图片,一些电商网站(例如:凡客,京东商城,阿里巴巴等)都有类似的图片查看效果. 在接下来的博文中,我们将向大家介绍通过jQuery实现放大镜效果. 目录 实现原理 mousemove事件 相对坐标 background-position属性 mousewheel事件 1.1.2 正文 实现原理 首先,我们讲解一下放大镜效果的实现方式: 方法一:准备一张高像素的大图,当鼠标放到原图上,加载显示大图的对应位

JQUERY实现放大镜

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>放大镜</title> <style> * { margin: 0; padding: 0; } #container { position: relative; } #left { width: 430px; height: 430px; posi

用js实现放大镜的效果

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

15款商城网站常用的图片放大镜特效

jquery图片放大镜效果制作变焦镜头图片放大查看代码 jQuery图片放大镜插件鼠标悬停图片放大镜头显示代码 jQuery鼠标滑过图片放大镜效果_淘宝图片放大镜代码 jquery jqzoom仿京东商城商品详细页面图片放大镜_选项卡切换效果 原生js MagicZoom.js放大镜插件商城商品多图片放大镜效果展示 jquery.imagezoom图片放大镜插件仿淘宝店铺商品放大镜展示 jquery etalage图片放大镜插件鼠标移到小图片放大预览图片 jQuery图片放大窗口显示和图片组合缩