使用hammer.js实现移动端手指滑动切换轮播图教程

今天面试前端开发时,要求在移动端实现手指滑动切换轮播图

这里我用到 bootsrap 的轮播图组件 + hammer.js 库

文章参考: Hammer.js - 李林峰的园子 - 博客园 (cnblogs.com)

在 hammer.js 中

Swipe事件:在指定的 Dom 区域内,一个手指快速在触屏上滑动。即我们平时用到最多的滑动事件。

Swipeleft:向左滑动
Swiperight:向右滑动
Swipeup:向上滑动
Swipedown:向下滑动

演示效果:

手指滑动切换轮播图演示

代码如下:改动的地方我都标了注释,根据自己需求改写即可

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
		<title></title>
		<!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
		<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"
			integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
		<!-- jquery -->
		<script src="https://fastly.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"
			integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ"
			crossorigin="anonymous"></script>
		<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
		<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"
			integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd"
			crossorigin="anonymous"></script>
		<link rel="stylesheet" href="./css/index.css">
	</head>
	<body>
		<!-- bootstrap官方轮播图代码 -->
		<div id="carousel-example-generic" class="carousel slide" data-ride="carousel">
			<ol class="carousel-indicators">
				<li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li>
				<li data-target="#carousel-example-generic" data-slide-to="1"></li>
				<li data-target="#carousel-example-generic" data-slide-to="2"></li>
			</ol>
			<div class="carousel-inner" role="listbox">
				<!-- 图片地址改成你自己的就可以了 -->
				<div class="item active">
					<img src="./images/banner1.jpg" alt="...">
				</div>
				<div class="item">
					<img src="./images/banner2.jpg" alt="...">
				</div>
				<div class="item">
					<img src="./images/banner3.jpg" alt="...">
				</div>
			</div>
		
			<!-- 给两侧切换轮播图的a标签加了id -->
			<a id="leftbtn" class="left carousel-control" href="#carousel-example-generic" role="button" data-slide="prev">
				<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
				<span class="sr-only">Previous</span>
			</a>
			<a id="rightbtn" class="right carousel-control" href="#carousel-example-generic" role="button" data-slide="next">
			<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
			<span class="sr-only">Next</span>
			</a>
		</div>

		<!-- hammer.js -->
		<script src="http://hammerjs.github.io/dist/hammer.min.js"></script>
		<script type="text/javascript">
			// 创建一个新的hammer对象并且在初始化时指定要处理的dom元素
			// 通过id获取到装轮播图的容器
			var hammertime = new Hammer(document.getElementById("carousel-example-generic"));
			//添加左滑动事件
			hammertime.on("swipeleft", function (e) {
				// 自动触发左侧按钮
				document.getElementById('leftbtn').click();
			})
			//添加右滑动事件
			hammertime.on("swiperight", function (e) {
				// 自动触发右侧按钮
				document.getElementById('rightbtn').click();
			})
		</script>
	</body>
</html>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Vue2中使用Hammer.js实现移动端div的拖拽、放大缩小和旋转可以按照以下步骤进行。 首先,在Vue项目中安装Hammer.js。 ``` npm install hammerjs ``` 然后,在需要使用拖拽、放大缩小和旋转功能的组件中引入Hammer.js,并初始化一个Hammer实例,将其绑定到要拖拽、放大缩小和旋转的div元素上。 ``` import Hammer from 'hammerjs' export default { mounted() { const element = this.$refs.element // 获取div元素的引用 const mc = new Hammer.Manager(element) // 初始化Hammer实例并将其绑定到div元素上 // 添加拖拽、放大缩小和旋转的手势识别 mc.add(new Hammer.Pan({ threshold: 0, pointers: 0 })) mc.add(new Hammer.Pinch({ threshold: 0 })).recognizeWith(mc.get('pan')) mc.add(new Hammer.Rotate({ threshold: 0 })).recognizeWith(mc.get('pan')) // 初始化div元素的拖拽、放大缩小和旋转的初始状态值 let posX = 0 let posY = 0 let scale = 1 let lastScale = 1 let rotation = 0 // 监听拖拽事件 mc.on('pan', (e) => { // 实现拖拽 posX = e.deltaX posY = e.deltaY element.style.transform = `translate(${posX}px, ${posY}px) scale(${scale}) rotate(${rotation}deg)` }) // 监听放大缩小事件 mc.on('pinch', (e) => { // 实现放大缩小 scale = lastScale * e.scale element.style.transform = `translate(${posX}px, ${posY}px) scale(${scale}) rotate(${rotation}deg)` }) // 监听旋转事件 mc.on('rotate', (e) => { // 实现旋转 rotation = e.rotation element.style.transform = `translate(${posX}px, ${posY}px) scale(${scale}) rotate(${rotation}deg)` }) } } ``` 最后,在该组件的模板中添加一个div元素,并给其添加初始样式。 ``` <template> <div ref="element" style="width: 200px; height: 200px; background-color: red;"></div> </template> ``` 这样,当你在移动端上访问这个页面时,就可以拖拽、放大缩小和旋转这个div元素了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值