JavaScript实现京东放大镜效果
作者:空谷丶幽兰 发布时间:2024-10-29 18:53:29
标签:js,放大镜
本文实例为大家分享了JavaScript实现京东放大镜展示的具体代码,供大家参考,具体内容如下
实现效果:
1.鼠标放到图片上显示放大镜和详细图,鼠标离开时什么都不显示(效果消失)
2.鼠标一直在放大镜的中间,且放大镜随鼠标移动
3.放大镜不能出缩列图的盒子
4.鼠标放在详细图上详细图消失
实现细节:
1.大盒子虽然比详细图的盒子宽度小,但是在逻辑上详细图的盒子属于大盒子
2.详细图不能使用浮动,因为盒子下面一般会有文字内容
3.以父盒子来定位详细图的盒子
4.放大镜鼠标选中为十字形
5.对图片进行定位才能使图片移动
6.使用var evt = event || window.event; //兼容性写法
7.用放大镜顶点在盒子中的位置根据比例找到图片的位置,来显示图片
8.图片在详细图中的定位为负值
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>京东放大镜</title>
<style>
.box{ /*大盒子虽然比详细图的盒子宽度小,但是在逻辑上详细图的盒子属于大盒子*/
width: 350px;
height: 350px;
position: relative;
margin: 100px;
border: 1px solid #aaa;
}
.box .detailed{ /*详细图不能使用浮动,因为盒子下面一般会有文字内容*/
width: 450px;
height: 450px;
border: 1px solid #aaa;
position: absolute;
overflow: hidden;
left: 365px; /*以父盒子来定位*/
top: 0;
/*初始设置为不可见*/
display: none;
}
.box .normal .magnfier{
width: 150px;
height: 150px;
top: 0;
left: 0;
position: absolute;
background-color: rgba(0, 0, 255, 0.2);/*也可以用opacity来设置透明度*/
cursor: move; /*鼠标选中为十字*/
display: none; /*初始设为不可见*/
}
.detailed img{ /*对图片进行定位使图片移动*/
position: absolute;
top: 0;
left: 0;
}
</style>
<script>
function $(id){
return document.getElementById(id);
}
window.onload = function(){
var box = $('box');
var normal = box.children[0];
var margnfier = normal.children[1];//获取放大镜的Dom对象,document.getElementsByClassName来获取。
var detailed = box.children[1];//获得缩略图DOM对象也可以用document.getElementsByClassName('zoom')[0];
var detailedImg = box.children[1].children[0];
normal.onmouseover = function(){//不能给box注册onmousever事件,否则快速移到详细图上是详细图也不会消失,
margnfier.style.display = 'block';
detailed.style.display = 'block';
}
normal.onmouseout = function(){
margnfier.style.display = 'none';
detailed.style.display = 'none';
}
var x = 0;
var y = 0;
//控制zoom放大镜部分在normal里面的移动
normal.onmousemove = function(event){
var evt = event || window.event;
//兼容性写法
x = evt.clientX - box.offsetLeft - margnfier.offsetWidth / 2;
y = evt.clientY - box.offsetTop - margnfier.offsetHeight / 2;
//判断鼠标是不是溢出了normal的区域,
if(x < 0){
x = 0;
}else{
if(x > box.offsetWidth - margnfier.offsetWidth){
x = box.offsetWidth - margnfier.offsetWidth;
}
}
if(y < 0){
y = 0;
}else{
if(y > box.offsetHeight - margnfier.offsetHeight){
y = box.offsetHeight - margnfier.offsetHeight;
}
}
margnfier.style.left = x + 'px';
margnfier.style.top = y + 'px';
var detailedX = -x * 800 / this.offsetWidth;
var detailedY = -y * 800 / this.offsetHeight;
//用放大镜顶点在盒子中的位置根据比例找到图片的位置,来显示图片
//改变图片位置
detailedImg.style.left = detailedX + 'px';
detailedImg.style.top = detailedY + 'px';
}
}
</script>
</head>
<body>
<div id="box" class="box"> <!--包含详细图和缩略图的盒子-->
<div class="normal">
<img src="imgs/show.jpg" alt="">
<div class="magnfier"></div>
</div>
<div class="detailed">
<img src="imgs/detail.jpg" alt="">
</div>
</div>
</body>
</html>
来源:https://blog.csdn.net/yangaoyuan1999/article/details/103339465


猜你喜欢
- 因为老策略一直能用,一直没有看新版signature。本文做一下分析记录。断点调试堆栈进来之后,url中signature已经有了shift
- 1. 引言最近在将一个算法由matlab转成python,初学python,很多地方还不熟悉,总体感觉就是上手容易,实际上很优雅地用pyth
- 本文实例讲述了Python简单获取自身外网IP的方法。分享给大家供大家参考,具体如下:#encoding=utf-8#author: wal
- 今天学习下Go语言如何集成Gin框架编写Restful Web API的基本操作。Gin框架简化了Go原生语言构建Web应用程序的复杂度,在
- var cookieName = "cookie名字"; var cookieValue = null;//返回cook
- vue框架移动端做ip输入框组件,input在浏览器和微信端兼容问题。要求:只能输入数字,输入数字以外的字符(包括点、冒号等数字符号)时自动
- 标量标量由普通小写字母表示(例如,x、y和z)。我们用 R \mathbb{R} R表示所有(连续)实数标量的空间。标量由只有一个元素的张量
- 我们有时候需要把一些 * 发给多个客户,为了避免客户泄露文件,会在 * 中添加水印。每个客户收到的文件内容相同,但是水印都不相同。这样一
- 本文实例为大家分享了Python Pygame实现俄罗斯方块的具体代码,供大家参考,具体内容如下源码:# coding : utf-8#:
- 写在前面对于经常需要开发企业管理后台的前端开发来说,必不可少的需要使用表格对于数据进行操作,在对于现有项目进行代码优化时,封装一些公共的Ho
- CSS3 + HTML5是未来的Web,它们都还没有正式到来,虽然不少浏览器已经开始对它们提供部分支持。本文介绍了5个CSS3技巧,可以帮你
- 最近在做声音文件数据处理,写了一个自动将m4a文件转化为wav的脚本。import osm4a_path = "/Users/Do
- 前言最近不是快过年了,Python写对联挺火的,但是代码又不是人人都用,那就直接写个界面打包一下呗~主要实现只要运行后输入上联下联、横批,然
- 前沿在CV领域,我们需要熟练掌握最基本的知识就是各种卷积神经网络CNN的模型架构,不管我们在图像分类或者分割,目标检测,NLP等,我们都会用
- 开发动机:最近用手机QQ浏览器下载了一些视频,视频越来越多,占用了手机内存,于是想把下载的视频传到电脑上保存,可后来发现这些视频都是m3u8
- 需求:将查询的两列数据导出到excel中 1.选择数据库,右键任务→导出数据,打开导入导出向导,单击下一步2.在打开的SQ
- 本文介绍了tensorflow中next_batch的具体使用,分享给大家,具体如下:此处给出了几种不同的next_batch方法,该文章只
- 主要是要注意权限的问题,一般做发布/订阅,建议你做如下准备工作: 1.发布服务器,订阅服务器都创建一个同名的windows用户,并设置相同的
- 1.如何通过地址栏参数来得到模块名称和控制器名称(即使在有路由和开了重写模块的情况下)2.tp是如何实现前置,后置方 * 能模块,和如何执行带
- 详解python实现读取邮件数据并下载附件的实例实现结果图:实现代码:#!/usr/bin/python2.7# _*_ coding: u