尝试动手制作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 相关文章推荐
JavaScript 未结束的字符串常量常见解决方法
Jan 24 Javascript
JavaScript基本编码模式小结
May 23 Javascript
js实现图片放大缩小功能后进行复杂排序的方法
Nov 08 Javascript
javascript 通用loading动画效果实例代码
Jan 14 Javascript
基于jquery实现轮播焦点图插件
Mar 31 Javascript
使用Angular缓存父页面数据的方法
Jan 03 Javascript
Avalonjs 实现简单购物车功能(实例代码)
Feb 07 Javascript
深入浅析vue组件间事件传递
Dec 29 Javascript
基于vue cli 通过命令行传参实现多环境配置
Jul 12 Javascript
微信小程序开发问题之wx.previewImage
Dec 25 Javascript
全面解析Vue中的$nextTick
Dec 24 Vue.js
javascript代码简写的几种常用方式汇总
Aug 23 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 APC缓存配置、使用详解
2014/03/06 PHP
实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
2014/08/20 PHP
Yii2 RESTful中api的使用及开发实例详解
2016/07/06 PHP
浅谈PHP SHA1withRSA加密生成签名及验签
2019/03/18 PHP
IE6下js通过css隐藏select的一个bug
2010/08/16 Javascript
鼠标事件延时切换插件
2011/03/12 Javascript
固定网页背景图同时保持图片比例的思路代码
2013/08/15 Javascript
node.js中的http.response.end方法使用说明
2014/12/14 Javascript
JavaScript获取一个范围内日期的方法
2015/04/24 Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
2015/09/23 Javascript
Node.js开启Https的实践详解
2016/10/25 Javascript
React快速入门教程
2017/01/17 Javascript
ajax与json 获取数据并在前台使用简单实例
2017/01/19 Javascript
从零学习node.js之详解异步控制工具async(八)
2017/02/27 Javascript
jquery实现折叠菜单效果【推荐】
2017/03/08 Javascript
Angular.js中控制器之间的传值详解
2017/04/24 Javascript
基于vue 开发中出现警告问题去除方法
2018/01/25 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
Vue 无限滚动加载指令实现方法
2019/05/28 Javascript
基于jquery ajax的多文件上传进度条过程解析
2019/09/11 jQuery
[01:18:36]LGD vs VP Supermajor 败者组决赛 BO3 第一场 6.10
2018/07/04 DOTA
Python中的多重装饰器
2015/04/11 Python
python搭建服务器实现两个Android客户端间收发消息
2018/04/12 Python
Flask框架学习笔记之消息提示与异常处理操作详解
2019/08/15 Python
如何把外网python虚拟环境迁移到内网
2020/05/18 Python
关于python3.9安装wordcloud出错的问题及解决办法
2020/11/02 Python
Python 用__new__方法实现单例的操作
2020/12/11 Python
详解HTML5 Canvas绘制不规则图形时的非零环绕原则
2016/03/21 HTML / CSS
美国最大的珠宝首饰网上商城:Jewelry.com
2016/07/22 全球购物
Chantelle仙黛尔内衣美国官网:法国第一品牌内衣
2018/07/26 全球购物
俄罗斯有趣和原创礼物网上商店:MagicMag
2019/08/01 全球购物
管理科学大学生求职信
2013/11/13 职场文书
市级文明单位申报材料
2014/05/07 职场文书
使用Ajax实现无刷新上传文件
2022/04/12 Javascript
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
2022/04/21 Python
Golang 入门 之url 包
2022/05/04 Golang