原生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 相关文章推荐
修改jQuery.Autocomplete插件 支持中文输入法 避免TAB、ENTER键失效、导致表单提交
Oct 11 Javascript
js禁止页面复制功能禁用页面右键菜单示例代码
Aug 29 Javascript
细说javascript函数从函数的构成开始
Aug 29 Javascript
js判断浏览器类型为ie6时不执行
Jun 15 Javascript
jQuery页面刷新(局部、全部)问题分析
Jan 09 Javascript
JavaScript 数组中最大最小值
Jun 05 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
Mar 21 Javascript
vue页面使用阿里oss上传功能的实例(二)
Aug 09 Javascript
vue.js的computed,filter,get,set的用法及区别详解
Mar 08 Javascript
layui点击按钮添加可编辑的一行方法
Aug 15 Javascript
Openlayers实现扩散的动态点(水纹效果)
Aug 17 Javascript
Vue实现tab导航栏并支持左右滑动功能
Jun 28 Vue.js
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
thinkphp5框架前后端分离项目实现分页功能的方法分析
2019/10/08 PHP
获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[
2006/12/22 Javascript
javascript入门·对象属性方法大总结
2007/10/01 Javascript
推荐自用 Javascript 缩图函数 (onDOMLoaded)……
2007/10/23 Javascript
用JQuery 实现AJAX加载XML并解析的脚本
2009/07/25 Javascript
jquery dialog键盘事件代码
2010/08/01 Javascript
IE8的JavaScript点击事件(onclick)不兼容的解决方法
2013/11/22 Javascript
基于jQuery通过jQuery.form.js插件实现异步上传
2015/12/13 Javascript
jQuery添加和删除指定标签的方法
2015/12/16 Javascript
JS获取当前使用的浏览器名字以及版本号实现方法
2016/08/19 Javascript
关于bootstrap日期转化,bootstrap-editable的简单使用,bootstrap-fileinput的使用详解
2017/05/12 Javascript
jquery Form轻松实现文件上传
2017/05/24 jQuery
详解Vue.use自定义自己的全局组件
2017/06/14 Javascript
jquery在vue脚手架中的使用方式示例
2017/08/29 jQuery
js中this对象用法分析
2018/01/05 Javascript
Vue实现点击时间获取时间段查询功能
2020/08/21 Javascript
vue项目部署上线遇到的问题及解决方法
2018/06/10 Javascript
Vue使用.sync 实现父子组件的双向绑定数据问题
2019/04/04 Javascript
JS实现简易日历效果
2021/01/25 Javascript
Python的mysql数据库的更新如何实现
2017/07/31 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
2019/01/22 Python
Python使用post及get方式提交数据的实例
2019/01/24 Python
500行代码使用python写个微信小游戏飞机大战游戏
2019/10/16 Python
关于Python-faker的函数效果一览
2019/11/28 Python
jupyternotebook 撤销删除的操作方式
2020/04/17 Python
Python做图像处理及视频音频文件分离和合成功能
2020/11/24 Python
使用css3做0.5px的细线的示例代码
2018/01/18 HTML / CSS
canvas绘制视频封面的方法
2018/02/05 HTML / CSS
Shoes For Crews法国官网:美国领先的防滑鞋设计和制造商
2018/01/01 全球购物
帕克纽约:PARKER NY
2018/12/09 全球购物
创业计划书如何吸引他人眼球
2014/01/10 职场文书
小学运动会入场式解说词
2014/02/18 职场文书
大班开学家长寄语
2014/04/04 职场文书
公司聚餐通知
2015/04/22 职场文书
webpack的移动端适配方案小结
2021/07/25 Javascript
JavaScript 与 TypeScript之间的联系
2021/11/27 Javascript