放大镜js实现效果
今天我想写一个放大镜因为毕竟在做网页的时候,特别是一些电商的详情页放大镜是必不可少的.什么都不说了上代码
1,html代码
<div id='small'><img src="2.jpg" alt="" width='100%'><div id='move'></div></div>
<ul id="images">
<li><img class="imgs" src="2.jpg" alt="" width="100%"></li>
<li><img class="imgs" src="3.jpg" alt="" width="100%"></li>
<li><img class="imgs" src="4.jpg" alt="" width="100%"></li> </ul>
<div id='big'><img src="2.jpg" alt="" id='img'></div>
2,css代码
<style>
*{margin:;padding:;list-style: none; }
#small{width:400px;height:400px;border:1px solid black;position: absolute;left:50px;top:50px;}
#move{width:100px;height:100px;position:absolute;left:;top:;background: url(bg.png);display: none;}
#images{position:absolute;top:460px;left:60px;width:1000px;height:100px;}
#images li { width: 80px; height: 80px; float: left; margin-right: 10px; border: solid 1px #333;padding: 4px;}
#big{width:400px;height:400px;border:1px solid black;position:absolute;left:500px;top:50px;overflow:hidden;display:none;}
#big #img{position: absolute;left:-100px;}
</style>
3,js代码
<script>
var small = document.getElementById('small');
var big = document.getElementById('big');
var move = document.getElementById('move');
var img = document.getElementById('img') //1 图片替换
var list = images.children;
// console.log(list);
for(var i=0;i<list.length;i++){
list[i].onclick = function (){
var src = this.firstElementChild.src;
//小图大图的图片资源都要替换
small.firstElementChild.src = src;
big.firstElementChild.src = src;
}
}
//2 鼠标移动
small.onmousemove = function(ent){
//大盒子显示 放大镜显示
big.style.display = "block";
move.style.display = "block"; //获得鼠标
var ent = ent || window.event; //放大镜不能出盒子范围
var minX = 0;
var maxX = small.offsetWidth-move.offsetWidth;
var minY = 0;
var maxY = small.offsetHeight-move.offsetHeight; if(ent.clientX-move.offsetWidth<minX){//e.pageX
move.style.left ="0px";
}else if(ent.clientX-move.offsetWidth>maxX){//e.pageX
move.style.left =maxX+"px";
}else{
move.style.left = (ent.clientX-move.offsetWidth)+"px";//e.pageX
} if(ent.clientY-move.offsetHeight<minY){//e.pageY
move.style.top ="0px";
}else if(ent.clientY-move.offsetHeight>maxY){//e.pageY
move.style.top =maxY+"px";
}else{
move.style.top = (ent.clientY-move.offsetHeight)+"px";//e.pageY
} //大盒子随鼠标的移动位置
big.scrollTop = (ent.clientY-small.offsetTop)*2.5-200;//e.pageY
big.scrollLeft = (ent.clientX-small.offsetLeft)*2.5-250;//e.pageX //放大镜的位置 (会出盒子范围)
// move.style.left = (ent.clientX-move.offsetWidth)+"px";
// move.style.top = (ent.clientY-move.offsetHeight)+"px"; //添加鼠标样式
small.style.cursor = "move"; }
//3 鼠标移出
small.onmouseout = function(){
//大盒子\放大镜消失
big.style.display = "none";
move.style.display = "none";
//恢复默认样式
small.style.cursor = "default";
}
</script>
原理:
只要我们算放大镜的位置,其实放大镜并不难 在这里要特别注意一点,e.clientX/clientY和e.pageX/pageY两者之间的区别,不然在做放大镜的时候会出现bug.
好了今天放大镜写到这里明天我们写jQuery放大镜.
放大镜js实现效果的更多相关文章
- JS原生效果瀑布流布局的实现(一)
JS原生效果 实现: HTML页面布局: <!DOCTYPE html> <html> <head> <meta charset="utf-8&qu ...
- js sleep效果
js sleep效果 s = setInterval(function(){ //需要执行的函数 alert("我延迟了2秒弹出"); },2000); 并不是每2秒执行一次,而是 ...
- JS打字效果的动态菜单代码分享
这篇文章主要介绍了JS打字效果的动态菜单,推荐给大家,有需要的小伙伴可以参考下. 这是一款基于javascript实现的打字效果的动态菜单特效代码,分享给大家学习学习. 小提示:浏览器中如果不能正常运 ...
- js 动画效果实现
1. 实现方式 - 应用场景 自己写 - 简单的.不用 jq 的项目 jq - 普通动画 成熟插件 - 复杂动画 2. 相关文章 JavaScript基于时间的动画算法 九种原生js动画效果 Twee ...
- 页面倒计时跳转页面效果,js倒计时效果
页面倒计时跳转页面效果,js倒计时效果 >>>>>>>>>>>>>>>>>>>> ...
- 非常不错的一个JS分页效果代码
这里分享一个不错的js分页代码. 代码中cpage是页面计数,应为全局变量,可以随处调用它: totalpage是总页数. 与asp分页代码很类似,也是先取得记录总数,然后实现分页,基本的分页思路与原 ...
- 纯js倒计时效果(交流加群:452892873)(本群每天都更新学习资料)
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- js 技巧 (十)广告JS代码效果大全 【3】
3.[允许关闭] 与前面两个代码不同的是,广告图下方增加了一个图片按纽,允许访客点击关闭广告图片,下面文本框中就是实现效果所需代码: var delta=0.015; var coll ...
- js 技巧 (十)广告JS代码效果大全 【1】
广告JS代码效果大全 1.[普通效果] 现在很多网站广告做的如火如荼,现在我就来介绍一下常见的对联浮动广告效果的代码使用方法,介绍的这种效果,在1024*768分辨率下正常显示,在800*60 ...
随机推荐
- 下载频道--IT资源关东煮第二期[申明:来源于网络]
下载频道–IT资源关东煮第二期[申明:来源于网络] 地址:http://geek.csdn.net/news/detail/129509?ref=myread
- Codeforces 1100 - A/B/C/D/E/F - (Undone)
链接:https://codeforces.com/contest/1100 A - Roman and Browser - [暴力枚举] 题意:浏览器有 $n$ 个网页,编号 $1 \sim n$, ...
- [Day13]static、final、匿名对象、内部类、包、修饰符、代码块
1.final-最终 (1)final的特点 final修饰类不可以被继承,但是可以继承其他类 final修饰的方法不可以被覆盖,但父类中没有final修饰方法,子类覆盖后可以加final final ...
- 转:解决tomcat服务器跨域问题
原文地址: 解决tomcat服务器跨域请求问题 注:还未测试 在tomcat 的web.xml 配置文件中加入如下配置过滤器 (如web.xml中有多个filter时要把下面配置放在最前端) < ...
- python摸爬滚打之day022----模块(序列化操作)
1.pickle 可以将我们python中的任意数据类型转化成bytes并写入到文件中. 同样也可以把文件中写好的bytes转换回我们python的数据. pickle可以直接序列化对象. clas ...
- openstack--部暑
##1.Centos7环境准备-- openstack pike ##1.Centos7环境准备-- openstack pike [https://blog.csdn.net/shiyu115775 ...
- Emmet.vim 教程
Emmet.vim 教程 May 5, 2012 目录 1 下载 Emmet.vim 2 安装 Emmet.vim 3 使用 Emmet.vim 4 余话 Emmet 项目原先叫 Zen Coding ...
- SpringMVC整合mybatis基于纯注解配置
Mybatis整合Spring配置 第一部分:配置Spring框架 配置SpringMVC的步骤 配置流程图 导入包(哪些包,基本包5个,1日志依赖包,2webmvc支持包)SpringMVC配置 & ...
- es6阮一峰读后感
不经意间看了你一眼(阮一峰的es6读后感)我自己常用的 字符串篇:ES6 为字符串添加了遍历器接口(详见<Iterator>一章),使得字符串可以被for...of循环遍历.只要有遍历器接 ...
- python将字符串转换成整型
将字符串转换成,整型,从字面理解很容易让人误会. 比如,要把这个"abcabc"转换成整型,臣妾做不到啊.除成转成ascii. 我们所说字符串转成整型是这样的. s = " ...