放大镜js实现效果

  今天我想写一个放大镜因为毕竟在做网页的时候,特别是一些电商的详情页放大镜是必不可少的.什么都不说了上代码

1,html代码

1 <div id=‘small‘><img src="2.jpg" alt="" width=‘100%‘><div id=‘move‘></div></div>
2     <ul id="images">
3         <li><img class="imgs" src="2.jpg" alt="" width="100%"></li>
4         <li><img class="imgs" src="3.jpg" alt="" width="100%"></li>
5         <li><img class="imgs" src="4.jpg" alt="" width="100%"></li>
6
7     </ul>
8     <div id=‘big‘><img src="2.jpg" alt="" id=‘img‘></div>

2,css代码

1 <style>
2 *{margin:0;padding:0;list-style: none; }
3 #small{width:400px;height:400px;border:1px solid black;position: absolute;left:50px;top:50px;}
4 #move{width:100px;height:100px;position:absolute;left:0;top:0;background: url(bg.png);display: none;}
5 #images{position:absolute;top:460px;left:60px;width:1000px;height:100px;}
6 #images li {  width: 80px; height: 80px; float: left; margin-right: 10px; border: solid 1px #333;padding: 4px;}
7 #big{width:400px;height:400px;border:1px solid black;position:absolute;left:500px;top:50px;overflow:hidden;display:none;}
8 #big #img{position: absolute;left:-100px;}
9 </style>

3,js代码

 1     <script>
 2          var small = document.getElementById(‘small‘);
 3          var big = document.getElementById(‘big‘);
 4          var move = document.getElementById(‘move‘);
 5          var img = document.getElementById(‘img‘)
 6
 7          //1 图片替换
 8          var list = images.children;
 9          // console.log(list);
10          for(var i=0;i<list.length;i++){
11              list[i].onclick = function (){
12                  var src = this.firstElementChild.src;
13                  //小图大图的图片资源都要替换
14                  small.firstElementChild.src = src;
15                  big.firstElementChild.src = src;
16              }
17          }
18          //2 鼠标移动
19          small.onmousemove = function(ent){
20              //大盒子显示 放大镜显示
21              big.style.display = "block";
22              move.style.display = "block";
23
24              //获得鼠标
25              var ent  = ent || window.event;
26
27              //放大镜不能出盒子范围
28              var minX = 0;
29              var maxX = small.offsetWidth-move.offsetWidth;
30              var minY = 0;
31              var maxY = small.offsetHeight-move.offsetHeight;
32
33              if(ent.clientX-move.offsetWidth<minX){//e.pageX
34                  move.style.left ="0px";
35              }else if(ent.clientX-move.offsetWidth>maxX){//e.pageX
36                  move.style.left =maxX+"px";
37              }else{
38                  move.style.left = (ent.clientX-move.offsetWidth)+"px";//e.pageX
39              }
40
41              if(ent.clientY-move.offsetHeight<minY){//e.pageY
42                  move.style.top ="0px";
43              }else if(ent.clientY-move.offsetHeight>maxY){//e.pageY
44                  move.style.top =maxY+"px";
45              }else{
46                  move.style.top = (ent.clientY-move.offsetHeight)+"px";//e.pageY
47              }
48
49
50              //大盒子随鼠标的移动位置
51              big.scrollTop = (ent.clientY-small.offsetTop)*2.5-200;//e.pageY
52              big.scrollLeft = (ent.clientX-small.offsetLeft)*2.5-250;//e.pageX
53
54             //放大镜的位置 (会出盒子范围)
55             // move.style.left = (ent.clientX-move.offsetWidth)+"px";
56              // move.style.top = (ent.clientY-move.offsetHeight)+"px";
57
58              //添加鼠标样式
59              small.style.cursor = "move";
60
61          }
62          //3 鼠标移出
63          small.onmouseout = function(){
64              //大盒子\放大镜消失
65              big.style.display = "none";
66              move.style.display = "none";
67              //恢复默认样式
68              small.style.cursor = "default";
69          }
70     </script>

原理:

只要我们算放大镜的位置,其实放大镜并不难 在这里要特别注意一点,e.clientX/clientY和e.pageX/pageY两者之间的区别,不然在做放大镜的时候会出现bug.

好了今天放大镜写到这里明天我们写jQuery放大镜.

时间: 2024-12-17 07:24:08

放大镜js实现效果的相关文章

js切换效果

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

简单但很实用的js手风琴效果

<!DOCTYPE html> <html> <head>     <meta charset="UTF-8">     <title></title>     <style> body,ul,li,.sfq,h3{     margin: 0;     padding: 0;     list-style: none; }   h3{       height: 30px;       width: 

非常不错的一个JS分页效果代码

这里分享一个不错的js分页代码. 代码中cpage是页面计数,应为全局变量,可以随处调用它: totalpage是总页数. 与asp分页代码很类似,也是先取得记录总数,然后实现分页,基本的分页思路与原理还是相通的,感兴趣的朋友做个参考吧. 例子,js分页效果代码. <!doctype html public "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-t

js 技巧 (十)广告JS代码效果大全 【1】

广告JS代码效果大全 1.[普通效果]     现在很多网站广告做的如火如荼,现在我就来介绍一下常见的对联浮动广告效果的代码使用方法,介绍的这种效果,在1024*768分辨率下正常显示,在800*600的分辨率下可以自动隐藏,以免遮住页面影响访问者浏览内容,下面就是实现效果所需代码: var delta=0.015 var collection;     function floaters() {     this.items = [];     this.addItem = function(

js 技巧 (十)广告JS代码效果大全 【3】

3.[允许关闭]     与前面两个代码不同的是,广告图下方增加了一个图片按纽,允许访客点击关闭广告图片,下面文本框中就是实现效果所需代码: var delta=0.015;     var collection;     var closeB=false;     function floaters() {     this.items = [];     this.addItem = function(id,x,y,content)     {     document.write('<DI

JS打字效果的动态菜单代码分享

这篇文章主要介绍了JS打字效果的动态菜单,推荐给大家,有需要的小伙伴可以参考下. 这是一款基于javascript实现的打字效果的动态菜单特效代码,分享给大家学习学习. 小提示:浏览器中如果不能正常运行,可以尝试切换浏览模式.为大家分享的JS打字效果的动态菜单代码如下 <html> <head> <title>JS打字效果的动态菜单</title> <meta http-equiv="imagetoolbar" content=&q

像歌词跟着声音走的JS文字效果

一个比较不错的文字显示特效,像MTV的歌词显示一样跟着演唱者慢慢逐个清淅显示,这段特效代码就实现了和这个功能差不多,而且JS代码非常少,兼容性好,点击运行看看效果吧! <html> <head> <title>石家庄花卉</title> </head> <body> <script language="JavaScript"> var message="像歌词显示一样JS文字效果!"

three.js粒子效果(分别基于CPU&amp;GPU实现)

前段时间做了一个基于CPU和GPU对比的粒子效果丢在学习WebGL的群里,技术上没有多作讲解,有同学反馈看不太懂GPU版本,干脆开一篇文章,重点讲解基于GPU开发的版本. 一.概况 废话不多说,先丢上demo,用移动设备更能明显感觉性能差异. 维护粒子位移.颜色.尺寸:GPU版本  CPU版本 维护粒子位移:GPU版本  CPU版本 结论:同时需要维护多种粒子特征变化时,GPU有明显优势.只是维护粒子位移时,GPU版本稍流畅,但优势并不明显.当然,这还得具体到设备,一些中低端Android机器,

Js 拖动效果

<!DOCTYPE html> <html> <head> <meta charset="utf8"> <title>js拖拽效果</title> <style type="text/css"> #div1 { width : 200px; height: 200px; position: absolute; background: #99dd33; cursor: move; }