js原生淘宝京东宝贝放大镜效果
js实现商城放大镜效果
效果:
- 鼠标放上去会有半透明遮罩、右边会有大图片局部图。
- 鼠标移动时右边的大图片也会局部移动。
技术点
:
Event
Event 是一个事件对象,当一个事件发生后,和当前事件发生相关的详细信息被临时存储到一个指定的地方,也就是event对象,以方便我们在需要的时候调用。
事件捕获
,定位
`难点``:计算。
**接下来是demo分享:
css部分:
* {
margin: 0;
padding: 0;
}
/* img {
vertical-align: top;
} */
.box {
width: 350px;
height: 350px;
position: relative;
border: 1px solid black;
margin: 150px 0 0 300px;
}
.big {
width: 450px;
height: 450px;
position: absolute;
border: 1px solid black;
left: 400px;
top: 0;
display: none;
overflow: hidden;
}
.small {
position: relative;
}
.mask {
width: 100px;
height: 100px;
background-color: rgba(255, 255, 0, 0.4);
position: absolute;
left: 0;
top: 0;
cursor: move;
display: none;
}
.big img {
position: absolute;
left: 0;
top: 0;
}
html结构部分:
<div class="box" id="oBox">
<div class="small" id="oSmall">
<img src="./images/001.jpg" alt="">
<div class="mask" id="oMask"></div>
</div>
<div class="big" id="oBig">
<img src="./images/0001.jpg" alt="">
</div>
</div>
//第一步获取节点
let box = document.getElementById('oBox');
let small = box.children[0]; //获取盒子的第一个子节点samll
let big = box.children[1]; //获取盒子的第二个子节点big
let mask = small.children[1]; //获取小盒子里的遮罩
let bigImg = big.children[0]; //获取大盒子里的图片
//鼠标进入small 遮罩(mask)大盒子(big)display:block
small.onmouseover = function() {
mask.style.display = 'block';
big.style.display = 'block';
};
//鼠标离开small 遮罩(mask)大盒子(big)display:none
small.onmouseout = function() {
mask.style.display = 'none';
big.style.display = 'none';
};
let x = 0;
let y = 0;
small.onmousemove = function(even) {
var even = even || window.event;
// 获取鼠标在small里的坐标
let x = even.clientX - this.offsetParent.offsetLeft - mask.offsetWidth / 2;
let y = even.clientY - this.offsetParent.offsetTop - mask.offsetHeight / 2;
// 限制住鼠标的坐标导致遮罩的位置越界
if (x < 0) {
x = 0;
} else if (x > small.offsetWidth - mask.offsetWidth) {
x = small.offsetWidth - mask.offsetWidth;
}
if (y < 0) {
y = 0;
} else if (y > small.offsetHeight - mask.offsetHeight) {
y = small.offsetHeight - mask.offsetHeight;
}
mask.style.left = x + 'px';
mask.style.top = y + 'px';
//注意大图片的方向
bigImg.style.top = -y * big.offsetHeight / small.offsetHeight + 'px';
bigImg.style.left = -x * big.offsetWidth / small.offsetWidth + 'px';
};
js原生淘宝京东宝贝放大镜效果的更多相关文章
- js 实现淘宝放大镜功能,可更改配置参数 带完整版解析代码[magnifier.js]
前言: 本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽. 本篇文章为您分析一下原生JS写淘宝放大镜效果 基本功能: 运 ...
- JS仿淘宝详情页菜单条智能定位效果
类似于淘宝详情页菜单条智能定位 对于每个人来说并不陌生!如下截图所示:红色框的那部分! 基本原理: 是用JS侦听滚动事件,当页面的滚动距离(页面滚动的高度)大于或者等于 "对象"( ...
- js 实现淘宝无缝轮播图效果,可更改配置参数 带完整版解析代码[slider.js]
前言: 本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽. 本篇文章为您分析一下原生JS写淘宝无缝轮播图效果 需求分析: ...
- jquery仿淘宝规格颜色选择效果
jquery实现的仿淘宝规格颜色选择效果源代码如下 jquery仿淘宝规格颜色选择效果 -收缩HTML代码 运行代码 [如果运行无效果,请自行将源代码保存为html文件运行] <script t ...
- 基于jQuery仿淘宝产品图片放大镜代码
今天给大家分享一款 基于jQuery淘宝产品图片放大镜代码.这是一款基于jquery.imagezoom插件实现的jQuery放大镜.适用浏览器:IE8.360.FireFox.Chrome.Safa ...
- 原生js仿淘宝手机购买选项代码
这是一款基于原生js实现仿淘宝手机信息购买选项效果源码,界面整体效果仿照淘宝购物选项设计,点击不同选项还可实时显示不同的价格计算结果,界面简洁大方.美观实用.可兼容目前最新的各类主流浏览器. 在线演示 ...
- javascript项目实战之原生js模拟淘宝购物车
通过JavaScript实现类似与淘宝的购物车效果,包括商品的单选.全选.删除.修改数量.价格计算.数目计算.预览等功能的实现.实现的效果图: 相应的代码: shoppingCart.html < ...
- js实现淘宝首页图片轮播效果
原文:http://ce.sysu.edu.cn/hope2008/Education/ShowArticle.asp?ArticleID=10585 <!DOCTYPE html> &l ...
- javascript--淘宝页面的放大镜效果
放大镜效果需求: 鼠标放入原图中,会出现一个黄色的遮盖层和一个放大的图片,鼠标移动时候,遮盖层会跟着鼠标一起移动,同时放大的图片会跟着一起移动. 实现过程: 1.鼠标移入,遮盖层和大图片显示 2.鼠标 ...
随机推荐
- openMSP430之io_test
openMSP430: IO functionality test with interupt #include "omsp_system.h" volatile char shi ...
- Android:JAVA使用HDF5存储
Hierarchical Data Format,可以存储不同类型的图像和数码数据的文件格式,并且可以在不同类型的机器上传输,同时还有统一处理这种文件格式的函数库.大多数普通计算机都支持这种文件格式. ...
- CNN结构:用于检测的CNN结构进化-结合式方法
原文链接:何恺明团队提出 Focal Loss,目标检测精度高达39.1AP,打破现有记录 呀 加入Facebook的何凯明继续优化检测CNN网络,arXiv 上发现了何恺明所在 FAIR 团 ...
- 我的C++笔记(数据的共享与保护)
*数据的共享与保护: * .作用域: * 作用域是一个标识符在程序正文中有效的区域.C++中标识符的作用域有函数原型作用域.局部作用域(块作用域).类作用域和命名空间作用域. * ().函数原型作用域 ...
- 读书笔记「Python编程:从入门到实践」_5.if语句
5.1 一个简单示例 cars = ['audi', 'bmw', 'subaru', 'toyota'] for car in cars: if car == 'bmw': print(car.up ...
- 用Python获取摄像头并实时控制人脸
实现流程从摄像头获取视频流,并转换为一帧一帧的图像,然后将图像信息传递给opencv这个工具库处理,返回灰度图像(就像你使用本地静态图片一样) 程序启动后,根据监听器信息,使用一个while循环,不断 ...
- 【转载】java 监听文件或者文件夹变化的几种方式
1.log4j的实现的文件内容变化监听 package com.jp.filemonitor; import org.apache.log4j.helpers.FileWatchdog; public ...
- 复习MySQL③导入数据、检查及修改
导入数据: 用insert into语句为表插入数据: - insert into 表名(字段1,字段2,…) values …… 导入外部文本文件: - 导入外部txt文件(导入CSV文件分隔符为' ...
- vue全局使用axios的方法
在vue项目开发中,我们使用axios的二次封装,很多人一开始使用axios的方式,会当成vue-resoure的使用方式来用,即在主入口文件引入import VueResource from 'vu ...
- 从0到1发布一个Vue Collapse组件
需求背景 最近在项目中遇到了一个类似Collapse的交互需求,因此到github上找了一圈关于Vue Collapse的相关轮子,但是多少都有些问题.有的是实现问题,例如vue2-collapse, ...