JS原生放大镜
来源:互联网 发布:联通云计算公司 编辑:程序博客网 时间:2024/06/05 15:11
利用原生JS写一个放大镜
本文用于记录在学习写一个放大镜
放大镜的关键原理
鼠标在小图片上移动时,通过捕抓鼠标在小图片上的位置定位大图片的相应位置
做放大镜特效需要的元素
1.小图片
2.大图片
3.存放小图片和大图片的容器
4.一个放大镜
涉及的技术点
鼠标的移入移出鼠标移动3个事件
onmouseover
onmouseout
onmousemove
重点
1.如何让小图片的图片和大图片同时移动。坐标的计算。
主要计算的是一个比例
右边的放大部分相对于左边的放大镜来说,是一个固定的位置
图片中的ABCD都是按照相同的比例来放大的
左边放大镜的offsetleft为X,小盒子的offsetwidth为B
右边显示的部分额offsetwidth为C,整一个大盒子的offsetWidth为D
我们需要计算的就是大盒子中的图片的left值。
因为大盒子是小盒子的等比例放大
X/B-A=?/D-C
图片中的ABCD都是可以求到的
通过X/B-A求到left的系数
var parX = left/(smallbox.offsetWidth-fdj.offsetWidth);
同理得到top的
var parY = top/(smallbox.offsetHeight-fdj.offsetHeight);
然后
oimg.style.left=-parX*(oimg.offsetWidth-bigbox.offsetWidth)+'px'; oimg.style.top=-parY*(oimg.offsetHeight-bigbox.offsetHeight)+'px';
注意这里的parx和Y是负数,因为要反方向的移动
整体代码
页面部分
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body> <div id="box"> <div id="box1"> <div id="float-box"></div> <img src="./macbook-small.jpg" alt=""> </div> <div id="box2"> <img src="./macbook-big.jpg" alt=""> </div> </div></body></html>
css样式部分
<style> *{padding: 0;margin: 0} #box{ display: block; width: 400px; height: 255px; margin: 50px; position: relative; border: 1px solid #ccc; } #box1{position: relative;z-index: 1} #float-box{display: none;width: 160px;height: 120px;position: absolute;background: #ffffcc;border: 1px solid #ccc;opacity: 0.5;cursor: move} #box2{display: none;position: absolute;top: 0;left: 460px;width: 400px;height: 300px;overflow: hidden;border: 1px solid #ccc;z-index: 1} #box2 img{position: absolute;z-index: 5} </style>
JS实现部分
<script>window.onload=function () { var oBox = document.getElementById('box'); //获取整体盒子 var smallbox=document.getElementById('box1'); //获取左边小盒子 var fdj = document.getElementById('float-box'); //左边的放大镜 var bigbox = document.getElementById('box2'); //右边的盒子 var oimg = bigbox.getElementsByTagName('img')[0]; //右边盒子中的图片 smallbox.onmouseover=function () { //鼠标移入事件 fdj.style.display='block'; bigbox.style.display='block'; } smallbox.onmouseout=function () { //鼠标移出事件 fdj.style.display='none'; bigbox.style.display='none'; } smallbox.onmousemove=function (ev) { //鼠标移动事件 var ev = ev||event; //兼容 var left=ev.clientX-oBox.offsetLeft-smallbox.offsetLeft-fdj.offsetWidth/2; //放大镜的left,/2是为了鼠标在放大镜的中间,美观 var top=ev.clientY-oBox.offsetTop-smallbox.offsetTop-fdj.offsetHeight/2; //放大镜的top,/2是为了鼠标在放大镜的中间,美观 if(left<0){ //判断left的值,不让放大镜超出小盒子 left=0; }else if(left>(smallbox.offsetWidth-fdj.offsetWidth)){ left=smallbox.offsetWidth-fdj.offsetWidth; } if(top<0){ //判断top的值,不让放大镜超出小盒子 top=0; }else if(top>(smallbox.offsetHeight-fdj.offsetHeight)){ top=smallbox.offsetHeight-fdj.offsetHeight; } var parX = left/(smallbox.offsetWidth-fdj.offsetWidth); var parY = top/(smallbox.offsetHeight-fdj.offsetHeight); //改变放大镜和右边图片的left和top fdj.style.left=left+'px'; fdj.style.top=top+'px'; oimg.style.left=-parX*(oimg.offsetWidth-bigbox.offsetWidth)+'px'; oimg.style.top=-parY*(oimg.offsetHeight-bigbox.offsetHeight)+'px'; }}</script>
阅读全文
0 0
- 原生js 放大镜特效
- js原生放大镜
- 原生js放大镜demo
- JS原生放大镜
- 原生js - 图片放大镜效果
- 【原生JS】简单放大镜效果
- 原生js放大镜效果实现
- 原生js实现放大镜特效
- 原生JS实现图片的放大镜效果
- Js放大镜
- js 放大镜
- js 放大镜
- 放大镜js
- JS放大镜
- js放大镜
- js放大镜功能
- js放大镜特效
- js放大镜,淘宝效果
- java中十六进制编码与解码
- 安装MyEclipse插件svn
- 手工创建cdb数据库(create database语句)
- Python核心数据类型及其操作
- 数据库事务使用
- JS原生放大镜
- box-shadow属性的详细描述和兼容性测试
- MySQL5.6免安装版环境配置图文教程
- android Parcelable中boolean与枚举的写法
- 幻中神,意中人
- MySQL索引背后的数据结构及算法原理
- Lambda表达式详解
- 面试题39—二叉树的深度
- faster-rcnn安装配置,训练自己的数据,MATLAB,Ubuntu14