原生JS实现的放大镜特效示例【测试可用】


Posted in Javascript onDecember 08, 2018

本文实例讲述了原生JS实现的放大镜特效。分享给大家供大家参考,具体如下:

最近在做ecshop的二次开发,遇到一些jquery插件与ecshop的冲突,

调整冲突的需要修改的地方又太多,修改起来得不偿失,

故做了一个原生的js实现商品详情页面的放大镜效果,以避免冲突!

下面介绍一下代码及实现过程:

首先,创建fangda.html文件

在文件头部的<head></head>中添加文件的css样式,即:

<style type="text/css">
#div1 { width:304px; height:222px; position:relative; margin:30px auto 0px; border:2px solid red;}
#div1 img{width:304px; height:222px;}
#div1 span { width:100px; height:100px; background:red; left:0px;top:0px; position:absolute; display:none; filter:alpha(opacity:20); opacity:0.2;}
.show { width:100%; height:100%; background:red; position:absolute; z-index:10px; filter:alpha(opacity:10); opacity:0.1; left:0px; top:0px; }
#div2 {width:304px; height:222px; position:relative; display:none; overflow:hidden; margin:0px auto 0px;}
#img1 { position:absolute;}
</style>

设置,显示在页面的内容

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>JavaScript 图片放大代码</title>
<body>
<div id="div1">
<img src="http://demo.3water.com/js/2017/html5-canvas-fangdajing-codes/s1.jpg" /> <!-- 本地图片路径 -->
<span></span> <!-- 鼠标滑动 放大区域 -->
<div class="show"></div>
</div>
<div id="div2"> <!-- 展示放大后的图片 -->
<img id="img1" src="http://demo.3water.com/js/2017/html5-canvas-fangdajing-codes/s1.jpg" /> <!-- 本地大图片路径 -->
</div>
</body>

然后,添加js事件效果,添加在<head></head>

<script type="text/javascript">
//通过页面加载事件,使页面加载完毕自动执行
window.onload=function ()
{
var oDiv=document.getElementById('div1');
var oShow=oDiv.getElementsByTagName('div')[0];
var oSpan=oDiv.getElementsByTagName('span')[0];
var oImg=document.getElementById('img1');
oShow.onmouseover=function()
{
oSpan.style.display='block';
oImg.parentNode.style.display='block';
};
oShow.onmouseout=function()
{
oSpan.style.display='none';
oImg.parentNode.style.display='none';
};
oShow.onmousemove=function(ev)
{
var oEvent=ev||event;
var x=oEvent.clientX-oDiv.offsetLeft-oSpan.offsetWidth/2;
var y=oEvent.clientY-oDiv.offsetTop-oSpan.offsetHeight/2;
//获得具体坐标
if(x<0)
{
x=0;
}
else if(x>oShow.offsetWidth-oSpan.offsetWidth)
{
x=oShow.offsetWidth-oSpan.offsetWidth;
}
if(y<0)
{
y=0;
}
else if(y>oShow.offsetHeight-oSpan.offsetHeight)
{
y=oShow.offsetHeight-oSpan.offsetHeight
}
oSpan.style.left=x+'px';
oSpan.style.top=y+'px';
var percentX=x/(oShow.offsetWidth-oSpan.offsetWidth);
var percentY=y/(oShow.offsetHeight-oSpan.offsetHeight);
var oImgparent=oImg.parentNode;
oImg.style.left=-percentX*(oImg.offsetWidth-oImgparent.offsetWidth)+'px';
oImg.style.top=-percentY*(oImg.offsetHeight-oImgparent.offsetHeight)+'px';
};
};
</script>

这样就实现了,图片移上后的放大效果,同时由于没有引入其他的插件,移植性比较好,可以通过更改较少的代码,就较好地规避在其他项目和商城中的冲突。

但缺点没有引入插件后效果华丽,加载页面没有引入插件的快,

可以考虑在这个页面做一个缓存,增加用户二次访问速度!

这里使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试运行效果如下:

 原生JS实现的放大镜特效示例【测试可用】

感兴趣的朋友可以使用上述在线工具测试一下看看运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
javascript动画之圆形运动,环绕鼠标运动作小球
Jul 20 Javascript
file模式访问网页时iframe高度自适应解决方案
Jan 16 Javascript
javascript中的Function.prototye.bind
Jun 25 Javascript
JS设置下拉列表框当前所选值的方法
Dec 22 Javascript
利用yarn实现一个webpack+react种子
Oct 25 Javascript
JS实现根据用户输入分钟进行倒计时功能
Nov 14 Javascript
JS中闭包的经典用法小结(2则示例)
Dec 28 Javascript
jquery实现提示语淡入效果
May 05 jQuery
javascript实现文本框标签验证的实例代码
Oct 14 Javascript
在微信小程序中使用mqtt服务的方法
Dec 13 Javascript
JavaScript实现旋转木马轮播图
Mar 16 Javascript
vue打包通过image-webpack-loader插件对图片压缩优化操作
Nov 12 Javascript
JS实现的小火箭发射动画效果示例
Dec 08 #Javascript
jQuery时间戳和日期相互转换操作示例
Dec 07 #jQuery
ES6的Fetch异步请求的实现方法
Dec 07 #Javascript
JavaScript this绑定过程深入详解
Dec 07 #Javascript
React 使用recharts实现散点地图的示例代码
Dec 07 #Javascript
如何手动实现es5中的bind方法详解
Dec 07 #Javascript
JavaScript时间与时间戳的转换操作实例分析
Dec 07 #Javascript
You might like
解析php中两种缩放图片的函数,为图片添加水印
2013/06/14 PHP
php5.3不能连接mssql数据库的解决方法
2014/12/27 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
javascript数组使用调用方法汇总
2007/12/08 Javascript
js屏蔽鼠标键盘(右键/Ctrl+N/Shift+F10/F11/F5刷新/退格键)
2013/01/24 Javascript
js判断当前浏览器类型,判断IE浏览器方法
2014/06/02 Javascript
基于 Docker 开发 NodeJS 应用
2014/07/30 NodeJs
Bootstrap每天必学之进度条
2015/11/30 Javascript
JavaScript toUpperCase()方法使用详解
2016/08/26 Javascript
angularjs实现多张图片上传并预览功能
2017/02/24 Javascript
node使用Koa2搭建web项目的方法
2017/10/17 Javascript
通过jQuery学习js类型判断的技巧
2019/05/27 jQuery
解决Vue + Echarts 使用markLine标线(precision精度问题)
2020/07/20 Javascript
python实现同时给多个变量赋值的方法
2015/04/30 Python
Python简单获取自身外网IP的方法
2016/09/18 Python
python中的计时器timeit的使用方法
2017/10/20 Python
python深度优先搜索和广度优先搜索
2018/02/07 Python
对python中Librosa的mfcc步骤详解
2019/01/09 Python
Django中使用haystack+whoosh实现搜索功能
2019/10/08 Python
Python中base64与xml取值结合问题
2019/12/22 Python
如何设置PyCharm中的Python代码模版(推荐)
2020/11/20 Python
CSS3 @media的基本用法总结
2019/09/10 HTML / CSS
HTML5 Video/Audio播放本地文件示例介绍
2013/11/18 HTML / CSS
用HTML5制作一个简单的桌球游戏的教程
2015/05/12 HTML / CSS
历史学专业毕业生求职信
2013/09/27 职场文书
骨干教师培训制度
2014/01/13 职场文书
运动会闭幕式解说词
2014/02/21 职场文书
四风查摆剖析材料
2014/10/10 职场文书
荆州古城导游词
2015/02/06 职场文书
教师节简报
2015/07/20 职场文书
班委竞选稿范文
2015/11/21 职场文书
2019最新版火锅店的创业计划书 !
2019/07/12 职场文书
python实现进度条的多种实现
2021/04/29 Python
css背景和边框标签实例详解
2021/05/21 HTML / CSS
上帝为你开了一扇窗之Tkinter常用函数详解
2021/06/02 Python
Jedis操作Redis实现模拟验证码发送功能
2021/09/25 Redis