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

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. 最全的MonkeyRunner自动化测试从入门到精通(4)

    Android Sdk环境变量配置步骤一:我们进行再eclipse中下载sdk来进行使用. 在安装ADT插件完成之后,在eclipse的菜单界面会多一个ADT的管理器,如下图,点击进入到安卓API安装 ...

  2. 【Python全栈-后端开发】Django进阶1-分页

    Django[进阶篇-1 ]分页 分页 一.Django内置分页 from django.core.paginator import Paginator, EmptyPage, PageNotAnIn ...

  3. Unable to convert MySQL date/time value to System.DateTime问题解决方案

    原因:可能是该字段(date/datetime)的值默认缺省值为:0000-00-00/0000-00-00 00:00:00,这样的数据读出来转换成System.DateTime时就会有问题: 解决 ...

  4. 16.4-uC/OS-III同步 (任务信号量)

    信号量和消息队列均是单独的内核对象,是独立于任务存在的. 任务信号量 仅发布给一个特定任务 .任务消息队列 可以发布给多个任务. 任务信号量伴随任务存在,只要创建了任务,其任务信号量就是该任务的一个数 ...

  5. 腾讯TBS加载网页无法自适应记录

    1.  所遇到的问题 webview加载指定网页无法实现自适应,之前在加载重构一个网页的时候,其实也遇到这种问题,然后就有了下面的一下步骤 WebSettings webSettings = view ...

  6. 数据库join操作(MySQL)

    左连接,右连接,内连接 1.原始表:左表user_t,右表user_info 2.执行连接 #LEFT JOIN ; #RIGHT JOIN ; #INNER JOIN ; 2.1左连接:以左边为主 ...

  7. Rosserial实现Windows-ROS交互操作

    安装 sudo apt-get install ros-indigo-rosserial-windows sudo apt-get install ros-indigo-rosserial-serve ...

  8. python类型错误:'NoneType' object is not subscriptable

    TypeError: 'NoneType' object is not subscriptable --> 原因:变量使用了系统内置的关键字list 解决:重新定义下这个变量

  9. python进阶之 进程&线程区别

    1.进程创建方式 import time import os from multiprocessing import Process def func (): time.sleep(1) print( ...

  10. [py]js前端求和与flask后端求和

    index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...