原生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 相关文章推荐
网页和浏览器兼容性问题汇总(draft1)
Jun 01 Javascript
jQuery 树形结构的选择器
Feb 15 Javascript
jquery 仿QQ校友的DIV模拟窗口效果源码
Mar 24 Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
Mar 13 Javascript
JS简单测试循环运行时间的方法
Sep 04 Javascript
AJAX和jQuery动态加载数据的实现方法
Dec 05 Javascript
JQuery实现动态操作表格
Jan 11 Javascript
js简易版购物车功能
Jun 17 Javascript
详解VUE中v-bind的基本用法
Jul 13 Javascript
微信小程序tabBar模板用法实例分析【附demo源码下载】
Nov 28 Javascript
详解几十行代码实现一个vue的状态管理
Jan 28 Javascript
在layer弹层layer.prompt中,修改placeholder的实现方法
Sep 27 Javascript
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小偷的核心程序
2007/04/09 PHP
解析crontab php自动运行的方法
2013/06/24 PHP
php随机获取金山词霸每日一句的方法
2015/07/09 PHP
PC端微信扫码支付成功之后自动跳转php版代码
2017/07/07 PHP
php实现微信模板消息推送
2018/03/30 PHP
thinkPHP框架自动填充原理与用法分析
2018/04/03 PHP
Firefox 无法获取cssRules 的解决办法
2006/10/11 Javascript
关于javascript event flow 的一个bug详解
2013/09/17 Javascript
jQuery.holdReady()使用方法
2014/05/20 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
2015/01/21 Javascript
vuejs动态组件给子组件传递数据的方法详解
2016/09/09 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
2016/10/03 Javascript
js 轮播效果实例分享
2016/12/28 Javascript
详解webpack2+node+react+babel实现热加载(hmr)
2017/08/24 Javascript
使用DataTable插件实现异步加载数据
2017/11/19 Javascript
详解extract-text-webpack-plugin 的使用及安装
2018/06/12 Javascript
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
2019/05/22 Javascript
JS页面获取 session 值,作用域和闭包学习笔记
2019/10/16 Javascript
OpenLayers3实现地图显示功能
2020/09/25 Javascript
phpsir 开发 一个检测百度关键字网站排名的python 程序
2009/09/17 Python
Python连接PostgreSQL数据库的方法
2016/11/28 Python
python使用arcpy.mapping模块批量出图
2017/03/06 Python
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
对pytorch中的梯度更新方法详解
2019/08/20 Python
利用python计算时间差(返回天数)
2019/09/07 Python
Python通过2种方法输出带颜色字体
2020/03/02 Python
python matplotlib绘制三维图的示例
2020/09/24 Python
Python与C/C++的相互调用案例
2021/03/04 Python
阿迪达斯意大利在线商店:adidas意大利
2016/09/19 全球购物
One.com挪威:北欧成长最快的网络托管公司
2016/11/19 全球购物
介绍一下MYSQL常用的优化技巧
2012/10/25 面试题
和谐拯救危机观后感
2015/06/15 职场文书
2015年小学实验室工作总结
2015/07/28 职场文书
QT与javascript交互数据的实现
2021/05/26 Javascript
python基础之类属性和实例属性
2021/10/24 Python
golang生成vcf通讯录格式文件详情
2022/03/25 Golang