原生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 相关文章推荐
JS代码格式化和语法着色V2
Oct 14 Javascript
JavaScript中如何通过arguments对象实现对象的重载
May 12 Javascript
javascript嵌套函数和在函数内调用外部函数的区别分析
Jan 31 Javascript
JavaScript入门系列之知识点总结
Mar 24 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
Jul 21 Javascript
微信小程序 实战小程序实例
Oct 08 Javascript
js canvas实现放大镜查看图片功能
Jun 08 Javascript
浅析为什么a=&quot;abc&quot; 不等于 a=new String(&quot;abc&quot;)
Oct 25 Javascript
vue实现的双向数据绑定操作示例
Dec 04 Javascript
浅谈Vue 性能优化之深挖数组
Dec 11 Javascript
JavaScript实现简单贪吃蛇效果
Mar 09 Javascript
谈谈JavaScript中的垃圾回收机制
Sep 17 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
一个阿拉伯数字转中文数字的函数
2006/10/09 PHP
粗略计算在线时间,bug:ip相同
2006/12/09 PHP
PHP5中的时间相差8小时的解决办法
2008/03/28 PHP
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
2012/06/05 PHP
php对二维数组按指定键值key排序示例代码
2013/11/26 PHP
php实现通过ftp上传文件
2015/06/19 PHP
JavaScript学习历程和心得小结
2010/08/16 Javascript
jQuery select表单提交省市区城市三级联动核心代码
2014/06/09 Javascript
node.js中的fs.writeFileSync方法使用说明
2014/12/14 Javascript
js实现TAB切换对应不同颜色的代码
2015/08/31 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
2015/12/04 Javascript
JavaScript中的ParseInt(&quot;08&quot;)和“09”返回0的原因分析及解决办法
2016/05/19 Javascript
使用Vue组件实现一个简单弹窗效果
2018/04/23 Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
2020/04/11 Javascript
vue实现简单图片上传
2020/06/30 Javascript
[01:03]PWL开团时刻DAY6——别打我
2020/11/05 DOTA
Python 字典dict使用介绍
2014/11/30 Python
python制作小说爬虫实录
2017/08/14 Python
TensorFlow利用saver保存和提取参数的实例
2018/07/26 Python
pytorch使用指定GPU训练的实例
2019/08/19 Python
HTML5 拖拽批量上传文件的示例代码
2018/03/28 HTML / CSS
乐高积木玩具美国官网:LEGO Shop US
2016/09/16 全球购物
为娇小女性量身打造:Petite Studio
2018/11/01 全球购物
幼教个人求职信范文
2013/12/02 职场文书
物业管理计划书
2014/01/10 职场文书
个人求职自荐信范文
2015/03/06 职场文书
2015年十一国庆节演讲稿
2015/03/20 职场文书
培训通知书模板
2015/04/17 职场文书
求职意向书范本
2015/05/11 职场文书
2015小学教师年度考核工作总结
2015/05/12 职场文书
防溺水主题班会教案
2015/08/12 职场文书
2019企业给员工的慰问信
2019/06/24 职场文书
小程序后台PHP版本部署运行 LNMP+WNMP
2021/04/01 Servers
Django实现聊天机器人
2021/05/31 Python
一次项目中Thinkphp绕过禁用函数的实战记录
2021/11/17 PHP
SQL Server2019安装的详细步骤实战记录(亲测可用)
2022/06/10 SQL Server