原生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设置css属性的代码
Dec 28 Javascript
Javascript核心读书有感之语言核心
Feb 01 Javascript
iScroll中事件点击触发两次解决方案
Mar 11 Javascript
浅谈jQuery构造函数分析
May 11 Javascript
JQuery中Text方法用法实例分析
May 18 Javascript
JavaScript动态改变div属性的实现方法
Jul 22 Javascript
JavaScript中rem布局在react中的应用
Dec 09 Javascript
jQuery增加与删除table列的方法
Mar 01 Javascript
JS产生随机数的几个用法详解
Jun 22 Javascript
Vue-CLI3.x 设置反向代理的方法
Dec 06 Javascript
Vue项目打包部署到iis服务器的配置方法
Oct 14 Javascript
JavaScript中arguments的使用方法详解
Dec 20 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
全国FM电台频率大全 - 3 河北省
2020/03/11 无线电
php中jQuery插件autocomplate的简单使用笔记
2012/06/14 PHP
谈谈关于php的优点与缺点
2013/04/11 PHP
PHP读MYSQL中文乱码的快速解决方法
2016/10/01 PHP
PHP 文件上传限制问题
2019/09/01 PHP
js 调整select 位置的函数
2008/02/21 Javascript
jquery select操作的日期联动实现代码
2009/12/06 Javascript
jQuery的一些特性和用法整理小结
2010/01/13 Javascript
javascript打印大全(打印页面设置/打印预览代码)
2013/03/29 Javascript
详解JavaScript编程中的数组结构
2015/10/24 Javascript
JS操作XML实例总结(加载与解析XML文件、字符串)
2015/12/08 Javascript
thinkphp实现无限分类(使用递归)
2015/12/19 Javascript
JS中artdialog弹出框控件之提交表单思路详解
2016/04/18 Javascript
点击页面任何位置隐藏div的实现方法
2016/09/05 Javascript
js canvas实现红包照片效果
2018/08/21 Javascript
python实现随机森林random forest的原理及方法
2017/12/21 Python
Pytorch入门之mnist分类实例
2018/04/14 Python
python3+dlib实现人脸识别和情绪分析
2018/04/21 Python
Python中的支持向量机SVM的使用(附实例代码)
2019/06/26 Python
python实现实时视频流播放代码实例
2020/01/11 Python
微软俄罗斯官方网站:Microsoft俄罗斯
2016/09/18 全球购物
Speedo速比涛法国官方网站:泳衣、泳镜、泳帽、泳裤
2019/07/30 全球购物
Wolford法国官网:奥地利奢侈内衣品牌
2020/08/11 全球购物
C#可否对内存进行直接的操作
2015/02/26 面试题
《风筝》教学反思
2014/04/10 职场文书
村庄环境整治方案
2014/05/15 职场文书
运动会口号大全
2014/06/07 职场文书
日语专业毕业生自荐书
2014/06/18 职场文书
临床专业自荐信
2014/06/22 职场文书
个人股份合作协议书
2014/10/24 职场文书
教师党的群众路线教育实践活动个人整改措施
2014/11/04 职场文书
2015秋季开学典礼致辞
2015/07/16 职场文书
2016读书月活动心得体会
2016/01/14 职场文书
2019XX公司员工考核管理制度!
2019/08/07 职场文书
python xlwt模块的使用解析
2021/04/13 Python
关于Mybatis中SQL节点的深入解析
2022/03/19 Java/Android