zoukankan      html  css  js  c++  java
  • js 实现商品放大镜效果

    知识点,需熟悉下面属性及含义:

    offsetLeft           //获取元素相对左侧的距离 (计算是从最左侧边框外开始)

    offsetTop           //获取元素相对顶部的距离 (计算是从最顶部边框外开始)

    offsetWidth       //获取元素宽度   (border + padding + margin)

    offsetHeight     //获取元素高度     (border +padding + margin)

    clientLeft         //测量的是元素左侧边框的宽度

    clientHeight    //测量的是元素的上边框的宽度

    clientWidht     //获取元素的宽度  不带边框(padding + margin)

    clientHeight    //获取元素的高度  不带边框  (padding + margin)

    第一种: 商品类  

    正文:现在很多pc端商城网站详情页面都使用的有放大镜效果,那我们怎样使用一张图片实现放大镜效果呢?具体代码如下:

      1 <!DOCTYPE html>
      2 <html lang="en">
      3 <head>
      4     <meta charset="UTF-8">
      5     <title>Document</title>
      6     <style>
      7         *{
      8             margin: 0;
      9             padding: 0;
     10         }
     11         #smallImg{
     12             width: 300px;
     13             height: 300px;
     14             position: relative;
     15         }
     16         #smallImg img{
     17             width: 300px;
     18             height: 300px;
     19         }    
     20         #lay{
     21             position: absolute;
     22             left: 0;
     23             top: 0; 
     24             border: 1px solid #666;
     25             opacity: 0.6;
     26             filter: alpha(opacity = 60);
     27             background: #fff;
     28             display: none;
     29             cursor: move;
     30         }
     31         #bigImg{
     32             width: 300px;
     33             height: 300px;
     34             position: absolute;
     35             left: 320px;
     36             overflow: hidden;
     37             top: 0;
     38             display: none;
     39         }
     40         #bigImg img{
     41             position: absolute;
     42             left: 0;
     43             top: 0;
     44         }
     45     </style>
     46 </head>
     47 <body>
     48     <div id="smallImg">
     49         <img src="img/1.jpg" alt="">
     50         <div id="lay"></div>
     51     </div>
     52     <div id="bigImg">
     53         <img src="img/1.jpg" alt="">
     54     </div>
     55     <script>
     56         window.onload = function(){
     57             var lay = getId("lay"),
     58                 smallImg = getId("smallImg"),
     59                 bigImg = getId("bigImg");
     60             var imgB = bigImg.children[0]; //大图中的图片
     61             var scale = 4;        //缩放倍数  可调整
     62             var w = smallImg.offsetWidth; //小图的宽高
     63             var h = smallImg.offsetHeight;
     64             lay.style.width = w / scale + "px";
     65             lay.style.height = h / scale + "px";
     66 
     67             imgB.style.width = w * scale + "px";
     68             imgB.style.height = h * scale + "px";
     69             smallImg.onmouseover = function(){
     70                 lay.style.display = "block";
     71                 bigImg.style.display = "block";
     72             }    
     73             smallImg.onmouseout = function(){
     74                 lay.style.display = "none";
     75                 bigImg.style.display = "none";
     76             }
     77             smallImg.onmousemove = function(e){
     78                 e = e || window.event;
     79                 var x = e.clientX - lay.offsetWidth/2;
     80                 var y = e.clientY - lay.offsetHeight/2;
     81                 if(x <= 0){            //左侧边界判断
     82                     x = 0;
     83                 }
     84                 if(y <= 0){            //顶部边界判断
     85                     y = 0;
     86                 }
     87                 if(x >= smallImg.offsetWidth - lay.offsetWidth ){
     88                     x = smallImg.offsetWidth - lay.offsetWidth        //右侧边界判断
     89                 }
     90                 if(y >= smallImg.offsetHeight - lay.offsetHeight ){
     91                     y = smallImg.offsetHeight - lay.offsetHeight        //底部边界判断
     92                 }
     93                 lay.style.left = x + "px";
     94                 lay.style.top = y + "px";
     95                 imgB.style.left = -x*scale + "px";    //图片默认位置为0 0左上角位置 需要反向才能两者相对显示
     96                 imgB.style.top = -y*scale + "px";
     97             }    
     98         }
     99         function getId(id){
    100             return document.getElementById(id);
    101         }
    102     </script>
    103 </body>
    104 </html>

    好了商品外部放大镜效果就这样完成了,而且还带有边界检测。希望可以给有需要的人提供到帮助。

    模拟效果图如下:

    第二种: 商品内部实现放大效果 

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <title>测试放大镜</title>
     5     <style type="text/css">
     6         *{
     7             margin: 0;
     8             padding: 0;
     9         }
    10         #small_Box{
    11             width: 300px;
    12             height: 300px;
    13             position: relative;
    14             margin: 50px auto;
    15         }
    16         #small_Box img{
    17             width: 100%;
    18             height: 100%;
    19         }
    20     </style>
    21 </head>
    22 <body>
    23     <div id="small_Box"><img src="1.jpg"></div>
    24     <script type="text/javascript">
    25         window.onload = function() {
    26             var span = document.createElement("span");
    27             var box = document.getElementById("small_Box");
    28             var img = document.createElement("img");
    29             var boxWidth = box.clientWidth;
    30             var boxHeight = box.clientHeight;
    31             var scale = 2; 
    32             span.style.position = "absolute";
    33             span.style.width = boxWidth / scale+"px";
    34             span.style.height = boxHeight / scale+"px";
    35             span.style.display = 'none';
    36             span.style.overflow = 'hidden';
    37             span.style.backgroundColor = "rgba(255, 255, 255, 0.5)";
    38             span.style.cursor = 'pointer';
    39             box.appendChild(span);
    40             img.setAttribute("src", "1.jpg");
    41             img.style.width = scale*boxWidth + "px";
    42             img.style.height = scale*boxHeight + "px";
    43             box.onmouseover = function(e){
    44                 span.style.display = "block";
    45             }
    46             box.onmousemove = function(e){
    47                 e = e || window.event;
    48                 var x = e.clientX - span.clientWidth / scale - this.offsetLeft;
    49                 var y = e.clientY - span.clientHeight / scale - this.offsetTop;
    50                 if (x <= 0){
    51                     x = 0
    52                 }
    53                 if (x >= box.clientWidth - span.clientWidth){
    54                     x = box.clientWidth - span.clientWidth
    55                 }
    56                 if (y <= 0){
    57                     y = 0
    58                 }
    59                 if (y >= box.clientHeight - span.clientHeight){
    60                     y = box.clientHeight - span.clientHeight
    61                 }
    62                 span.style.left = x + "px";
    63                 span.style.top = y + "px";
    64                 
    65                 img.style.marginLeft = -1 * span.offsetLeft * scale - x + "px";
    66                 img.style.marginTop = -1 * span.offsetTop * scale - y + "px";
    67                 span.appendChild(img);
    68             }
    69 
    70             box.onmouseout = function(e){
    71                 span.style.display = "none";
    72             }
    73         }
    74     </script>
    75 </body>
    76 </html>

     好了商品内部放大镜效果就这样完成了,而且还带有边界检测。希望可以给有需要的人提供到帮助。

    模拟效果图如下:

    我要成为酷酷的人http://www.cnblogs.com/CooLLYP/
  • 相关阅读:
    JS刷新当前页面的几种方法总结
    C#实现,C++实现,JS实现 阿拉伯数字金额转换为中文大写金额
    SQL server 生成数据字典
    jquery操作复选框(checkbox)的一些小技巧总结
    HTML中的几种空格
    C#几个经常用到的字符串截取
    关于百度地图API和jqGrid踩到的坑
    SQL常见问题积累
    JS实用小函数 数据是否合法或存在 获取当前日期时间
    vs2010 学习Silverlight学习笔记(13):数据与通信之WCF
  • 原文地址:https://www.cnblogs.com/CooLLYP/p/6500706.html
Copyright © 2011-2022 走看看