原生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 相关文章推荐
arguments对象
Nov 20 Javascript
JQuery 前台切换网站的样式实现
Jun 22 Javascript
20个非常棒的Jquery实用工具 国外文章
Jan 01 Javascript
Jquery 获取checkbox的checked问题
Nov 16 Javascript
跟我学习javascript的prototype原型和原型链
Nov 18 Javascript
详解Bootstrap按钮
Jan 04 Javascript
JavaScript中定义类的方式详解
Jan 07 Javascript
jQuery 自定义下拉框(DropDown)附源码下载
Jul 22 Javascript
jQuery自定义组件(导入组件)
Nov 08 Javascript
Bootstrap入门教程一Hello Bootstrap初识
Mar 02 Javascript
Vue2.0组件间数据传递示例
Mar 07 Javascript
vue3 自定义图片放大器效果的示例代码
Jul 23 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
如何在symfony中导出为CSV文件中的数据
2011/10/06 PHP
php中导出数据到excel时数字变为科学计数的解决方法
2013/02/03 PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
2016/04/07 PHP
微信公众平台DEMO(PHP)
2016/05/04 PHP
Yii实现复选框批量操作实例代码
2017/03/15 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
2020/04/13 PHP
Jquery Uploadify上传带进度条的简单实例
2014/02/12 Javascript
jQuery 处理页面的事件详解
2015/01/20 Javascript
浅谈javascript中的DOM方法
2015/07/16 Javascript
AngularJS 避繁就简的路由
2016/07/01 Javascript
js控住DOM实现发布微博效果
2016/08/30 Javascript
关于定制FileField中的上传文件名称问题
2017/08/22 Javascript
vue 不使用select实现下拉框功能(推荐)
2018/05/17 Javascript
详解React中setState回调函数
2018/06/14 Javascript
webpack4.x CommonJS模块化浅析
2018/11/09 Javascript
JointJS流程图的绘制方法
2018/12/03 Javascript
antd组件Upload实现自己上传的实现示例
2018/12/18 Javascript
详解TypeScript+Vue 插件 vue-class-component的使用总结
2019/02/18 Javascript
vue2 拖动排序 vuedraggable组件的实现
2019/08/08 Javascript
微信小程序canvas开发水果老虎机的思路详解
2020/02/07 Javascript
Python中matplotlib中文乱码解决办法
2017/05/12 Python
Python 比较两个数组的元素的异同方法
2017/08/17 Python
对python GUI实现完美进度条的示例详解
2018/12/13 Python
Python中的字符串切片(截取字符串)的详解
2019/05/15 Python
Python3 Tkinkter + SQLite实现登录和注册界面
2019/11/19 Python
Pytorch 使用 nii数据做输入数据的操作
2020/05/26 Python
浅谈keras使用预训练模型vgg16分类,损失和准确度不变
2020/07/02 Python
激光脱毛、蓝光和护肤:Tria Beauty
2019/03/28 全球购物
财务部岗位职责
2013/11/19 职场文书
夜班门卫岗位职责
2013/12/09 职场文书
校庆标语集锦
2014/06/25 职场文书
2015年教师节感言
2015/08/03 职场文书
公司规章制度范本
2015/08/03 职场文书
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
2021/09/04 SQL Server
详细聊聊关于Mysql联合查询的那些事儿
2021/10/24 MySQL