IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 原生JS实现放大镜效果(HTML、CSS、JavaScript) -> 正文阅读

[JavaScript知识库]原生JS实现放大镜效果(HTML、CSS、JavaScript)

效果如下:
在这里插入图片描述
首先分析一下布局。如下图所示,先有一个红色的大盒子作为整体的容器;蓝色为红色大盒子里的容器,左边为一开始的图片放置的容器,右边为经过放大后的处理效果图片的放置容器;左右蓝色容器里,绿色代表放置的图片;黄色盒子是滑块的盒子,应与图片是属于同一级的。
在这里插入图片描述

<!--外层容器-->
<div id="box">
	<!--左侧图片容器-->
	<div class="small">
		<!--滑块-->
		<div class="slider"></div>
		<!--图片-->
		<img src="lyf.jpg">
	</div>
	<!--右侧图片容器-->
	<div class="big">
		<!--图片-->
		<img src="lyf.jpg" class="big_img">
	</div>
</div>

样式分析如下:此时我做的放大镜是放大两倍的,左右图片容器一致大小的情况下,右侧的图片应是左侧图片的两倍。

/*这里需要设置容器为相对定位,因为子容器为绝对定位,否则子容器的定位不会产生效果*/
#box {
	position: relative;
}
.small {
	width: 400px;
	height: 400px;
}
.small img {
	width: 100%;
	height: 100%;
}
.small .slider {
	/*此处也是有技巧的,因为右图是左图的两倍,所以滑块应是左图的1/2,保证整个图片都可以被显示到*/
	width: 200px;
	height: 200px;
	/*此处的绝对定位是为了后面鼠标移动时的坐标处理*/
	position: absolute;
	background: rgba(255, 255, 255, .3);
	cursor: move;
	/*默认隐藏*/
	display: none;
}
.big {
	width: 400px;
	height: 400px;
	position: absolute;
	top: 0;
	left: 410px;
	/*溢出隐藏,保证右边只展示一部分放大的效果,而不会展示一整个800px*800px*/
	overflow: hidden;
	display: none;
}
.big img {
	position: absolute;
	width: 800px;
	height: 800px;
}

JS实现的是:鼠标移入显示滑块和放大的图、鼠标移出不显示滑块和放大后的图。

//封装选择器实现复用
function selector(name) {
	return document.querySelector(name);
}
//选出需要进行操作的元素
var small = selector('.small'),
slider = selector('.slider'),
big = selector('.big'),
big_img = selector('big_img');

//鼠标移入
small.addEventListener('mousemove', function(e){
	slider.style.display = 'block';
	big.style.display = 'block';
	//e.clientX:当前移入点(鼠标位置)与X轴的距离坐标
	//slider.offsetWidth:当前滑块自身的宽度,除以2是为了让鼠标可以位于滑块的中间
	var left = e.clientX - slider.offsetWidth / 2;
	var top = e.clientY - slider.offsetHeight / 2;
	var maxHeight = this.offsetWidth - slider.offsetWidth;
	var maxHeight = this.offsetHeight - slider.offsetHeight;
	//鼠标移动范围
	if(left < 0) {
		left = 0;
	}else if(left > maxWidth) {
		left = maxWidth;
	}
	if(top < 0) {
		top = 0;
	}else if(top > maxHeight) {
		top = maxHeight;
	}
	//当前滑块的位置
	slider.style.left = left + 'px';
	slider.style.top = top + 'px';
	//右侧大图的位置
	big_img.style.left = -(left*2) + 'px';
	big_img.style.top = -(top*2) + 'px';
});
//鼠标移出
small.onmouseleave = function() {
	slider.style.display = 'none';
	big.style.display = 'none';
}

这样放大镜效果就做好啦,有什么问题下方讨论,请各位大佬指教。在这里插入图片描述

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-25 10:29:45  更:2022-01-25 10:29:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 12:58:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码