电子商务网站放大效果的三种常用的实现方式。

举报
孙叫兽 发表于 2021/03/29 00:15:02 2021/03/29
【摘要】 预览效果(这里截取静态,有兴趣的可以运行下面的代码): 实现方式1. <!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>电子商务网站放大镜效果1</title> <style type="text/css"> html, body, div { margin: 0; padding: 0; } #...

预览效果(这里截取静态,有兴趣的可以运行下面的代码):

实现方式1.


      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="UTF-8">
      <title>电子商务网站放大镜效果1</title>
      <style type="text/css">
      html, body, div {  margin: 0;  padding: 0;  }
      #tab {  position: relative;  width: 300px;  height: 300px;margin: 50px ;  background: #CDE074;  }
      #mark {  position: absolute;  top: 0;  left: 0;  width: 100px;  height: 100px;  background: #B00000;  opacity: 0.5;  filter: alpha(opacity=50);  cursor: move;  }
      #container{ position:absolute; height:360px; width:360px; background:pink; overflow:hidden;left: 350px;top: 0px}
      #bigImg{ position:absolute; display:block; border:none;}
      </style>
      </head>
      <body>
      <div id="tab">
      <img src="https://img-blog.csdnimg.cn/2020073120293658.jpg" width="300" height="300" id="img1">
      </div>
      <div id="jiance"></div>
      </body>
      </html>
      <script type="text/javascript">
      var oTab = document.getElementById("tab");
      //获得oDiv本身的高和宽;获得oDiv距离浏览器左上角的位移;
      var tabT = oTab.offsetTop;
      var tabL = oTab.offsetLeft;
      var tabW = oTab.offsetWidth;
      var tabH = oTab.offsetHeight;
      //onmouseenter限制冒泡机制
       oTab.onmouseenter = function (e) {
      //创建大图容器
      var container = document.createElement("div");
       container.id = "container";
      this.appendChild(container);
      var bigImg=document.createElement("img");
       bigImg.src="https://img-blog.csdnimg.cn/2020073120293658.jpg";
       bigImg.id="bigImg";
       container.appendChild(bigImg);
      //当鼠标移近来的时候,动态创建一个DIV元素,id是mark
      var mark = document.createElement("div");
       mark.id = "mark";
      this.appendChild(mark);//像oTab里添加mark;
      //执行setMark
       setMark(mark, container, e);
       };
       oTab.onmousemove = function (e) {
      var mark = document.getElementById("mark");
      if (mark) {
      //先判断mark是否存在,如果存在,执行setMark
       setMark(mark, container, e);
       }
       };
      //onmouseleave也可以显示冒泡机制;
       oTab.onmouseleave = function () {
      var mark = document.getElementById("mark");
      if (mark) {
      //当离开的时候移除mark节点;
      this.removeChild(mark);
      this.removeChild(container);
       }
       };
      var jiance=document.getElementById("jiance");
      function setMark(mark,container,e) {
       e = e || window.event;
      //上面是绑定事件的标配;
      //获取mark这个div的宽度和高度;并且让mark这个DIV显示在鼠标出现位置的正中间;
      var markW = mark.offsetWidth;
      var markH = mark.offsetHeight;
      var l = e.clientX - tabL - (markW / 2);
      var t = e.clientY - tabT - (markH / 2);
       mark.style.left = l + "px";
       mark.style.top = t + "px";
       container.style.left=tabW+10+"px";
       container.style.top=0;
       bigImg.style.left="-"+l/tabW*bigImg.width+"px";
       bigImg.style.top="-"+t/tabH*bigImg.height+"px";
      //下面是判断边界,当鼠标移到左边界和右边界的判断;
      if (l < 0) {
       mark.style.left = 0;
       } else if (l > (tabW - markW)) {
       mark.style.left = tabW - markW + "px";
       bigImg.style.left="-"+(tabW-markW)/tabW*bigImg.width+"px";
       }
      //当鼠标移到上边界和下边界的判断;
      if (t < 0) {
       mark.style.top = 0 + "px";
       } else if (t > (tabH - markH)) {
       mark.style.top = tabH - markH + "px";
       bigImg.style.top="-"+(tabH-markH)/tabH*bigImg.height+"px";
       }
       };
      </script>
  
 

实现方式二:


      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="UTF-8">
      <title>电子商务网站放大镜效果2</title>
      <style type="text/css">
      html, body, div {  margin: 0;  padding: 0;  }
      #tab {  position: relative;  width: 300px;  height: 300px;margin: 50px ;  background: #CDE074;  }
      #mark {  position: absolute;  top: 0;  left: 0;  width: 100px;  height: 100px;  background: #B00000;  opacity: 0.5;  filter: alpha(opacity=50);  cursor: move;  }
      #container{ position:absolute; height:360px; width:360px; background:pink; overflow:hidden;left: 350px;top: 0px}
      #bigImg{ position:absolute; display:block; border:none;}
      </style>
      </head>
      <body>
      <div id="tab">
      <img src="https://img-blog.csdnimg.cn/2020073120293658.jpg" width="300" height="300" id="img1">
      </div>
      <div id="jiance"></div>
      </body>
      </html>
      <script type="text/javascript">
      //获得oDiv本身的高和宽;获得oDiv距离浏览器左上角的位移;
      var oDiv = document.getElementById("tab");
      var off = offset.call(oDiv);
       oDiv.onmouseenter = function (e) {
      //小图
      var mark = document.createElement("div");
       mark.id = "mark";
      this.appendChild(mark);
      //创建大图容器
      var container = document.createElement("div");
       container.id = "container";
      this.appendChild(container);
      var bigImg=document.createElement("img");
       bigImg.src="https://img-blog.csdnimg.cn/2020073120293658.jpg";
       bigImg.id="bigImg";
       container.appendChild(bigImg);
       setMark(mark, container, e);
       }
       oDiv.onmousemove = function (e) {
      var mark = document.getElementById("mark");
      if (mark) {
       critical(this, mark, e);
       }
       }
       oDiv.onmouseleave = function (e) {
      var mark = document.getElementById("mark");
      if (mark) {
      this.removeChild(mark);
       }
       }
      function critical(oDiv, mark, e) {
       e = e || window.event;
      var l = e.clientX - off.left - (mark.offsetWidth / 2);
      var t = e.clientY - off.top - (mark.offsetHeight / 2);
       mark.style.top = t + "px";
       mark.style.left = l + "px";
      if (l <= 0) {
       mark.style.left = 0;
       } else if (l >= (oDiv.offsetWidth - mark.offsetWidth)) {
       mark.style.left = oDiv.offsetWidth - mark.offsetWidth + "px";
       }
      if (t <= 0) {
       mark.style.top = 0;
       } else if (t >= (oDiv.offsetHeight - mark.offsetHeight)) {
       mark.style.top = oDiv.offsetHeight - mark.offsetHeight + "px";
       }
       }
      function setMark(mark,container,e) {
       e = e || window.event;
      //上面是绑定事件的标配;
      //获取mark这个div的宽度和高度;并且让mark这个DIV显示在鼠标出现位置的正中间;
      var markW = mark.offsetWidth;
      var markH = mark.offsetHeight;
      var l = e.clientX - tabL - (markW / 2);
      var t = e.clientY - tabT - (markH / 2);
       mark.style.left = l + "px";
       mark.style.top = t + "px";
       container.style.left=tabW+10+"px";
       container.style.top=0;
       bigImg.style.left="-"+l/tabW*bigImg.width+"px";
       bigImg.style.top="-"+t/tabH*bigImg.height+"px";
      //下面是判断边界,当鼠标移到左边界和右边界的判断;
      if (l-15 < 0) {
       mark.style.left = 0;
       } else if (l > (tabW - markW)) {
       mark.style.left = tabW - markW + "px";
       bigImg.style.left="-"+(tabW-markW)/tabW*bigImg.width+"px";
       }
      //当鼠标移到上边界和下边界的判断;
      if (t < 0) {
       mark.style.top = 0 + "px";
       } else if (t > (tabH - markH)) {
       mark.style.top = tabH - markH + "px";
       bigImg.style.top="-"+(tabH-markH)/tabH*bigImg.height+"px";
       }
       };
      function offset() {
      var left = this.offsetLeft, top = this.offsetTop, par = this.offsetParent;
      while (par) {
       left += par.offsetLeft;
       top += par.offsetTop;
      if (window.navigator.userAgent.indexOf("MSIE 8.0") <= -1) {
       left += par.clientLeft;
       top += par.clientTop;
       }
       par = par.offsetParent;
       }
      return {
      left: left,
      top: top
       };
       }
      </script>
  
 

实现方式三:


      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="UTF-8">
      <title>电子商务网站放大镜效果</title>
      <style type="text/css">
      html, body, div img{  margin: 0;  padding: 0;  }
      #tab {  position: relative;  width: 450px;  height: 450px;margin: 50px ;  background: #CDE074;  }
      #mark {  position: absolute;  top: 0;  left: 0;  width: 100px;  height: 100px;  background: #B00000;  opacity: 0.5;  filter: alpha(opacity=50);  cursor: move;  }
      #container{ position:absolute; height:450px; width:450px; background:pink; overflow:hidden;left: 350px;top: 0px}
      #bigImg{ position:absolute; display:block; border:none;}
      </style>
      </head>
      <body>
      <div id="tab">
      <img src="https://img-blog.csdnimg.cn/2020073120293658.jpg" width="450" height="450" id="img1">
      </div>
      <div id="jiance"></div>
      </body>
      </html>
      <script type="text/javascript">
      var oTab = document.getElementById("tab");
      //获得oDiv本身的高和宽;获得oDiv距离浏览器左上角的位移;
      var tabT = oTab.offsetTop;
      var tabL = oTab.offsetLeft;
      var tabW = oTab.offsetWidth;
      var tabH = oTab.offsetHeight;
      //onmouseenter限制冒泡机制
       oTab.onmouseenter = function (e) {
      //创建大图容器
      var container = document.createElement("div");
       container.id = "container";
      this.appendChild(container);
      var bigImg=document.createElement("img");
       bigImg.src="https://img-blog.csdnimg.cn/2020073120293658.jpg";
       bigImg.id="bigImg";
       container.appendChild(bigImg);
      //当鼠标移近来的时候,动态创建一个DIV元素,id是mark
      var mark = document.createElement("div");
       mark.id = "mark";
      this.appendChild(mark);//像oTab里添加mark;
      //执行setMark
       setMark(mark, container, e);
       };
       oTab.onmousemove = function (e) {
      var mark = document.getElementById("mark");
      if (mark) {
      //先判断mark是否存在,如果存在,执行setMark
       setMark(mark, container, e);
       }
       };
      //onmouseleave也可以显示冒泡机制;
       oTab.onmouseleave = function () {
      var mark = document.getElementById("mark");
      if (mark) {
      //当离开的时候移除mark节点;
      this.removeChild(mark);
      this.removeChild(container);
       }
       };
      var jiance=document.getElementById("jiance");
      function setMark(mark,container,e) {
       e = e || window.event;
      //上面是绑定事件的标配;
      //获取mark这个div的宽度和高度;并且让mark这个DIV显示在鼠标出现位置的正中间;
      var markW = mark.offsetWidth;
      var markH = mark.offsetHeight;
      var l = e.clientX - tabL - (mark.offsetWidth / 2);
      var t = e.clientY - tabT - (mark.offsetHeight / 2);
       mark.style.left = l + "px";
       mark.style.top = t + "px";
       container.style.left=tabW+10+"px";
       container.style.top=0;
      // bigImg.style.left="-"+(l/tabW*bigImg.width)+"px";
      // bigImg.style.top="-"+(t/tabH*bigImg.height)+"px";
      //如果样式用上面的写,在IE678的时候有兼容性问题,应该改为下面的
      if(l<=0){
       bigImg.style.left=="0px";
       }else{
       bigImg.style.left="-"+l/tabW*bigImg.width+"px";
       }
      if(t<=0){
       bigImg.style.top=="0px";
       }else{
       bigImg.style.top="-"+(t/tabH*bigImg.height)+"px";
       }
      console.log("====t::"+parseInt(t));
      //下面是判断边界,当鼠标移到左边界和右边界的判断;
      if (l < 0) {
       mark.style.left = 0;
       } else if (l > (tabW - markW)) {
       mark.style.left = tabW - markW + "px";
       bigImg.style.left="-"+(tabW-markW)/tabW*bigImg.width+"px";
       }
      //当鼠标移到上边界和下边界的判断;
      if (t < 0) {
       mark.style.top = 0 + "px";
       } else if (t > (tabH - markH)) {
       mark.style.top = tabH - markH + "px";
       bigImg.style.top="-"+(tabH-markH)/tabH*bigImg.height+"px";
       }
       };
      </script>
  
 

 

文章来源: sunmenglei.blog.csdn.net,作者:孙叫兽,版权归原作者所有,如需转载,请联系作者。

原文链接:sunmenglei.blog.csdn.net/article/details/111468582

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。