淘宝商品放大镜效果-JavaScript
效果图

HTML代码
<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
} #box {
width: 860px;
height: 430px;
border: 1px solid;
display: flex;
margin: 100px auto;
} #box>div {
width: 430px;
height: 430px;
outline: 1px solid;
} #box>div:first-child {
background-image: url("image/imgA_2.jpg");
position: relative;
} #box>div:first-child>div {
width: 231px;
height: 231px;
background-color: rgba(0, 0, 0, 0.2);
position: absolute;
top: 0;
left: 0;
display: none;
} #box>div:first-child:hover div {
display: block;
} #box>div:last-child {
background-image: url("image/imgA_3.jpg"); } #box1 {
margin: auto;
width: 800px;
height: 60px;
}
</style>
</head> <body>
<div id="box">
<div id="left">
<div id="shadow"></div>
</div>
<div id="right"></div>
</div>
<div id="box1">
<img src="data:image/imgA_1.jpg" alt="">
<img src="data:image/imgB_1.jpg" alt="">
<img src="data:image/imgC_1.jpg" alt="">
</div> </body> </html>
JavaScript 代码示例
<script>
let index = 0;
let arr = ["image/imgA_2.jpg", "image/imgB_2.jpg", "image/imgC_2.jpg"];
let arr1 = ["image/imgA_3.jpg", "image/imgB_3.jpg", "image/imgC_3.jpg"];
let img = document.querySelectorAll("img");
let left = document.querySelector("#left");
let right = document.querySelector("#right");
let shadow = document.querySelector("#shadow"); for (let i = 0; i < img.length; i++) {
img[i].onmouseover = function () {
index = i;
left.style.background = `url("${arr[index]}")`;
right.style.background = `url("${arr1[index]}")`;
}
}
left.onmousemove = function (event) {
let e = event || window.event;
let pagex = e.pageX;//鼠标的位置
let pagey = e.pageY;
let shadowZiseX = shadow.offsetWidth;//遮罩div大小
let shadowZiseY = shadow.offsetHeight;
let shubiaoX = pagex - box.offsetLeft-shadowZiseX/2 ;//最后遮罩div的移动位置
let shubiaoY = pagey - box.offsetTop-shadowZiseY/2 ;
if (shubiaoX <=0) {//如果遮罩div的移动位置大于了X坐标的最小值,那就等于X坐标最小值
shubiaoX =0;
}
let maxRightX = left.offsetWidth - shadowZiseX;//left盒子空白位置等于:自身宽度-去小盒子宽度;
if (shubiaoX >= maxRightX) {//如果大于了空白盒子X的最大值那就等于最大值
shubiaoX = maxRightX
}
if (shubiaoY <=0) {//如果遮罩div的移动位置大于了Y坐标的最小值,那就等于Y坐标最小值
shubiaoY=0;
}
let maxRightY = left.offsetHeight-shadowZiseY;
if (shubiaoY >= maxRightY) {//如果大于了空白盒子Y的最大值那就等于最大值
shubiaoY = maxRightY
}
shadow.style.left = shubiaoX+ "px";//这里是分别给小盒子赋值X,Y坐标的值
shadow.style.top = shubiaoY+ "px"; right.style["backgroundPosition"]=`-${shadow.offsetLeft/left.offsetWidth*800}px -${shadow.offsetTop/left.offsetHeight*800}px`;
//右边的背景图片的移动位置=阴影盒子/left盒子的宽高*自身背景图的大小;
console.log("woshi"+shadow.offsetTop);
}
</script>
淘宝商品放大镜效果-JavaScript的更多相关文章
- canvas+javascript实现淘宝商品放大镜效果
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- JavaScript仿淘宝实现放大镜效果的实例
我们都知道放大镜效果一般都是用于一些商城中的,列如每当我们打开淘宝,天猫等pc端时,看到心仪的物品时,点击图片时,便呈现出放大镜的效果.在没有去理解分析它的原理时,感觉非常的神奇,当真正地去接触,也是 ...
- Vue实现仿淘宝商品详情属性选择的功能
Vue实现仿淘宝商品详情属性选择的功能 先看下效果图:(同个属性内部单选,属性与属性之间可以多选) 主要实现过程: 所使用到的数据类型是(一个大数组里面嵌套了另一个数组)具体格式如下: attrA ...
- YY一下淘宝商品模型
淘宝的电商产品种类非常丰富,必然得力于其商品模型的高度通用性和扩展性. 下面我将亲自操作淘宝商品的发布过程,结合网上其他博客对淘宝网商品库的分析,简单谈谈我的理解. 注:下面不特殊说明,各个表除主键外 ...
- 用PHP抓取淘宝商品的用户晒单评论+图片实例
为什么想起来做这个功能?是因为前段时间在做一个淘客网站的时候,想到是否能抓取到淘宝商品的买家秀呢?经过一番折腾发现,淘宝商品用户评价信息是通过Ajax来调取的,通过嗅探网址发现,评论数据的请求接口是: ...
- 利用Python爬虫爬取淘宝商品做数据挖掘分析实战篇,超详细教程
项目内容 本案例选择>> 商品类目:沙发: 数量:共100页 4400个商品: 筛选条件:天猫.销量从高到低.价格500元以上. 项目目的 1. 对商品标题进行文本分析 词云可视化 2. ...
- python爬虫学习(三):使用re库爬取"淘宝商品",并把结果写进txt文件
第二个例子是使用requests库+re库爬取淘宝搜索商品页面的商品信息 (1)分析网页源码 打开淘宝,输入关键字“python”,然后搜索,显示如下搜索结果 从url连接中可以得到搜索商品的关键字是 ...
- YY淘宝商品数据库设计
http://www.cnblogs.com/mmmjiang13/archive/2010/11/04/1868609.html 前言 这几个月都在做一个通过淘宝API线下管理淘宝店的系统,学习了很 ...
- 仿淘宝商品详情页上拉弹出新ViewController
新项目就要开始做了,里面有购物那块,就试着先把淘宝商品详情页的效果做了一下. 1.需求 1.第一次上拉时,A视图拉到一定距离将视图B从底部弹出,A视图也向上 2.显示B视图时下拉时,有刷新效果,之后将 ...
随机推荐
- 软工读书笔记 week3 (《黑客与画家》上)
一.何谓黑客? 黑客,在我们大多数普通人眼里,就是入侵计算机的人,通常还与干坏事挂钩.而书中告诉我们,这 并不是它的真正含义.而要想理解这本书,就要首先理解什么是黑客. 黑客这个词最初起源时,完全是一 ...
- Attribute+Reflection,提高代码重用
这篇文章两个目的,一是开阔设计的思路,二是实例代码可以拿来就用. 设计的思路来源于<Effective c#>第一版Item 24: 优先使用声明式编程而不是命令式编程.特别的地方是,希望 ...
- 卸载Sharepoint2016后。重新安装提示 系统从以前的安装重新启动,或更新正在等待错误
卸载Sharepoint2016 重启N遍,不停地重启.需要删除注册表项 下的 .将PendingFileRenameOperations键项删除,再重新安装就可以安装成功.
- Exchange 2007 前端 IIS 内存占用过高
已经碰见了好几次,在Exchange2007的场景中,前端角色所在服务器的w3wp.exe进程总是占用大量内存,以至于触发反压组件,停止了正常的邮件流投递,造成业务中断. 终于下决心查一下到底问题问题 ...
- oracle sql练习 菜鸟入门!
进入公司 ,首先是进行SQL培训 一下是针对oracle的emp与dept表进行的基础查询 --1.选择部门30中的所有员工: ; --2.列出所有办事员(CLERK)的姓名,编号和部门编号: sel ...
- Linux命令--网络管理
write命令 Linux write命令用于传讯息给其他使用者. 使用权限:所有使用者. 语法 write user [ttyname] 参数说明: user : 预备传讯息的使用者帐号 ttyna ...
- 021.6 IO流 练习
#######################################################################################获取指定目录下所有的.ja ...
- [零基础学JAVA]Java SE面向对象部分.面向对象基础(05)
1.继承 2.多态 3.final 4.重载与覆写 5. this/super 6.抽象类 7.接口 java: class Person{ private String name; priva ...
- POJ2720 Last Digits
嘟嘟嘟 一道题又写了近两个点-- 这道题直接暴力快速幂肯定会爆(别想高精),所以还是要用一点数学知识的- 有一个东西叫欧拉降幂公式,就是: \(x ^ y \equiv x ^ {y \ \ ...
- Vue - 如何实现一个双向绑定
JS - 如何实现一个类似 vue 的双向绑定 Github JS 实现代码 先来看一张图: 这张图我做个简要的描述: 首先创建一个实例对象,分别触发了 compile 解析指令 和 observe ...