原生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 相关文章推荐
20个非常棒的Jquery实用工具 国外文章
Jan 01 Javascript
javascript new后的constructor属性
Aug 05 Javascript
用JQuery模仿淘宝的图片放大镜显示效果
Sep 15 Javascript
基于jQuery的模仿新浪微博时间的组件
Oct 04 Javascript
js查错流程归纳
May 04 Javascript
JavaScript中双叹号(!!)作用示例介绍
Apr 10 Javascript
Highcharts学习之数据列
Aug 03 Javascript
js日期相关函数dateAdd,dateDiff,dateFormat等介绍
Sep 24 Javascript
ng2学习笔记之bootstrap中的component使用教程
Mar 09 Javascript
es6数据变更同步到视图层的方法
Mar 04 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
Jun 11 Javascript
vue-video-player 断点续播的实现
Feb 01 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 - Html Transfer Code
2006/10/09 PHP
PHP __autoload()方法真的影响性能吗?
2012/03/30 PHP
php数组转换js数组操作及json_encode的用法详解
2013/10/26 PHP
基于PHP生成简单的验证码
2016/06/01 PHP
php通过各种函数判断0和空
2020/07/04 PHP
php图片裁剪函数
2018/10/31 PHP
javascript删除option选项的多种方法总结
2013/11/22 Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
2013/12/29 Javascript
js动态创建标签示例代码
2014/06/09 Javascript
JavaScript实现点击自动选择TextArea文本的方法
2015/07/02 Javascript
javascript实现无法关闭的弹框
2016/11/27 Javascript
基于react框架使用的一些细节要点的思考
2017/05/31 Javascript
原生js jquery ajax请求以及jsonp的调用方法
2017/08/04 jQuery
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
手动下载Chrome并解决puppeteer无法使用问题
2018/11/12 Javascript
JS原型和原型链原理与用法实例详解
2020/02/05 Javascript
Handtrack.js库实现实时监测手部运动(推荐)
2021/02/08 Javascript
[40:06]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第一场
2018/04/04 DOTA
浅谈Python Opencv中gamma变换的使用详解
2018/04/02 Python
Python版名片管理系统
2018/11/30 Python
Python中的Socket 与 ScoketServer 通信及遇到问题解决方法
2019/04/01 Python
PyCharm 在Windows的有用快捷键详解
2020/04/07 Python
Python Process创建进程的2种方法详解
2021/01/25 Python
HTML5 语义化结构化规范化
2008/10/17 HTML / CSS
美国创意礼品网站:UncommonGoods
2017/02/03 全球购物
意大利在线购买隐形眼镜网站:VisionDirect.it
2019/03/18 全球购物
单位消防安全制度
2014/01/12 职场文书
《童年的发现》教学反思
2014/02/14 职场文书
创意广告词
2014/03/17 职场文书
业务内勤岗位职责
2014/04/30 职场文书
机关作风整顿个人剖析材料
2014/10/06 职场文书
2014年办公室文员工作总结
2014/11/12 职场文书
立春观后感
2015/06/18 职场文书
2016年元旦寄语
2015/08/17 职场文书
2016年教师寒假学习心得体会
2015/10/09 职场文书
2016同学毕业寄语大全
2015/12/04 职场文书