原生js写的放大镜效果
发布时间:2024-04-30 08:51:13
标签:放大镜
我的大体思路是:时时监听鼠标的坐标,当鼠标移动时,透明层随着鼠标移动,大图片相对透明层的移动而移动。不废话了,看代码。
<!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>
0
投稿
猜你喜欢
- 本文实例为大家分享了python创建tcp服务端和客户端的具体代码,供大家参考,具体内容如下1.服务端serverfrom socket i
- 一、前言forEach和map是数组的两个方法,作用都是遍历数组。在vue项目的处理数据中经常会用到,这里介绍一下两者的区别和具体用法示例。
- 本文实例讲述了Python PyQt5实现的简易计算器功能。分享给大家供大家参考,具体如下:这里剩下计算函数(self.calculator
- 在编写自动化测试用例的时候,每次登录都需要输入验证码,后来想把让python自己识别图片里的验证码,不需要自己手动登陆,所以查了一下识别功能
- 1. Python的文件类型1. 源代码--直接由Python解析vi 1.py #!/usr/bin/pythonprint 'h
- 环境:python2.7+django1.91、先下载django-sutipip install django-suit2、配置项目打开s
- github主页导入:>>> from fuzzywuzzy import fuzz>>> from f
- 多元函数拟合。如 电视机和收音机价格多销售额的影响,此时自变量有两个。python 解法:import numpy as npimport
- SSI是英文Server Side Includes的缩写,翻译成中文就是服务器端包含的意思。从技术角度上说,SSI就是在HTML文件中,可
- REPLACE的运行与INSERT很相似。只有一点例外,假如表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE索引的新记录具
- 如下所示:# 访问百度,模拟自动输入搜索# 代码中引入selenium版本为:3.4.3# 通过Chrom浏览器访问发起请求# Chrom版
- 上篇文章讲了js中的传值和传址 和 函数的作用域.这章我们来探讨js中的变量,表达式,和运算符 还有一些 js 语句。升级中……1, 表达式
- 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过
- 在一个update和insert操作频繁的表中,少量数据测试的时候运行良好,在实际运营中,因数据量比较大(21万条记录),会出现死锁现象,用
- 数组:复制传递(不要按照c/c++的方式去理解,c/c++中数组是引用传递),定长切片:引用传递,底层实现是3个字段 array(数组) +
- N久没有开始写博客了,总觉得要随便记点东西,岁月蹉跎,曾经搞得一些东西、技术、工具,说丢也就丢了,点点滴滴还是要记录一下吧。。。在windo
- 页面上有些重要内容需要提醒客户,可采用的方法有很多。提醒用户关注某一区域(div),可以给该div加上边框闪烁的效果,达到吸引用户眼球的效果
- 使用matplotlib创建百分比堆积柱状图的思路与堆积柱状图类似,只不过bottom参数累计的不是数值而是百分比,因此,需要事先计算每组柱
- 前面已经介绍过如何创建scrapy的项目,和对项目中的文件功能的基本介绍。这次,就来谈谈使用的基本流程:(1)首先第一点,打开终端,找到自己
- 享元模式(Flyweight Pattern)是什么享元模式是一种结构型模式,它通过共享对象来减少系统中的对象数量,从而降低了内存的使用和系