先来张效果图:

这个特效是跟着慕课网上的视频学的,视频链接如下:https://www.imooc.com/learn/32

源码和技术点已经上传到附件,有需要的可以查看、下载。

下面直接上代码(PS:代码中的注释是根据个人理解添加的,并不是老师原有的注释):

页面结构

<div id="demo"><!--左侧小图片区域--><div id="small-box">     <div id="mark"></div><!--左侧可以点击区域,类似于遮罩层,让鼠标一直在这个区域上移动。--><div id="float-box"></div><!--左侧放大镜区域--><img src="macbook-small.jpg"/></div><!--右侧大图片区域--><div id="big-box"><img src="macbook-big.jpg"/></div>
</div>

CSS样式

<style>* {margin: 0;padding: 0}#demo {display: block;width: 400px;height: 255px;margin: 50px;position: relative;border: 1px solid #ccc;}#small-box {position: relative;z-index: 1;}#float-box {display: none;width: 160px;height: 120px;position: absolute;background: #ffffcc;border: 1px solid #ccc;filter: alpha(opacity=50);opacity: 0.5;}#mark {position: absolute;display: block;width: 400px;height: 255px;background-color: #fff;filter: alpha(opacity=0);opacity: 0;z-index: 10;cursor:move;}#big-box {display: none;position: absolute;top: 0;left: 460px;width: 400px;height: 300px;overflow: hidden;border: 1px solid #ccc;z-index: 1;;}#big-box img {position: absolute;z-index: 5}
</style>

JS代码

window.οnlοad=function(){var demoObj = document.getElementById("demo");//整个div所在对象var smallBoxObj = document.getElementById("small-box");//左侧小图片区域var markObj = document.getElementById("mark");//左侧可以点击区域var floatBoxObj = document.getElementById("float-box");//左侧放大镜区域var bigBoxObj = document.getElementById("big-box");//右侧大图片区域var bigBoxImageObj = bigBoxObj.getElementsByTagName("img")[0];//当鼠标进入到mark区域时,放大镜显示,大图片区域显示markObj.οnmοuseοver=function(){floatBoxObj.style.display="block";bigBoxObj.style.display="block";};//当鼠标离开mark区域时,放大镜隐藏,大图片区域也隐藏markObj.onmouseout = function(){floatBoxObj.style.display="none";//bigBoxObj.style.display="none";};//当鼠标在mark区域移动时,放大镜和大图片区域根据鼠标的移动而移动markObj.onmousemove = function(ev){//1、先计算放大镜的移动情况var _event = ev || window.event;/*使用这种写法,鼠标图标一直在放大镜区域的左上角,不太美观,所以改成让其在放大镜区域的中间显示,也就是offsetWidth、offsetHeight的一半var left = _event.clientX - demoObj.offsetLeft - smallBoxObj.offsetLeft;              var top = _event.clientY - demoObj.offsetTop - smallBoxObj.offsetTop;*/var left = _event.clientX - demoObj.offsetLeft - smallBoxObj.offsetLeft - floatBoxObj.offsetWidth/2;           var top = _event.clientY - demoObj.offsetTop - smallBoxObj.offsetTop - floatBoxObj.offsetHeight/2;//1.1解决放大镜出界问题:离开smallBox所在区域//左侧出界:左侧边界的offsetLeft(_event.clientX - demoObj.offsetLeft - smallBoxObj.offsetLeft)比放大镜的offsetWidth/2还小时,为了满足“鼠标一直在中间显示”,此时放大镜将超出边界显示,此时让其left为0,与左侧边界重合//右侧出界:floatBoxObj必须markObj所在区域之内显示,当floatBoxObj的右侧不在markObj区域内时,右侧将出界,那么left应该是markObj的宽度与floatBoxObj宽度之差(在markObj或smallBoxObj的区域之内都可以,只要不超出这个区域的边界即可,因为左侧是在markObj上面移动,所以这里用markObj)                if(left<0){  left=0;}else if(left>(markObj.offsetWidth-floatBoxObj.offsetWidth)){//console.log("333333333333");left = markObj.offsetWidth-floatBoxObj.offsetWidth;}//同理解决高度出界的问题if(top<0){top=0;}else if(top>(markObj.offsetHeight-floatBoxObj.offsetHeight)){top = markObj.offsetHeight-floatBoxObj.offsetHeight;}   //console.log("left="+left+"\ttop="+top);//放大镜区域所在位置floatBoxObj.style.left = left+"px";floatBoxObj.style.top = top+"px";//2、在大图片区域显示图片//(????计算方法没太懂)var percentX = left / (markObj.offsetWidth - floatBoxObj.offsetWidth);var percentY = top / (markObj.offsetHeight - floatBoxObj.offsetHeight);bigBoxImageObj.style.left = -percentX * (bigBoxImageObj.offsetWidth - bigBoxObj.offsetWidth) + "px";bigBoxImageObj.style.top = -percentY * (bigBoxImageObj.offsetHeight - bigBoxObj.offsetHeight) + "px";};
};

在大图上显示那块儿没太懂,学习视频里面讲的也没看懂,有看懂的还望告知,谢谢!

用JS实现放大镜特效相关推荐

  1. 案例:用JS实现放大镜特效

    案例:用JS实现放大镜特效 案例:用JS实现放大镜特效

  2. 仿京东淘宝放大镜特效 jqzoom.js

    效果图如下: HTML 文本源码: 1 <!DOCTYPE html> 2 <htmllang="en"> 3 <head> 4 <met ...

  3. html实现放大镜效果,利用jquery实现放大镜特效

    特效描述:利用jquery实现 放大镜特效.利用jquery实现放大镜特效 代码结构 1. 引入CSS 2. 引入JS 3. HTML代码 /* imgbox 当前图片区域 hoverbox 鼠标移入 ...

  4. html简单图片放大镜,jQuery轻量级简单实用的图片放大镜特效

    zoomtoo是一款轻量级的简单实用的jQuery图片放大镜特效插件.这个图片放大镜特效在鼠标滑过骨牌的时候,在原来图片区域内部将图片放大.鼠标进入和离开图片区域时都带有淡入淡出的效果.该图片放大镜插 ...

  5. JS 炫酷特效敢超 Flash

    千一网络收集的几十个超酷 JavaScript 特效,这些特效在网上有些也有发布,不过这个应该是最全的. JS 炫酷特效敢超 Flash-3D 特效演示 JS 炫酷特效敢超 Flash-阵列特效演示 ...

  6. 前端小插件之手写js循环滚动特效

    很多前端都离不开滚动的特效,调用插件繁琐,后期更改麻烦,考虑到这些因素,自己写了一套无限循环滚动的小特效. 首先滚动特效很好写,用css就可以完成,下面写一个基础css向上循环滚动特效 html &l ...

  7. html 倒计时特效,JS节日倒计时特效(精确到毫秒)

    JS节日倒计时特效(精确到毫秒)-时间特效-网页特效-站长新动力-msxindl.com function show_djs(){ var djs = document.getElementById( ...

  8. 放大镜用java怎么写_[Java教程]用js实现放大镜的效果

    [Java教程]用js实现放大镜的效果 0 2016-05-22 22:00:06 第一次发博客,还有点小激动,本人现在正在天津上大学,希望以后从事前端这一行业,学习的时间不长,写博客为了记录自己的学 ...

  9. 原生js实现放大镜效果

    记录一次原生js实现放大镜效果. 文章目录 效果图 设计思路 基本架子 蒙版 放大效果图 逻辑设计 蒙版跟放大的图肯定要先隐藏 鼠标移入图片显示蒙版 鼠标移动蒙版跟着移动 处理边界情况 大图移动 小优 ...

最新文章

  1. NYOJ 586 疯牛
  2. boot spring test 文档_SpringBoot入门建站全系列(五)使用Spring-data-jpa操作数据库
  3. [精品]CSAPP Bomb Lab 解题报告(六)
  4. 子集生成 --二进制法
  5. 对当今社会的某些现象的感想
  6. 我的YUV播放器MFC小笔记:注册表读写
  7. python合法的变量名有哪些_Python判断变量名是否合法的方法示例
  8. 15-3 并发调度器
  9. sql虚拟服务器安装,安装SQL Server 2012服务器
  10. java string的内存模型_Java String内存模型
  11. 互联网+创新创业大赛反思总结
  12. 识别IOS和android方法
  13. java中数组拼接成字符串中间用逗号隔开
  14. TXT文本大数据手机号码归属地批量归类查询处理工具
  15. python的一些技巧操作,提高编码效率
  16. python加权最小二乘_如何计算加权最小二乘法的样本权重?
  17. 一则有意思的产品小故事
  18. 2020年复旦大学计算机学院夏令营经历
  19. 时间戳转换为日期格式 C/C++ 学习日记 新手讲解
  20. canvas动画科技园_【国庆营地】把梳子卖给和尚?沃顿投资大赛预备营带你洞见价值...

热门文章

  1. 日志分析ELK平台部署第一节
  2. wordpress社交主题_9个WordPress插件可帮助获取更多社交分享
  3. MATLAB环境下基于迁移学习的滚动轴承故障诊断
  4. Linux centos 关机重启命令
  5. @ControllerAdvice+@ExceptionHandler处理架构异常捕获
  6. COSMIC的后端学习之路——1.3 海量数据去重的Hash与BloomFilter(布隆过滤器),bitmap(位图)
  7. 重读《C primer plus》(五)
  8. Django的身份认证系统
  9. android主流UI布局
  10. 自动为计算机配置ip的协议,电脑自动获取IP地址----DHCP动态主机配置协议