今天我想写一个放大镜因为毕竟在做网页的时候,特别是一些电商的详情页放大镜是必不可少的.什么都不说了上代码

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实现效果的更多相关文章

  1. JS原生效果瀑布流布局的实现(一)

    JS原生效果 实现: HTML页面布局: <!DOCTYPE html> <html> <head> <meta charset="utf-8&qu ...

  2. js sleep效果

    js sleep效果 s = setInterval(function(){ //需要执行的函数 alert("我延迟了2秒弹出"); },2000); 并不是每2秒执行一次,而是 ...

  3. JS打字效果的动态菜单代码分享

    这篇文章主要介绍了JS打字效果的动态菜单,推荐给大家,有需要的小伙伴可以参考下. 这是一款基于javascript实现的打字效果的动态菜单特效代码,分享给大家学习学习. 小提示:浏览器中如果不能正常运 ...

  4. js 动画效果实现

    1. 实现方式 - 应用场景 自己写 - 简单的.不用 jq 的项目 jq - 普通动画 成熟插件 - 复杂动画 2. 相关文章 JavaScript基于时间的动画算法 九种原生js动画效果 Twee ...

  5. 页面倒计时跳转页面效果,js倒计时效果

    页面倒计时跳转页面效果,js倒计时效果 >>>>>>>>>>>>>>>>>>>> ...

  6. 非常不错的一个JS分页效果代码

    这里分享一个不错的js分页代码. 代码中cpage是页面计数,应为全局变量,可以随处调用它: totalpage是总页数. 与asp分页代码很类似,也是先取得记录总数,然后实现分页,基本的分页思路与原 ...

  7. 纯js倒计时效果(交流加群:452892873)(本群每天都更新学习资料)

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  8. js 技巧 (十)广告JS代码效果大全 【3】

    3.[允许关闭]     与前面两个代码不同的是,广告图下方增加了一个图片按纽,允许访客点击关闭广告图片,下面文本框中就是实现效果所需代码: var delta=0.015;     var coll ...

  9. js 技巧 (十)广告JS代码效果大全 【1】

    广告JS代码效果大全 1.[普通效果]     现在很多网站广告做的如火如荼,现在我就来介绍一下常见的对联浮动广告效果的代码使用方法,介绍的这种效果,在1024*768分辨率下正常显示,在800*60 ...

随机推荐

  1. python全栈开发 * 19 面向对象 知识点汇总 * 180701

    19 面向对象初识2 一.类的名称空间1.对象的名称空间对象的名称空间中有类对象指针,对象可以通过"类对象指针"找类中的"静态变量"(静态字段),也可以用对象找 ...

  2. Gym 101194C / UVALive 7899 - Mr. Panda and Strips - [set][2016 EC-Final Problem C]

    题目链接: http://codeforces.com/gym/101194/attachments https://icpcarchive.ecs.baylor.edu/index.php?opti ...

  3. Ecplise通过Git将项目提交到GitHub

    一.参考https://blog.csdn.net/bendanany/article/details/78891804 二.注意点: 1.仓库名必须和项目名相同: 2.若提交出现Can't conn ...

  4. VS统计项目代码行数

    ctrl + shift + F 输入:b*[^:b#/]+.*$ 选项图如下

  5. REST风格的5条关键原则

    REST风格的5条关键原则包括: (1)网络上的所有事物都被抽象为资源. (2)每个资源对应一个唯一的资源标识. (3)通过通用的连接件接口对资源进行操作. (4)对资源的各种操作不会改变资源标识. ...

  6. Cartographer源码阅读(9):图优化的前端——闭环检测

    约束计算 闭环检测的策略:搜索闭环,通过匹配检测是否是闭环,采用了分支定界法. 前已经述及PoseGraph的内容,此处继续.位姿图类定义了pose_graph::ConstraintBuilder ...

  7. 467A

    #include <stdio.h> int main() { int n; int p, q; int rooms=0; scanf("%d", &n); i ...

  8. utf8 vs utf8mb4

    UTF-8 is a variable-length encoding. In the case of UTF-8, this means that storing one code point re ...

  9. CSS实现经典的三栏布局

    实现效果: 左右栏定宽,中间栏自适应 (有时候是固定高度) 1 . 绝对定位布局:position + margin <div class="container"> & ...

  10. ASP.NET页面之间传值的方式之Application(个人整理)

    Application  Application变量在整个应用程序生命周期中都是有效的,类似于使用全局变量一样,所以可以在不同页面中对它进行存取.它和Session变量的区别在于,前者是所有的用户共用 ...