原生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创建通用表单验证——更锋利的使用dom对象
Sep 13 Javascript
javascript中日期转换成时间戳的小例子
Mar 21 Javascript
有关于JS辅助函数inherit()的问题
Apr 07 Javascript
JavaScript判断密码强度(自写代码)
Sep 06 Javascript
查找iframe里元素的方法可传参
Sep 11 Javascript
js传中文参数controller里获取参数乱码问题解决方法
Jan 03 Javascript
一个支付页面DEMO附截图
Jul 22 Javascript
JS中传递参数的几种不同方法比较
Jan 20 Javascript
javascript 作用于作用域链的详解
Sep 27 Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
Aug 07 Javascript
layui表格数据复选框回显设置方法
Sep 13 Javascript
使用pkg打包ThinkJS项目的方法步骤
Dec 30 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实现禁用IE和火狐的缓存问题
2012/12/03 PHP
yii操作session实例简介
2014/07/31 PHP
基于jQuery实现的当离开页面时出现提示的实现代码
2011/06/27 Javascript
jQuery使用数组编写图片无缝向左滚动
2012/12/11 Javascript
基于jquery的网站幻灯片切换效果焦点图代码
2013/09/15 Javascript
Js实现当前点击a标签变色突出显示其他a标签回复原色
2013/11/27 Javascript
jQuery中的$.ajax()方法应用
2014/05/06 Javascript
jquery实现动态画圆
2014/12/04 Javascript
简介JavaScript中Boolean.toSource()方法的使用
2015/06/05 Javascript
轻松学习jQuery插件EasyUI EasyUI表单验证
2015/12/01 Javascript
浅谈jQuery before和insertBefore的区别
2016/12/04 Javascript
Nodejs实现短信验证码功能
2017/02/09 NodeJs
Javascript实现登录记住用户名和密码功能
2017/03/22 Javascript
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
js时间戳与日期格式之间相互转换
2017/12/11 Javascript
ionic grid(栅格)九宫格制作详解
2018/06/30 Javascript
微信小程序如何调用新闻接口实现列表循环
2019/07/02 Javascript
微信小程序页面上下滚动效果
2020/11/18 Javascript
详解vue v-model
2020/08/31 Javascript
微信小程序实现底部弹出模态框
2020/11/18 Javascript
Tensorflow卷积神经网络实例
2018/05/24 Python
Python实现的生产者、消费者问题完整实例
2018/05/30 Python
python3访问字典里的值实例方法
2020/11/18 Python
Ralph Lauren拉夫·劳伦美国官网:带有浓郁美国气息的高品味时装品牌
2017/11/01 全球购物
护士节策划方案
2014/05/19 职场文书
党员创先争优心得体会
2014/09/11 职场文书
2014年教师批评与自我批评思想汇报
2014/09/20 职场文书
2015暑假实习报告范文
2015/07/13 职场文书
总经理致辞
2015/07/29 职场文书
2019年暑期法院实习报告
2019/12/18 职场文书
pytorch交叉熵损失函数的weight参数的使用
2021/05/24 Python
idea编译器vue缩进报错问题场景分析
2021/07/04 Vue.js
mysql函数全面总结
2021/11/11 MySQL
Python+OpenCV实现在图像上绘制矩形
2022/03/21 Python
《进击的巨人》新联动CM 兵长强势出击兽巨人
2022/04/05 日漫
vue 数字翻牌器动态加载数据
2022/04/20 Vue.js