原生js写的放大镜效果


Posted in Javascript onAugust 22, 2012

我的大体思路是:时时监听鼠标的坐标,当鼠标移动时,透明层随着鼠标移动,大图片相对透明层的移动而移动。不废话了,看代码。

<!DOCTYPE HTML> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>放大镜</title> 
<meta name="Keywords" content=""> 
<meta name="Description" content=""> 
<style type="text/css"> 
/*重置{*/ 
html{color:#000;background:#fff;} 
body,div{padding:0;margin:0;} 
img{border:none;} 
/*}重置*/ 
.outer{width:200px;height:150px;position:relative;margin:20px auto;} 
.inner{width:80px;height:60px;background:#f55;position:absolute;opacity:0.5;filter:alpha(opacity=50);left:0;top:0;cursor:pointer;} 
.aa{width:320px;height:240px;position:relative;border:1px red solid;margin:20px auto;overflow:hidden;} 
.imgs{position:absolute;} 
.outer img{width:200px;height:150px;} 
</style> 
</head> 
<body> 
<div> 
<div class="outer" id="outer"> 
<img src="images/pobabyb.gif" alt="pobaby小图"/> 
<div class="inner" id="inner"></div> 
</div> 
<div class="aa" id="aa"> 
<div class="imgs" id="imgs" ><img src="images/pobabyb.gif" alt="pobaby大图"/></div> 
</div> 
</div> 
<script type="text/javascript"> 
var outer=document.getElementById("outer"); 
var inner=document.getElementById("inner"); 
var aa=document.getElementById("aa"); 
var imgs=document.getElementById("imgs"); 
var x,y,n=false; 
inner.onmousedown=test1;//如果把inner改为document,鼠标在窗口任意位置点击,图片都会跟随 
document.onmousemove=test2;//document如果改为outer,鼠标在outer内才起作用 
document.onmouseup=test3; 
function test1(event){//鼠标按下时方法 
var event=event || window.event;//调试兼容,各个浏览器认识event有差别. 
n=true;//当n=true(n的值可随便设定)时,假定为鼠标按下的事件 
x=event.clientX-inner.offsetLeft;//鼠标在透明层的相对横坐标=鼠标坐标-方块左边距 
y=event.clientY-inner.offsetTop;//鼠标在透明层的相对纵坐标=鼠标坐标-方块上边距 
} 
function test2(event){//鼠标移动时方法 
var event=event || window.event; 
if(n==true){ 
////////鼠标移动范围 
inner.style.left=event.clientX-x+"px"; 
inner.style.top=event.clientY-y+"px"; 
////////图片移动范围 
imgs.style.left=-4*parseInt(inner.style.left)+"px"; 
imgs.style.top=-4*parseInt(inner.style.top)+"px"; 
////////////////////////////限定鼠标移动的范围 
if(parseInt(inner.style.left)<0){ 
inner.style.left=0+"px"; 
} 
if(parseInt(inner.style.top)<0){ 
inner.style.top=0+"px"; 
} 
if(parseInt(inner.style.left)>outer.clientWidth-inner.clientWidth){ 
inner.style.left=outer.clientWidth-inner.clientWidth+"px"; 
} 
if(parseInt(inner.style.top)>outer.clientHeight-inner.clientHeight){ 
inner.style.top=outer.clientHeight-inner.clientHeight+"px"; 
} 
//////////////////////////////限定图片移动的范围 
if(parseInt(imgs.style.left)>0){ 
imgs.style.left=0+"px"; 
} 
if(parseInt(imgs.style.top)>0){ 
imgs.style.top=0+"px"; 
} 
if(parseInt(imgs.style.left)<-4*(outer.clientWidth-inner.clientWidth)){ 
imgs.style.left=-4*parseInt(outer.clientWidth-inner.clientWidth)+"px"; 
} 
if(parseInt(imgs.style.top)<-4*(outer.clientHeight-inner.clientHeight)){ 
imgs.style.top=-4*parseInt(outer.clientHeight-inner.clientHeight)+"px"; 
} 
} 
} 
function test3(){//鼠标松开时方法 
n=false; 
} 
</script> 
</body> 
</html>

原生js写的放大镜效果
Javascript 相关文章推荐
JQuery Tips(3) 关于$()包装集内元素的改变
Dec 14 Javascript
读jQuery之三(构建选择器)
Jun 11 Javascript
jQuery中验证表单提交方式及序列化表单内容的实现
Jan 06 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
Oct 12 Javascript
angular源码学习第一篇 setupModuleLoader方法
Oct 20 Javascript
JS两种类型的表单提交方法实例分析
Nov 28 Javascript
8 行 Node.js 代码实现代理服务器
Dec 05 Javascript
详解闭包解决jQuery中AJAX的外部变量问题
Feb 22 Javascript
JavaScript使用Ajax上传文件的示例代码
Aug 10 Javascript
vue 指定组件缓存实例详解
Apr 01 Javascript
15 分钟掌握vue-next响应式原理
Oct 13 Javascript
jquery制作的移动端购物车效果完整示例
Feb 24 jQuery
window.open不被拦截的实现代码
Aug 22 #Javascript
EASYUI TREEGRID异步加载数据实现方法
Aug 22 #Javascript
网页打开自动最大化的js代码
Aug 22 #Javascript
精心挑选的12款优秀的基于jQuery的手风琴效果插件和教程
Aug 22 #Javascript
eval的两组性能测试数据
Aug 17 #Javascript
javascript五图轮播切换实用版
Aug 17 #Javascript
JS左右无缝滚动(一般方法+面向对象方法)
Aug 17 #Javascript
You might like
PHP中file_exists函数不支持中文名的解决方法
2014/07/26 PHP
PHP函数extension_loaded()用法实例
2015/01/19 PHP
typecho插件编写教程(三):保存配置
2015/05/28 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
2017/03/31 PHP
js 可拖动列表实现代码
2011/12/13 Javascript
javascript 树形导航菜单实例代码
2013/08/13 Javascript
js判断字符是否是汉字的两种方法小结
2014/01/03 Javascript
jQuery实现强制cookie过期方法汇总
2015/05/22 Javascript
解析Node.js异常处理中domain模块的使用方法
2016/02/16 Javascript
浅谈js中的引用和复制(传值和传址)
2016/09/18 Javascript
vue.js学习之UI组件开发教程
2017/07/03 Javascript
vue+element-ui集成随机验证码+用户名+密码的form表单验证功能
2018/08/05 Javascript
node.js之基础加密算法模块crypto详解
2018/09/11 Javascript
探秘vue-rx 2.0(推荐)
2018/09/21 Javascript
使用react render props实现倒计时的示例代码
2018/12/06 Javascript
Vue项目中使用jquery的简单方法
2019/05/16 jQuery
浅谈layui里的上传控件问题
2019/09/26 Javascript
JavaScript实现打砖块游戏
2020/02/25 Javascript
[36:16]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.19
2020/12/24 DOTA
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
2015/02/04 Python
python比较2个xml内容的方法
2015/05/11 Python
python使用pymysql实现操作mysql
2016/09/13 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
2018/10/11 Python
ipython和python区别详解
2019/06/26 Python
django rest framework 过滤时间操作
2020/07/12 Python
python 如何区分return和yield
2020/09/22 Python
详解如何将 Canvas 绘制过程转为视频
2021/01/25 HTML / CSS
Nike意大利官网:Nike.com IT
2020/01/19 全球购物
毕业生自我鉴定
2013/11/05 职场文书
行政前台岗位职责
2013/12/04 职场文书
旅游管理专业大学生职业规划书
2014/02/27 职场文书
化学系大学生自荐信范文
2014/03/01 职场文书
爱国卫生月活动总结范文
2014/04/25 职场文书
医德考评自我评价
2014/09/14 职场文书
向国旗敬礼活动总结
2014/09/27 职场文书
2014年精神文明工作总结
2014/12/23 职场文书