原生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中创建字典对象(dictionary)实例
Mar 31 Javascript
Javascript中typeof 用法小结
May 12 Javascript
javascript中clipboardData对象用法详解
May 13 Javascript
javascript伸缩菜单栏实现代码分享
Nov 12 Javascript
使用do...while的方法输入一个月中所有的周日(实例代码)
Jul 22 Javascript
AngularJs中Bootstrap3 datetimepicker使用实例
Dec 13 Javascript
微信小程序 开发之顶部导航栏实例代码
Feb 23 Javascript
vue2使用keep-alive缓存多层列表页的方法
Sep 21 Javascript
JS学习笔记之贪吃蛇小游戏demo实例详解
May 29 Javascript
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
Nov 12 Javascript
js实现时分秒倒计时
Dec 03 Javascript
ES6中Set和Map用法实例详解
Mar 02 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查询快递信息的方法
2015/03/07 PHP
利用Laravel事件系统如何实现登录日志的记录详解
2017/05/20 PHP
jquery ready函数源代码研究
2009/12/06 Javascript
jquery表单验证使用插件formValidator
2012/11/10 Javascript
解析Javascript中难以理解的11个问题
2013/12/09 Javascript
Extjs grid panel自带滚动条失效的解决方法
2014/09/11 Javascript
JavaScript 开发工具webstrom使用指南
2014/12/09 Javascript
jQuery 中DOM 操作详解
2015/01/13 Javascript
jquery获取url参数及url加参数的方法
2015/10/26 Javascript
浅析ES6的八进制与二进制整数字面量
2016/08/30 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
jQuery基于Ajax方式提交表单功能示例
2017/02/10 Javascript
微信小程序图片自适应支持多图实例详解
2017/06/21 Javascript
浅谈Node异步编程的机制
2017/10/18 Javascript
在vue中实现简单页面逆传值的方法
2017/11/27 Javascript
js中apply()和call()的区别与用法实例分析
2018/08/14 Javascript
原生js实现日历效果
2020/03/02 Javascript
Vue Object 的变化侦测实现代码
2020/04/15 Javascript
[02:42]2014DOTA2国际邀请赛 三冰专访:我会打到Ti20
2014/07/13 DOTA
[01:24:16]2018DOTA2亚洲邀请赛 4.6 全明星赛
2018/04/10 DOTA
Python开发如何在ubuntu 15.10 上配置vim
2016/01/25 Python
Python安装第三方库及常见问题处理方法汇总
2016/09/13 Python
Python中.py文件打包成exe可执行文件详解
2017/03/22 Python
Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析
2020/03/30 Python
Python爬虫HTPP请求方法有哪些
2020/06/03 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
2020/10/12 Python
详解HTML5中的manifest缓存使用
2015/09/09 HTML / CSS
Html5实现文件异步上传功能
2017/05/19 HTML / CSS
快速实现一个简单的canvas迷宫游戏的示例
2018/07/04 HTML / CSS
韩国最大的购物网站:Gmarket
2019/06/20 全球购物
优秀学生事迹材料
2014/02/08 职场文书
综合办公室主任岗位职责
2014/04/13 职场文书
文明班集体申报材料
2014/05/23 职场文书
美国旅游签证工作证明
2014/10/14 职场文书
css布局巧妙技巧之css三角示例的运用
2022/03/16 HTML / CSS
关于JS中的作用域中的问题思考分享
2022/04/06 Javascript