84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
认证高级PHP讲师
在文档中显示缩略图, 通过getComputedStyle来获取缩略图大小, 并映射成真实大小的图片尺寸;
getComputedStyle
给缩略图添加mouseon事件, 当鼠标处在缩略图上时显示放大镜元素; 反之则移除
mouseon
给缩略图添加mousemove事件, 读取event.offsetX和event.offsetY, 并根据1中的关系换算成在放大的图片中应该显示的部分;
mousemove
event.offsetX
event.offsetY
1
在放大镜中添加图片, 并通过position:absolute来定位和移动图片.
position:absolute
文字说得可能不是很清楚, 待我写个demo...
https://jsfiddle.net/hymin/9j...
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Magnifier Demo</title> <style> //container用来放缩略图 p.container{ width:400px; margin: 100px auto; } p.container > img{ width: 100%; } //magnifier用来放实际大小的图片. 注意overflow, display和position属性 p.magnifier{ width: 400px; height: 400px; position: relative; overflow: hidden; margin: 50px auto; display: none; } p.magnifier > img{ position: absolute; } //当鼠标hover在缩略图上时, 显示后一个p, 即magnifier元素 p.container:hover + p{ display: block; } </style> </head> <body> <p class='container'><img src="cooper.jpg" alt=""></p> <p class="magnifier"><img src="cooper.jpg" alt=""></p> //用来显示坐标 <span class='dataX'></span><span>, </span><span class='dataY'></span> <script> //需要在window.onload事件里完成, 否则获取不到图片正常高度 window.onload = function(){ //用起来方便些 var selector = document.querySelector.bind(document); //定义数据对象 var data = { dataX: '', dataY: '' }; var img = selector('p.magnifier > img'); var thumbnail = selector('p.container'); var magnifier = selector('p.magnifier'); var mousemoveTimer = null; //获取缩略图大小 var thumbnailX = thumbnail.clientWidth; //确定转换系数, 例如在缩略图上移动1px, 则真实图片需要移动6px var converter = img.naturalWidth/thumbnailX; selector('p.container > img').addEventListener('mousemove', function(e) { //写数据 data.dataX = e.offsetX; data.dataY = e.offsetY; //移动图片位置 img.style.left = '-' + e.offsetX*converter + 'px'; img.style.top = '-' + e.offsetY*converter + 'px'; }); //视图和数据结构绑定 Object.defineProperty(data, 'dataX', { set: function(val){ selector('span.dataX').innerHTML = val; } }) Object.defineProperty(data, 'dataY', { set: function(val){ selector('span.dataY').innerHTML = val; } }) // debugger; } </script> </body> </html>
我一直喜欢只用CSS加HTML制作一些效果,而尽量避免js。以下是我的思路。
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title></title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <p class="test"> <p class="inner"> <img src="slide2.jpg" alt="none"> </p> </p> </body> </html>
第一层p嵌套背景原图。第二层p制作放大镜形状。内部的img来实现放大,并且在第二层加上overflow:hidden。可以使得内容被限制在放大镜中。
.test{ position: relative; width: 500px; height: 333px; background:black url(slide2.jpg); background-size: cover; } .inner{ width: 200px; height: 200px; background-size: cover; border: 2px solid black; box-shadow: 2px 2px 10px gray; border-radius: 80%; overflow: hidden; } .inner img{ transform: scale(1.5) translate(15px,15px); width: 500px; height: 333px; }
在文档中显示缩略图, 通过
getComputedStyle
来获取缩略图大小, 并映射成真实大小的图片尺寸;给缩略图添加
mouseon
事件, 当鼠标处在缩略图上时显示放大镜元素; 反之则移除给缩略图添加
mousemove
事件, 读取event.offsetX
和event.offsetY
, 并根据1
中的关系换算成在放大的图片中应该显示的部分;在放大镜中添加图片, 并通过
position:absolute
来定位和移动图片.文字说得可能不是很清楚, 待我写个demo...
https://jsfiddle.net/hymin/9j...
我一直喜欢只用CSS加HTML制作一些效果,而尽量避免js。
以下是我的思路。
第一层p嵌套背景原图。
第二层p制作放大镜形状。
内部的img来实现放大,并且在第二层加上overflow:hidden。可以使得内容被限制在放大镜中。