javascript放大镜效果的简单实现


Posted in Javascript onDecember 09, 2013

这个效果并不难,要点是位置和比例设置,

捕获鼠标位置、判断鼠标位置区域、还有onmouseover事件、onmousemove事件、onmouseout事件

设置显示大图的比例,小图上显示的切图比例都要弄准确点,最好是2倍啦,4倍啦。

主要注意宽度,我这里的图片m.jpg是1440X900的....

<!DOCTYPE html PUBLIC "-//W3C//DTD Xhtml 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>放大镜效果</title>
<style type="text/css">
*{margin:0;padding:0;}
#smallimg{width:360px;float:left;position:relative;border:1px solid red;}
#smallimg img{ width:360px;}
#bigimg{float:left;width:400px;height:400px;margin-left:40px;border:1px solid #ccc;display:none;}
#showimg{width:100px;height:100px;background:#fff;cursor:move; position:absolute;border:1px solid #666;opacity:0.5;filter:alpha(opacity=50);display:none;}
</style>
</head>
<body>
<div id="smallimg">
 <img src="jq/m.jpg" alt=""/>
 <div id="showimg"> </div>
</div>
<div id="bigimg"> </div>

<script type="text/javascript">
var $=function(id){return typeof id=="string"?document.getElementById(id):id}
var smallimg = $("smallimg");
var showimg = $("showimg");//滤镜图片
var bigimg = $("bigimg");
var small_url = smallimg.getElementsByTagName("img")[0].getAttribute("src");
var show_half = maxWidth = maxHeight = 0;
smallimg.onmouseover = function(){
 showimg.style.display = "block";
 bigimg.style.display = "inline";
 show_half = showimg.offsetHeight/2;
 maxWidth = smallimg.clientWidth - showimg.offsetWidth;
 maxHeight = smallimg.clientHeight - showimg.offsetHeight;
 //上面两个变量指明showimg允许活动的区域
};
smallimg.onmousemove = function(e){
 var e=window.event?window.event:e;
 var num=bigimg.clientWidth/showimg.clientWidth;
 var Top = e.clientY - smallimg.offsetTop - show_half;
 var Left = e.clientX - smallimg.offsetLeft - show_half;
 //获取当前移动的showimg位置 计算方法是 鼠标坐标 - 最外面容器的坐标 - 盒子的宽(高)的/2 
 Top = Top<0?0:Top>maxHeight?maxHeight:Top;
 Left = Left<0?0:Left>maxWidth?maxWidth:Left;
 showimg.style.top = Top + "px";
 showimg.style.left = Left + "px";
 bigimg.style.background = "url("+small_url+") -"+Left*num+"px -"+Top*num+"px no-repeat";
};
smallimg.onmouseout = function(){
 showimg.style.display="none";
 bigimg.style.background ="";
 bigimg.style.display="none"
};
</script>
</body>
</html>
Javascript 相关文章推荐
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
Jul 25 Javascript
数组Array进行原型prototype扩展后带来的for in遍历问题
Feb 07 Javascript
JavaScript高级程序设计 错误处理与调试学习笔记
Sep 10 Javascript
jquery实现metro效果示例代码
Sep 06 Javascript
在myeclipse中如何加入jquery代码提示功能
Jun 03 Javascript
jquery 为a标签绑定click事件示例代码
Jun 23 Javascript
JavaScript实现级联菜单的方法
Jun 29 Javascript
JavaScript获取键盘按键的键码(参照表)
Jan 10 Javascript
AngularJS的ng-repeat指令与scope继承关系实例详解
Jan 21 Javascript
jQuery插件echarts实现的循环生成图效果示例【附demo源码下载】
Mar 04 Javascript
Vue Cli与BootStrap结合实现表格分页功能
Aug 18 Javascript
详解使用VueJS开发项目中的兼容问题
Aug 02 Javascript
javascript贪吃蛇完整版(源码)
Dec 09 #Javascript
关于js内存泄露的一个好例子
Dec 09 #Javascript
JS连连看源码完美注释版(推荐)
Dec 09 #Javascript
解析Javascript中难以理解的11个问题
Dec 09 #Javascript
深入理解Javascript作用域与变量提升
Dec 09 #Javascript
Javascript全局变量var与不var的区别深入解析
Dec 09 #Javascript
jquery div拖动效果示例代码
Dec 08 #Javascript
You might like
使用PHP socke 向指定页面提交数据
2008/07/23 PHP
rephactor 优秀的PHP的重构工具
2011/06/09 PHP
基于php的CMS中展示文章类实例分析
2015/06/18 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
2015/11/27 PHP
我整理的PHP 7.0主要新特性
2016/01/07 PHP
php根据数据id自动生成编号的实现方法
2016/10/16 PHP
PHP工厂模式简单实现方法示例
2018/05/23 PHP
JavaScript中String和StringBuffer的速度之争
2010/04/01 Javascript
JQuery扩展插件Validate—4设置错误提示的样式
2011/09/05 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
2015/03/30 Javascript
D3.js实现柱状图的方法详解
2016/09/21 Javascript
JavaScript-定时器0~9抽奖系统详解(代码)
2017/08/16 Javascript
EasyUI Tree树组件无限循环的解决方法
2017/09/27 Javascript
vue左右侧联动滚动的实现代码
2018/06/06 Javascript
jQuery实现基本隐藏与显示效果的方法详解
2018/09/05 jQuery
详解nuxt路由鉴权(express模板)
2018/11/21 Javascript
浏览器事件循环与vue nextTicket的实现
2019/04/16 Javascript
解决vue打包后vendor.js文件过大问题
2019/07/03 Javascript
Python中的Matplotlib模块入门教程
2015/04/15 Python
详解Python异常处理中的Finally else的功能
2017/12/29 Python
Python 中Django安装和使用教程详解
2019/07/03 Python
如何基于python实现归一化处理
2020/01/20 Python
Jupyter notebook快速入门教程(推荐)
2020/05/18 Python
Python3批量创建Crowd用户并分配组
2020/05/20 Python
python pyg2plot的原理知识点总结
2021/02/28 Python
Pytorch之扩充tensor的操作
2021/03/04 Python
使用HTML5捕捉音频与视频信息概述及实例
2018/08/22 HTML / CSS
详解canvas多边形(蜘蛛图)的画法示例
2018/01/29 HTML / CSS
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
如何提高JDBC的性能
2013/04/30 面试题
abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
2012/10/15 面试题
夜大毕业生自我评价分享
2013/11/10 职场文书
会计岗位职责范本
2014/03/07 职场文书
3.15国际消费者权益日主题活动活动总结
2014/03/16 职场文书
爸爸的三轮车观后感
2015/06/16 职场文书
mysql insert 存在即不插入语法说明
2022/03/25 MySQL