放大镜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 ...
随机推荐
- svn和NetBeans一起使用造成svn老是死锁, database is locked
其实我一直没发现,又一次我以为需要写些前端吧NetBeans关了,使用HBuilder写vue,因为内存只有8G,乱七八糟的一些东西一开,只剩20%左右,我就把 NetBeans关了,发现更新svn的 ...
- POJ 1426 - Find The Multiple - [DP][BFS]
题目链接:http://poj.org/problem?id=1426 Given a positive integer n, write a program to find out a nonzer ...
- Gradle依赖无法下载问题
之前一直在使用maven构建框架,对gradle还比较陌生.最近碰到依赖一直无法下载的问题.我采用了以下步骤进行排查: 1. 查看gradle本地仓库是否有依赖(肯定没有) 2. 查看私服是否有依赖( ...
- 微信小游戏跳一跳简单手动外挂(基于adb 和 python)
只有两个python文件,代码很简单. shell.py: #coding:utf-8 import subprocess import math import os def execute_comm ...
- you-get模块
You-Get是一个基于 Python 3 的下载工具.使用 You-Get 可以很轻松的下载到网络上的视频.图片及音乐. 转载https://www.cnblogs.com/wangchuanyan ...
- python基础之 列表,元组,字典
other help(str.strip) #查看是否有返回值以及返回值类型[] :称为索引操作符 1.列表 列表相比字符串来说能存储大量数据的python的基本数据类型,并且也拥有字符串的一些方法( ...
- JedisCluster简单使用
项目中因为一些原因需要用到缓存,之前没有接触过,在此做一些简单的使用记录. 1.jedis在项目中依赖 <dependency> <groupId>redis.clients& ...
- [js]作用域链查找规则获取值和设置值
作用域链查找规则获取值和设置值 <script> /** 1.作用域链查找规则 私有作用域出现的一个变量不是私有的,则往上一级作用域查找,上级作用域没有则继续向上级查找,一直找到windo ...
- JS基本事件(小记)
一. 事件的概念种类及作用(一) 概念:通常鼠标或热键的动作我们称之为事件(event),热键引发的一连串程序的动作,称之为事件驱动(event Driver).而对事件进行处理的程序或函 ...
- [Luogu]A%BProblem——线性筛素数与前缀和
题目描述 题目背景 题目名称是吸引你点进来的[你怎么知道的] 实际上该题还是很水的[有种不祥的预感..] 题目描述 区间质数个数 输入输出格式 输入格式: 一行两个整数 询问次数n,范围m接下来n行, ...