Files
ClassContent/历届学生/zheng-yuqing/项目练习/上课项目/js案例/侧滑.html
2024-09-27 02:06:13 +08:00

146 lines
4.0 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>侧滑</title>
<link rel="stylesheet" href="./css/clear.css">
<link rel="stylesheet" href="./css/cell.css">
</head>
<body>
<div class="main">
<ul>
<li>
<div class="left">
测试1
</div>
<div class="action">
<div class="item top">置顶</div>
<div class="item read">未读</div>
<div class="item delete">删除</div>
</div>
</li>
<li>
<div class="left">
测试2
</div>
<div class="action">
<div class="item top">置顶</div>
<div class="item read">未读</div>
<div class="item delete">删除</div>
</div>
</li>
<li>
<div class="left">
测试3
</div>
<div class="action">
<div class="item top">置顶</div>
<div class="item read">未读</div>
<div class="item delete">删除</div>
</div>
</li>
</ul>
</div>
</body>
<script>
var Li = _(".main ul li");
Li.forEach((v, i) => {
// 所有li标签未打开
v.isOpen = false;
// 手指按下
v.ontouchstart = (e) => {
console.log('ontouchstart',e);
// 保存你按下的坐标X点
var { pageX } = e.touches[0];
v.startX = pageX
Li.forEach((item,index) => {
if (index != i) {
item.style = `
transform: translateX(0px);
`
}
})
}
// 手指按下并移动
v.ontouchmove = (e) => {
console.log('ontouchmove',e);
var {pageX} = e.touches[0];
// 把滑动距离 toFixed 进行四舍五入,但是 toFixed 返回的是 string
// Number 进行 string 转 number
var translateX = Number((pageX - v.startX).toFixed())
// 左滑 打开
if (pageX < v.startX) {
v.style = `
transform: translateX(${translateX >= -180 ? translateX : -180}px);
`
v.isOpen = true
// 右滑 关闭
} else if (pageX > v.startX) {
var newX = -180 + translateX
if (v.isOpen) {
v.style = `
transform: translateX(${newX <= 0 ? newX : 0}px);
`
}
}
}
// 手指离开屏幕
v.ontouchend = (e) => {
console.log('ontouchend',e);
var endX = e.changedTouches[0].pageX;
// 左滑 打开
if (endX < v.startX) {
var ss = v.startX - endX
if (ss < 60) {
v.style = `
transform: translateX(0px);
`
v.isOpen = false
} else {
v.style = `
transform: translateX(-180px);
`
}
// 右滑 关闭
} else if (endX > v.startX) {
var ss = endX - v.startX
if (ss < 60) {
v.style = `
transform: translateX(-180px);
`
} else {
v.style = `
transform: translateX(0px);
`
v.isOpen = false
}
console.log("右滑 打开")
}
}
})
// 获取单个标签
function $(className) {
return document.querySelector(className)
}
// 获取多个标签
function _(className) {
return document.querySelectorAll(className)
}
</script>
</html>