原生JS实现的放大镜效果实例代码


Posted in Javascript onOctober 15, 2016

这是我用原生js写的放大镜效果,与各种各样的框架技术相比,我喜欢使用原生的js,在这里,想和大家一起谈谈原生和框架技术的理解与个人喜好。

<!DOCTYPE HTML>
<html>
<head>
<title>js放大镜效果</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<style>
*{
margin:0px;
padding:0px;
border:none;
list-style:none;
}
#box{
margin:80px auto;
width: 352px;
}
#box p
{
width: 350px;
height: 350px;
border: 1px solid #ddd;
margin-bottom: 5px; 
}
#box p img
{
width:350px;
height:350px;
}
#box h1
{
width: 352px;
height: 54px;
overflow:hidden; 
position:relative;
}
#box h1 div
{
width:310px;
height: 54px;
margin:0px auto;
position:relative;
}
#box h1 div ul
{
position:absolute;
left: 0px;
top: 0px;
}
#box h1 ul li
{
width: 62px; 
float: left;
}
#box h1 ul li img
{
width: 50px;
height: 50px;
padding: 1px;
border: 1px solid #CECFCE;
}
#box h1 img.hoveredThumb{
border: 2px solid #e4393c;
padding: 0;
}
/*中等大小的图片显示区域*/
p#medImgBox{
position: relative;
}
#jing{
position: absolute;
left: 0;
top: 0;
width: 175px;
height: 175px;
border-radius:50%;
background: #ffd;
opacity: 0.7;
display: none;
}
/*悬于图片/jing上方的专用于接收鼠标移动事件的
一个完全透明的层*/
#medImgBox #mian{
display: block;
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
cursor: move;
opacity: 0;
}
/**
大图显示区域
**/
#largeImgBox{
position:absolute;
width: 175px;
height: 175px;
border-radius:50%;
border: 1px solid #faa;
top: 0px;
left: 352px; 
overflow: hidden;
display: none;
}
#largeImg{
display: none;
position: absolute;
}
</style> 
</head>
<body >
<div id="box">
<p id="medImgBox">
<img id="mediumImg" src="images/product-s1-m.jpg" />
<span id="jing"></span>
<span id="mian"></span>
<span id="largeImgBox">
<img id="largeImg"/>
</span>
</p>
<h1>
<div>
<ul id="list">
<li><img src="images\product-s1.jpg" /></li>
<li><img src="images\product-s2.jpg" /></li>
<li><img src="images\product-s3.jpg" /></li>
<li><img src="images\product-s4.jpg" /></li>
<li><img src="images\product-s1.jpg" /></li>
</ul>
</div>
</h1>
</div>
<script>
var imgList = document.querySelectorAll('#box ul li img');
for(var i=0; i<imgList.length; i++){
var img = imgList[i];
img.onmouseover = changeThumbImg;
}
function changeThumbImg(){
var previousHovered = document.querySelector('.hoveredThumb');
if(previousHovered==null){
this.className = 'hoveredThumb'; 
changeMediumImg(this.src); //修改中等图片的src
}else if(previousHovered!=this){
previousHovered.removeAttribute('class');
this.className = 'hoveredThumb';
changeMediumImg(this.src); //修改中等图片的src
}
}
function changeMediumImg(thumbSrc){
var dotIndex = thumbSrc.lastIndexOf('.');
var prefix = thumbSrc.substring(0, dotIndex);
var suffix = thumbSrc.substring(dotIndex);
var mediumSrc = prefix + '-m'+suffix;
document.getElementById('mediumImg').src = mediumSrc;
}
/**
为放大镜jing添加鼠标移动事件
**/
document.querySelector('#mian').onmousemove = 
function(event){
var x = event.offsetX; //事件相对于事件源的偏移量
var y = event.offsetY; 
var jing = document.getElementById('jing'); 
var w = jing.offsetWidth; //jing的宽和高
var h = jing.offsetHeight;
var left = x<w/2 ? 0 : (x-w/2);
var top = y<h/2 ? 0 : (y-h/2);
if(x>(w*2-w/2)){
left = w*2 - w;
}
if(y>(h*2-h/2)){
top = h*2 - h;
}
jing.style.left = left+'px';
jing.style.top = top+'px';
//修改大图的位置/
var largeImg = document.getElementById('largeImg');
largeImg.style.left = (-left*largeImg.width/350) + 'px';
largeImg.style.top = (-top*largeImg.height/350)+'px';
}
document.querySelector('#mian').onmouseover = function(){
//显示jing
var jing = document.getElementById('jing');
jing.style.display = 'block';
var largeImgBox = document.getElementById('largeImgBox');
largeImgBox.style.display = 'block';
//获取当前要显示的大图的src
var src = document.querySelector('#mediumImg').src;
var dotIndex = src.lastIndexOf('.');
var prefix = src.substring(0, dotIndex-2);
var suffix = src.substring(dotIndex);
src = prefix + '-l'+ suffix;
var largeImg = document.getElementById('largeImg');
largeImg.src = src;
largeImg.style.display='block';
}
document.querySelector('#mian').onmouseout = 
function(){
//除去jing
var jing = document.getElementById('jing');
jing.style.display = 'none';
//除去大图显示区
document.getElementById('largeImgBox').style.display = 'none';
}
</script>
</body>
</html>

以上所述是小编给大家介绍的原生JS实现的放大镜效果实例代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JavaScript的public、private和privileged模式
Dec 28 Javascript
[原创]js获取数组任意个不重复的随机数组元素
Mar 15 Javascript
JS this作用域以及GET传输值过长的问题解决方法
Aug 06 Javascript
简单的代码实现jquery定时器
Nov 17 Javascript
css3元素简单的闪烁效果实现(html5 jquery)
Dec 28 Javascript
微信小程序 石头剪刀布实例代码
Jan 04 Javascript
js实现前端分页页码管理
Jan 06 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
Mar 15 Javascript
JavaScript实现图片拖曳效果
Sep 08 Javascript
vue获取DOM元素并设置属性的两种实现方法
Sep 30 Javascript
vue移动端模态框(可传参)的实现
Nov 20 Javascript
解决vue项目input输入框双向绑定数据不实时生效问题
Aug 05 Javascript
jQuery通过ajax方法获取json数据不执行success的原因及解决方法
Oct 15 #Javascript
Bootstrap分页插件之Bootstrap Paginator实例详解
Oct 15 #Javascript
jstl中判断list中是否包含某个值的简单方法
Oct 14 #Javascript
js中获取 table节点各tr及td的内容简单实例
Oct 14 #Javascript
jQuery ajaxForm()的应用
Oct 14 #Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
Oct 14 #Javascript
jQuery如何防止Ajax重复提交
Oct 14 #Javascript
You might like
PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
2010/07/09 PHP
PHP STRING 陷阱原理说明
2010/07/24 PHP
php中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
2011/05/04 PHP
PHP中的reflection反射机制测试例子
2014/08/05 PHP
Thinkphp单字母函数使用指南
2016/05/08 PHP
jquery.cookie.js 操作cookie实现记住密码功能的实现代码
2011/04/27 Javascript
jQuery1.6 正式版发布并提供下载
2011/05/05 Javascript
jQuery插件fullPage.js实现全屏滚动效果
2016/12/02 Javascript
基于javascript实现最简单选项卡切换
2017/02/01 Javascript
js弹性势能动画之抛物线运动实例详解
2017/07/27 Javascript
小程序兼容安卓和IOS数据处理问题及坑
2018/09/18 Javascript
微信小程序实现点赞、取消点赞功能
2018/11/02 Javascript
@angular前端项目代码优化之构建Api Tree的方法
2018/12/24 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
2020/10/19 Javascript
Python程序员鲜为人知但你应该知道的17个问题
2014/06/04 Python
python实现登陆知乎获得个人收藏并保存为word文件
2015/03/16 Python
Python中转换角度为弧度的radians()方法
2015/05/18 Python
以一个投票程序的实例来讲解Python的Django框架使用
2016/02/18 Python
Python使用gensim计算文档相似性
2016/04/10 Python
Python输出带颜色的字符串实例
2017/10/10 Python
Python+OpenCV实现实时眼动追踪的示例代码
2019/11/11 Python
Python的赋值、深拷贝与浅拷贝的区别详解
2020/02/12 Python
PyTorch-GPU加速实例
2020/06/23 Python
FILA斐乐中国官方商城:意大利运动品牌
2017/01/25 全球购物
Allsole美国/加拿大:英国一家专门出售品牌鞋子的网站
2018/10/21 全球购物
德国自然时尚和有机产品购物网站:Waschbär
2019/05/29 全球购物
Servlet的生命周期
2013/08/25 面试题
硕士研究生自我鉴定
2013/11/08 职场文书
小学教育毕业生自荐信
2013/11/18 职场文书
《英英学古诗》教学反思
2014/04/11 职场文书
项目负责人任命书
2014/06/04 职场文书
幼儿园教师节演讲稿
2014/09/03 职场文书
计划生育证明格式范本
2014/09/12 职场文书
2015年小学师德师风建设工作总结
2015/10/23 职场文书
html5调用摄像头实例代码
2021/06/28 HTML / CSS
Python实现文字pdf转换图片pdf效果
2022/04/03 Python