原生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 相关文章推荐
JQuery制作的放大效果的popup对话框(未添加任何jquery plugin)分享
Apr 28 Javascript
在子窗口中关闭父窗口的一句代码
Oct 21 Javascript
页面按钮禁用与解除禁用的方法
Feb 19 Javascript
jquery中获取元素里某一特定子元素的代码
Dec 02 Javascript
js实现div模拟模态对话框展现URL内容
May 27 Javascript
JS清除字符串中重复值的实现方法
Aug 03 Javascript
BootStrap网页中代码显示用法详解
Oct 21 Javascript
移动端基础事件总结与应用
Jan 12 Javascript
vue移动端路由切换实例分析
May 14 Javascript
Layer UI表格列日期格式化及取消自动填充日期的实现方法
May 10 Javascript
AutoJs实现刷宝短视频的思路详解
May 22 Javascript
vue 数据操作相关总结
Dec 17 Vue.js
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 各种应用乱码问题的解决方法
2010/05/09 PHP
smarty模板局部缓存方法使用示例
2014/06/17 PHP
PHP中的日期加减方法示例
2014/08/21 PHP
php设计模式之单例模式代码
2016/06/11 PHP
PHP实现动态获取函数参数的方法示例
2018/04/02 PHP
js+css使DIV始终居于屏幕中间 左下 左上 右上 右下的代码集合
2011/03/10 Javascript
javascript中的括号()用法小结
2014/04/14 Javascript
使用Jasmine和Karma对AngularJS页面程序进行测试
2016/03/05 Javascript
jQuery插件EasyUI设置datagrid的checkbox为禁用状态的方法
2016/08/05 Javascript
基于jQuery实现中英文切换导航条效果
2016/09/18 Javascript
jQuery插件HighCharts绘制2D金字塔图效果示例【附demo源码下载】
2017/03/09 Javascript
基于jquery实现二级联动效果
2017/03/30 jQuery
详解vue模拟加载更多功能(数据追加)
2017/06/23 Javascript
ReactNative实现图片上传功能的示例代码
2017/07/11 Javascript
vue 组件使用中的一些细节点
2018/04/25 Javascript
关于element-ui的隐藏组件el-scrollbar的使用
2019/05/29 Javascript
部署vue+Springboot前后端分离项目的步骤实现
2020/05/31 Javascript
如何使用gpu.js改善JavaScript的性能
2020/12/01 Javascript
[01:33:30]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第二场 2月5日
2021/03/11 DOTA
Python中的闭包总结
2014/09/18 Python
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
Django中间件实现拦截器的方法
2018/06/01 Python
python3.9.1环境安装的方法(图文)
2021/02/02 Python
python实现MySQL指定表增量同步数据到clickhouse的脚本
2021/02/26 Python
CSS3实现多背景模拟动态边框的效果
2016/11/08 HTML / CSS
如何查看浏览器对html5的支持情况
2020/12/15 HTML / CSS
卡骆驰新加坡官网:Crocs新加坡
2018/06/12 全球购物
瑞典香水、须后水和美容产品购物网站:Parfym-Klick.se
2019/12/29 全球购物
中医临床专业自我鉴定范文
2014/01/15 职场文书
2014年入党积极分子学习三中全会思想汇报
2014/09/13 职场文书
企业法人授权委托书
2014/09/25 职场文书
小学大队干部竞选稿
2015/11/20 职场文书
2016党员学习心得体会范文
2016/01/23 职场文书
公司员工违法违章行为检讨书
2019/06/24 职场文书
python opencv旋转图片的使用方法
2021/06/04 Python
斗罗大陆八大特殊魂兽,龙族始祖排榜首,第五最残忍(翠魔鸟)
2022/03/18 国漫