原生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 事件系统
Jul 22 Javascript
如何在node的express中使用socket.io
Dec 15 Javascript
使用JavaScript 实现的人脸检测
Mar 24 Javascript
ECMAScript中函数function类型
Jun 03 Javascript
jQuery插件datalist实现很好看的input下拉列表
Jul 14 Javascript
jquery实现动静态条形统计图
Aug 17 Javascript
JavaScript原生对象常用方法总结(推荐)
May 13 Javascript
json的使用小结
Jun 08 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
Jan 04 Javascript
Elasticsearch实现复合查询高亮结果功能
Sep 10 Javascript
js Math数学简单使用操作示例
Mar 13 Javascript
JavaScript圣杯布局与双飞翼布局实现案例详解
Aug 05 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获取本周开始日期和结束日期的方法
2015/03/09 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
分享8款优秀的 jQuery 加载动画和进度条插件
2012/10/24 Javascript
通过jQuery源码学习javascript(三)
2012/12/27 Javascript
jquery中get,post和ajax方法的使用小结
2014/02/04 Javascript
js生成动态表格并为每个单元格添加单击事件的方法
2014/04/14 Javascript
浅谈Jquery核心函数
2015/06/18 Javascript
在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法
2015/09/11 Javascript
JavaScript实现自动生成网页元素功能(按钮、文本等)
2015/11/21 Javascript
使用JavaScript为Kindeditor自定义按钮增加Audio标签
2016/03/18 Javascript
js中利用cookie实现记住密码功能
2020/08/20 Javascript
Angular 4依赖注入学习教程之FactoryProvider配置依赖对象(五)
2017/06/04 Javascript
基于ExtJs在页面上window再调用Window的事件处理方法
2017/07/26 Javascript
SVG动画vivus.js库使用小结(实例代码)
2017/09/14 Javascript
如何使用VuePress搭建一个类型element ui文档
2019/02/14 Javascript
浅谈关于vue中scss公用的解决方案
2019/12/02 Javascript
JavaScript如何实现监听键盘输入和鼠标监点击
2020/07/20 Javascript
基于VUE实现简单的学生信息管理系统
2021/01/13 Vue.js
Python isinstance函数介绍
2015/04/14 Python
详解python中xlrd包的安装与处理Excel表格
2016/12/16 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
8种用Python实现线性回归的方法对比详解
2019/07/10 Python
python使用sessions模拟登录淘宝的方式
2019/08/16 Python
html5声频audio和视频video等新特性详细说明
2012/12/26 HTML / CSS
HTML5之SVG 2D入门12—SVG DOM及DOM操作介绍
2013/01/30 HTML / CSS
MAC Cosmetics官方网站:魅可专业艺术彩妆
2019/04/10 全球购物
Brora官网:英国领先的羊绒服装品牌
2019/08/28 全球购物
亿阳信通股份有限公司C#笔试题
2016/12/06 面试题
UNIX文件系统分类
2014/11/11 面试题
美术专业学生个人自我评价
2013/09/19 职场文书
小学社会实践活动总结
2014/07/03 职场文书
医院深入开展党的群众路线教育实践活动实施方案
2014/08/27 职场文书
爱心助学感谢信
2015/01/21 职场文书
中标通知书范本
2015/04/17 职场文书
优秀新员工事迹材料
2019/05/13 职场文书