这篇文章主要为大家详细介绍了js模拟实现京东详情页图片放大效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了js实现京东详情页图片放大的具体代码,供大家参考,具体内容如下

效果:

html:

  1. <div class="preview_img">
  2. <img src="upload/s3.png" alt="">
  3. <div class="mask"></div>
  4. <div class="big">
  5. <img src="upload/big.jpg" alt="" class="bigImg">
  6. </div>
  7. </div>

css:

  1. .preview_img {
  2. position: relative;
  3. height: 398px;
  4. border: 1px solid #ccc;
  5. }
  6. .mask {
  7. display: none;
  8. position: absolute;
  9. width: 300px;
  10. height: 300px;
  11. top: 0;
  12. left: 0;
  13. background: #FEFE4F;
  14. opacity: .5;
  15. border: 1px solid #ccc;
  16. cursor: move;
  17. }
  18. .big {
  19. display: none;
  20. position: absolute;
  21. width: 550px;
  22. height: 550px;
  23. top: 0;
  24. left: 410px;
  25. z-index: 999;
  26. border: 1px solid #ccc;
  27. overflow: hidden;
  28. }
  29. .big img {
  30. position: absolute;
  31. left: 0;
  32. top: 0;
  33. }

js(重点):

  1. window.addEventListener('load',function(){
  2. var preview_img = document.querySelector('.preview_img');
  3. var mask = this.document.querySelector('.mask');
  4. var big = this.document.querySelector('.big');
  5. var bigImg = this.document.querySelector('.bigImg');
  6. //鼠标经过
  7. preview_img.addEventListener('mouseover',function(){
  8. mask.style.display = 'block';
  9. big.style.display = 'block';
  10. })
  11. //鼠标移出去
  12. preview_img.addEventListener('mouseout',function(){
  13. mask.style.display = 'none';
  14. big.style.display = 'none';
  15. })
  16. //鼠标移动的时候
  17. preview_img.addEventListener('mousemove',function(e){
  18. //鼠标在盒子内的坐标
  19. var x = e.pageX - this.offsetLeft;
  20. var y = e.pageY - this.offsetTop;
  21. //遮挡层移动的距离
  22. var maskX = x - mask.offsetWidth/2;
  23. var maskY = y -mask.offsetHeight/2;
  24. //大图移动距离
  25. //遮挡层的最大移动距离
  26. var maskMaxX = preview_img.offsetWidth - mask.offsetWidth;
  27. var maskMaxY = preview_img.offsetHeight - mask.offsetHeight;
  28. //如果X坐标小于0 就让它停留在0 的位置
  29. if (maskX <= 0) {
  30. maskX = 0;
  31. }else if (maskX >= maskMaxX) {
  32. maskX = maskMaxX;
  33. }
  34. //如果Y坐标小于0 就让它停留在0 的位置
  35. if (maskY <= 0) {
  36. maskY = 0;
  37. }else if (maskY >= maskMaxY) {
  38. maskY = maskMaxY;
  39. }
  40. //遮挡层移动
  41. mask.style.left = maskX + 'px';
  42. mask.style.top = maskY + 'px';
  43. //大图片最大移动距离
  44. var bigMaxX = bigImg.offsetWidth - big.offsetWidth;
  45. var bigMaxY = bigImg.offsetHeight - big.offsetHeight;
  46. //大图片的移动距离 X Y
  47. // 大图片的移动距离 = 遮挡层移动距离 * 大图片最大移动距离 / 遮挡层的最大移动距离
  48. var bigX = maskX * bigMaxX / maskMaxX;
  49. var bigY = maskY * bigMaxY / maskMaxY;
  50. //大图和小图(鼠标移动)方向相反
  51. bigImg.style.left = -bigX + 'px';
  52. bigImg.style.top = -bigY + 'px';
  53. })
  54. })

更多相关文章

  1. 【2016年度】移动安全研究资料总结
  2. Android(安卓)TV listView焦点平滑移动
  3. Android经纬度转化为距离
  4. Android获取移动设备的IP地址
  5. 移动端布局基本思路,三种视口、手机页面3部分基本架构
  6. 如何区别Android手机卡三大运营商
  7. 用Flex开发移动应用(1)---- 创建一个新的Mobile工程
  8. Android(安卓)ScrollView自动滑动一段距离的问题解决
  9. vue+cordova移动端Android开发环境配置

随机推荐

  1. 1-22
  2. 动画:面试必刷之二叉树的子结构
  3. 详解 centos7设置nfs文件共享 实操记
  4. 2020 总结 | VoltDB的亮点,你了解多少?
  5. 自学系列 | 俺今天就谈兴趣!
  6. 自学第五十五天
  7. C++中 unordered_map 与 map 的区别
  8. 谁的青春不迷茫?
  9. kubernetes 命令随手记录
  10. modelsim经常破解失败