明霞山资源网 Design By www.htccd.com
JavaScript实现放大镜效果:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.smallBgImg {
width: 350px;
height: 350px;
border: 1px solid #ccc;
box-sizing: border-box;
background-clip: padding-box;
float: left;
position: relative;
cursor: pointer;
}
.move {
border: 1px solid #ccc;
box-sizing: border-box;
background: rgba(165, 201, 66, 0.5);
position: absolute;
left: 0;
top: 0;
}
.bigBgImg {
width: 540px;
height: 540px;
border: 1px solid #ccc;
box-sizing: border-box;
background-clip: padding-box;
float: left;
margin-left: 10px;
}
.hidden {
display: none;
}
</style>
</head>
<body>
<div class="smallBgImg">
<div class="move hidden">
</div>
</div>
<div class="bigBgImg hidden">
</div>
<script>
(function () {
//基本信息配置
var config = {
smallImg: "./image/smallImg.jpg", //小图路径
smallDom: document.getElementsByClassName("smallBgImg")[0], //小图 dom对象
bigImg: "./image/bigImg.jpg", //大图路径
bigDom: document.getElementsByClassName("bigBgImg")[0], //大图 dom对象
moveDom: document.getElementsByClassName("move")[0], //移动方块的dom对象
smallSize: { //小图尺寸
width: 350,
height: 350
},
bigSize: { //大图尺寸
width: 800,
height: 800
},
divBigSize: { //大图框的尺寸
width: 540,
height: 540
}
};
//根据比例尺计算移动框的宽高 移动框/小图尺寸 = 大框尺寸/大图尺寸
config.moveSize = {
width: config.divBigSize.width * config.smallSize.width / config.bigSize.width,
height: config.divBigSize.height * config.smallSize.height / config.bigSize.height
};
//小图style的计算值
config.smallComputedStyle = window.getComputedStyle(config.smallDom);
//大图style的计算值
config.bigComputedStyle = window.getComputedStyle(config.bigDom);
//移动方块style的计算值
config.moveComputedStyle = window.getComputedStyle(config.moveDom);
initSmallImg();
initBigImg();
initMoveDiv();
//初始化小图
function initSmallImg() {
config.smallDom.style.background = `url("${config.smallImg}") no-repeat left top/contain`; //设置背景图片
config.smallDom.onmousemove = function (e) { //鼠标移入事件
//展示移动小块
config.moveDom.style.display = "block";
var move = window.getComputedStyle(config.moveDom);
//获取鼠标在小图中的坐标
var position = getPosition(e);
//设置移动框的位置
setPosition(position);
//展示大图框
config.bigDom.style.display = "block";
//大图框中展示部分大图
displayBigBgImgSize();
}
config.smallDom.onmouseout = function () {
//移动小块隐藏,大图隐藏
config.moveDom.style.display = config.bigDom.style.display = "none";
}
}
//初始化大图
function initBigImg() {
config.bigDom.style.background = `url("${config.bigImg}") no-repeat`; //设置背景图片
}
//初始化移动框
function initMoveDiv() {
config.moveDom.style.width = config.moveSize.width + "px";
config.moveDom.style.height = config.moveSize.height + "px";
}
//获取鼠标的坐标位置
function getPosition(e) {
if (e.target == config.smallDom) { //若鼠标出现在小图中,事件源是小图
return { //直接获取鼠标距离事件源的横坐标和纵坐标
x: e.offsetX,
y: e.offsetY
};
} else { //鼠标出现在移动框中,事件源是移动框
return {
x: e.offsetX + parseFloat(config.moveComputedStyle.left) +
1, //鼠标距离事件源的横坐标 + 事件源在smallDom中的left值 + 边框值
y: e.offsetY + parseFloat(config.moveComputedStyle.top) +
//鼠标距离事件源的纵坐标 + 事件源在smallDom中的top值 + 边框值
}
}
}
//设置移动方块的位置
function setPosition(position) {
//鼠标要始终在移动方块中央位置
config.moveDom.style.left = position.x - parseFloat(config.moveComputedStyle.width) / 2 + "px";
config.moveDom.style.top = position.y - parseFloat(config.moveComputedStyle.height) / 2 + "px";
//要限制移动框的范围在小图中,否则会超出小图
var left = parseInt(config.moveComputedStyle.left);
var top = parseInt(config.moveComputedStyle.top);
if (left < 0) { //最左
config.moveDom.style.left = "0px";
}
if (left > config.smallSize.width - config.moveSize.width) { //最右
config.moveDom.style.left = config.smallSize.width - config.moveSize.width + "px";
}
if (top < 0) { //最上
config.moveDom.style.top = "0px";
}
if (top > config.smallSize.height - config.moveSize.height) { //最下
config.moveDom.style.top = config.smallSize.height - config.moveSize.height + "px";
}
}
//展示部分大图
function displayBigBgImgSize() {
//移动框的left/小图width = 大图框的left/大图width
var moveLeft = parseInt(config.moveComputedStyle.left);
var moveTop = parseInt(config.moveComputedStyle.top);
config.bigDom.style.backgroundPosition =
`-${moveLeft*config.bigSize.width/config.smallSize.width}px -${moveTop*config.bigSize.height/config.smallSize.height}px`;
}
}());
</script>
</body>
</html>
index.html
效果展示:
代码中的大图片和小图片要自己找,并且替换掉代码中的图片路径。
做放大镜效果做重要的一点是,要找到黄色移动块、小图、部分大图、大图,这四个之间的比例尺
黄色移动块 /小图 = 部分大图 / 大图
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
标签:
JavaScript,放大镜效果
明霞山资源网 Design By www.htccd.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
明霞山资源网 Design By www.htccd.com
暂无评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。

