尝试动手制作javascript放大镜效果


Posted in Javascript onDecember 25, 2015

本文实例为大家介绍了基于javascript实现放大镜效果的原理和代码,分享给大家供大家参考,具体内容如下:

原理:

A:放大镜   B:小图片

C:大图片可视区域

D:大图片

鼠标的位置应该在放大镜的中央,所以鼠标位置为:

clientX=A.offsetLeft()+B.offsetLeft+1/2*A.offsetWidth;

clientY=A.offsetTop()+B.offsetTop+1/2*A.offsetHeight;

鼠标移动过程中:放大镜A和大图D是一起随鼠标成比例运动的,因为当放大镜A的右边框移动到与小图B的右边框重合时,大图D也应该移动到了右边框与C的右边框重合的地方,所以,他们的移动比例是:(D.offsetWidth-C.offsetWidth)/(B.offsetWidth-A.offsetWidth)=b/a

尝试动手制作javascript放大镜效果

HTML部分:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>放大镜效果</title>

<style>

*{
margin:0;
padding:0; 
}

#demo{
position: relative;
margin:30px 50px;
width: 1000px;
height: 600px;
border: 1px solid #000;
}

#zhezhao{
position: absolute;
z-index:2;
background:red;
width:402px;
height:402px;
left: 20px;
top:20px;
opacity: 0;
}

#small{
position: absolute;
width:402px;
height:402px;
left: 20px;
top:20px;
border: 1px solid #000;
z-index: 1;
}


#small img{
position: absolute;

}


#big{
position: relative;
top: 20px;
left: 460px;
width:500px;
height:500px;
border: 1px solid #000;
overflow: hidden;
display: none;
z-index: 1;
}


#big img{
position: absolute;

}


#glass{
position: absolute;
width:100px;
height: 100px;
opacity: 0.3;
background:orange;
display: none;
}

</style>


</head>


<body>
<div id='demo'>
<div id='zhezhao'> </div> 
<!-- 在ie浏览器中,当鼠标在放大镜上是,浏览器并不认为鼠标同样在小图的div上,所以加个遮罩层 兼容ie-->


<div id='small'> 
<img src='images/small.png' alt=''>
<div id='glass'></div>
</div>
<div id='big'>
<img src='images/big.jpg' alt='' >

</div>

</div>



</body>

</html>

js部分:

<script>

window.onload=function(){
var demo =document.getElementById('demo');
var small =document.getElementById('small');
var big =document.getElementById('big');
var glass =document.getElementById('glass')
var image =document.getElementById('big').getElementsByTagName('img')[0];
var zhezhao=document.getElementById('zhezhao');

zhezhao.onmouseover=function(){
glass.style.display='block'
big.style.display='block'
}
zhezhao.onmouseout=function(){
glass.style.display='none'
big.style.display='none'
}

//弄清楚clientX,offsetLeft,left的关系,注意区分
zhezhao.onmousemove=function(ev){
var event=ev
var left=event.clientX-demo.offsetLeft-small.offsetLeft-glass.offsetWidth/2;
var top =event.clientY-demo.offsetTop -small.offsetTop -glass.offsetHeight/2;
if(left<0){
left=0;
}else if(left>(small.offsetWidth-glass.offsetWidth)){
left=small.offsetWidth-glass.offsetWidth
}

if(top<0){
top=0;
}else if(top>(small.offsetHeight- glass.offsetHeight)){
top=small.offsetHeight- glass.offsetHeight
}
glass.style.left =left+'px';
glass.style.top =top+'px';

 

var percent=(image.offsetWidth-big.offsetWidth)/(small.offsetWidth-glass.offsetWidth)

image.style.left=-percent*left+'px'
image.style.top =-percent*top+'px'



}
}

</script>

以上就是本文的全部内容,希望对大家实现javascript放大镜效果有所帮助。

Javascript 相关文章推荐
疯掉了,尽然有js写的操作系统
Apr 23 Javascript
调试Node.JS的辅助工具(NodeWatcher)
Jan 04 Javascript
javascript学习笔记(十七) 检测浏览器插件代码
Jun 20 Javascript
javascript控制在光标位置插入文字适合表情的插入
Jun 09 Javascript
Javascript技术栈中的四种依赖注入详解
Feb 23 Javascript
详解js中Number()、parseInt()和parseFloat()的区别
Dec 20 Javascript
通过jsonp获取json数据实现AJAX跨域请求
Jan 22 Javascript
Vue.js中用webpack合并打包多个组件并实现按需加载
Feb 17 Javascript
Bootstrap表单控件学习使用
Mar 07 Javascript
解决vue-quill-editor上传内容由于图片是base64的导致字符太长的问题
Aug 20 Javascript
Vuerouter的beforeEach与afterEach钩子函数的区别
Dec 26 Javascript
详解CocosCreator消息分发机制
Apr 16 Javascript
js操作cookie保存浏览记录的方法
Dec 25 #Javascript
js实现跨域的多种方法
Dec 25 #Javascript
jquery.cookie.js用法实例详解
Dec 25 #Javascript
理解javascript中try...catch...finally
Dec 25 #Javascript
javascript实现简单加载随机色方块
Dec 25 #Javascript
学习JavaScript鼠标响应事件
Dec 25 #Javascript
理解javascript中DOM事件
Dec 25 #Javascript
You might like
PHP反向代理类代码
2014/08/15 PHP
基于JQuery+PHP编写砸金蛋中奖程序
2015/09/08 PHP
PHP使用http_build_query()构造URL字符串的方法
2016/04/02 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
如何重写Laravel异常处理类详解
2020/12/20 PHP
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
Jquery 绑定时间实现代码
2011/05/03 Javascript
基于jquery的固定表头和列头的代码
2012/05/03 Javascript
jquery可见性过滤选择器使用示例
2013/06/24 Javascript
JavaScript结合Bootstrap仿微信后台多图文界面管理
2016/07/22 Javascript
AngularJS入门教程之Helloworld示例
2016/12/25 Javascript
JS中LocalStorage与SessionStorage五种循序渐进的使用方法
2017/07/12 Javascript
详解JS数据类型的值拷贝函数(深拷贝)
2017/07/13 Javascript
vuejs实现标签选项卡动态更改css样式的方法
2018/05/31 Javascript
关于vue编译版本引入的问题的解决
2018/09/17 Javascript
layer弹出子iframe层父子页面传值的实现方法
2018/11/22 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
js 递归json树实现根据子id查父id的方法分析
2019/11/08 Javascript
Vue项目中数据的深度监听或对象属性的监听实例
2020/07/17 Javascript
解决vue单页面应用打包后相对路径、绝对路径相关问题
2020/08/14 Javascript
element-ui和vue表单(对话框)验证提示语(残留)清除操作
2020/09/11 Javascript
vue实践---根据不同环境,自动转换请求的url地址操作
2020/09/21 Javascript
python中pycurl库的用法实例
2014/09/30 Python
理解Python中的With语句
2016/03/18 Python
Python基于回溯法子集树模板解决取物搭配问题实例
2017/09/02 Python
pytorch + visdom 处理简单分类问题的示例
2018/06/04 Python
浅谈tensorflow中几个随机函数的用法
2018/07/27 Python
python将数组n等分的实例
2019/12/02 Python
Python操作Excel的学习笔记
2021/02/18 Python
Html5饼图绘制实现统计图的方法
2020/08/05 HTML / CSS
HomeAway英国:全球领先的度假租赁在线市场
2020/02/03 全球购物
下列程序在32位linux或unix中的结果是什么
2015/01/26 面试题
学生评语集锦
2015/01/04 职场文书
邮政营业员岗位职责
2015/04/14 职场文书
Nginx安装完成没有生成sbin目录的解决方法
2021/03/31 Servers
Python面向对象之内置函数相关知识总结
2021/06/24 Python