********** 希望对大家帮助 我会继续努力的 如果有不对的地方请大家帮忙指出******

1 【JS 代码】

<script>

    var oBox = document.getElementById("box");
var bigBox = document.getElementById("bigBox");
var img = bigBox.getElementsByTagName("img")[0];
var mark;
// 分别给元素的鼠标进入,滑动,滑出绑定方法;
// 1. 鼠标滑入; 1) :创建出小盒子 2) : bigBox 显示;
oBox.onmouseenter = function () {
var smallBox = document.createElement("div");
smallBox.id = "mark";
this.appendChild(smallBox); // 需要放入DOM中,才能用document去获取元素;否则当前节点是获取不到的;
mark = document.getElementById("mark");
// 让大盒子显示
bigBox.style.display = "block";
}
oBox.onmousemove = function (e) {
// 计算小盒子的位置;大盒子图片的位置
e = e || window.event;
var minL = 0;
var maxL = box.offsetWidth/2;
var left = e.clientX - box.offsetLeft - mark.offsetWidth/2;
var top = e.clientY- box.offsetTop - mark.offsetHeight/2;
// 如果left比最小值还小,那么直接让left等于最小值即可;如果left比最大值还大,那么直接设置成最大值;
if(left<minL){
left = minL;
}else if(left>maxL){
left=maxL;
}
if(top<minL){
top = minL;
}else if(top>maxL){
top = maxL;
}
// 设置盒子的left、top;
mark.style.left = left + "px";
mark.style.top = top + "px";
// mark 的left和img的left存在2倍关系;
img.style.left = -2*left + "px";
img.style.top = -2*top + "px";
}
oBox.onmouseleave = function () {
// 鼠标离开,移出mark;并且让大盒子隐藏;
this.removeChild(mark);
bigBox.style.display= "none";
} </script> 2 【HTNL部分】
<div id="box">
<img src="img/iphone.jpg" alt="">
</div>
<div id="bigBox">
<img src="img/iphone_big.jpg" alt="">
</div>
3【CSS部分】
<style type="text/css">
*{
margin: 0;
padding: 0;
}
#box{
position: relative;
width:350px;
height:350px;
border: 1px solid black;
margin-top:30px;
margin-left:50px;
float:left;
}
#box img{
width:100%;
height:100%;
}
#bigBox{
display: none;
position: relative;
width:350px;
height:350px;
border: 1px solid black;
margin-top:30px;
margin-left:50px;
float: left;
overflow: hidden;
}
#bigBox img{
position: absolute;
width:700px;
height:700px;
}
#mark{
position: absolute;
width:175px;
height:175px;
background: rgba(0,0,0,0.3);
cursor: move;
left:0;
top:0;
}
</style>


放大镜功能 JS原生写法的更多相关文章

  1. arttemplate.js原生写法案例

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  2. screen,client,page三种确定鼠标坐标的区别和原生JS事件写法,区别于Jquery的$.on(x,y);和$.click()

    screenX clientX pageX的区别 screenX:鼠标位置相对于用户屏幕水平偏移量,而screenY也就是垂直方向的,此时的参照点也就是原点是屏幕的左上角. clientX:跟scre ...

  3. Js原生实现抽奖功能

    <div>代码 按钮代码 JS原生代码  完整的代码: <div style="width:365px;height:300px;border:2px solid gree ...

  4. 15、js 原生基础总结

    Day1 一.什么是JS?   ==基于对象==和==事件驱动==的客户端脚本语言 二.哪一年?哪个公司?谁?第一个名字是什么? 1995,NetScape(网景公司),布兰登(Brendan Eic ...

  5. JS原生Date类型方法的一些冷知识

    ps:由于Date()是js原生函数,不同浏览器的解析器对其实现方式并不同,所以返回值也会有所区别.本文测试未特别申明浏览器的情况下,均是指win7 x64+chrome 44.0.2403.155 ...

  6. vue中图片放大镜功能

    仿淘宝详情页图片鼠标移过去可对图片放大显示在右侧 效果图如下图,此功能支持PC端与移动端 接下来进入代码实现环节: 先准备两张图片,一张小图片叫 '土味.jpg',大小160*91:一张大图片叫 ' ...

  7. js原生高逼格插件

    如何定义一个高逼格的原生JS插件 作为一个前端er,如果不会写一个小插件,都不好意思说自己是混前端界的.写还不能依赖jquery之类的工具库,否则装得不够高端.那么,如何才能装起来让自己看起来逼格更高 ...

  8. js原生代码实现轮播图案例

    一.轮播图是现在网站网页上最常见的效果之一,对于轮播图的功能,要求不同,效果也不同! 我们见过很多通过不同的方式,实现这一效果,但是有很多比较麻烦,而且不容易理解,兼容性也不好. 在这里分享一下,用j ...

  9. 手把手教你js原生瀑布流效果实现

    手把手教你js原生瀑布流效果实现 什么是瀑布流效果 首先,让我们先看一段动画: 在动画中,我们不难发现,这个动画有以下特点: 1.所有的图片的宽度都是一样的 2.所有的图片的高度是不一样的 3.图片一 ...

随机推荐

  1. vue-element-admin执行npm install 报错

    如果你出现这类报错: 那么恭喜你,因为这个问题很好解决. ----------------------- 解决方法: git config --global url."https://&qu ...

  2. 【题解】P3349 [ZJOI2016]小星星 - 子集dp - 容斥

    P3349 [ZJOI2016]小星星 声明:本博客所有题解都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 题目描述 小 \(Y\) 是一个心灵手巧 ...

  3. Spring5:Java Config

    @Configuration @Bean @ComponentScan @ImportResource 使用Java的方式配置spring,完全不使用spring配置文件,交给java来做! 两个注解 ...

  4. MySQL笔记总结-TCL语言

    TCL语言 事务 一.含义 事务控制语言 Transaction Control Language 事务:一条或多条sql语句组成一个执行单位,一组sql语句要么都执行要么都不执行 二.特点(ACID ...

  5. python web的进化历程

    对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 阶段1 socket服务端和客户端都自己编写 实现访问8080端口,返回一个'hello wo ...

  6. 二进制部署kubernetes集群_kube-apiserver提示"watch chan error: etcdserver: mvcc: required revision has been compacted'

    查看kube-apiserver状态 [root@yxz-cluster01 ~]# systemctl status kube-apiserver -l ● kube-apiserver.servi ...

  7. Linux必须会的命令---也是以前记录的,ctrl+z fg 啥的 jobs 比较实用

    fg.bg.jobs.&.ctrl + z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的 一.& 最经常被用到 这个用在一个命令的最后,可以把这个命令 ...

  8. tp5--开启与关闭调试模式

    https://www.cnblogs.com/finalanddistance/p/8906000.html TP5 显示错误信息   在TP5中,我们运行的代码有错误无法执行时,只显示页面错误,而 ...

  9. VRRP概念、工作原理

    VRRP是一种路由容错协议,也可以叫做备份路由协议,可以把一个虚拟路由器的责任动态分配到局域网上的 VRRP 路由器中的一台. 控制虚拟路由器 IP 地址的 VRRP 路由器称为主路由器, 它负责转发 ...

  10. RedHat 的 crontab

    Chapter 39. Automated Tasks In Linux, tasks can be configured to run automatically within a specifie ...