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

180 lines
4.8 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>
<style>
body,
ul,
li {
margin: 0;
padding: 0;
}
.main {}
.main ul {
overflow: hidden;
}
.main ul li {
display: flex;
height: 45px;
align-items: center;
position: relative;
padding: 0 15px;
border-bottom: 1px solid #f4f0f0;
transition-duration: 0.3s;
}
.main .item {
width: 100%;
}
.main .action {
display: flex;
align-items: center;
height: 100%;
position: absolute;
right: -180px;
}
.main .action .item {
height: 100%;
display: flex;
align-items: center;
justify-content: center;
padding: 0 14px;
color: #fff;
}
.action .top {
background: #c8c7cd;
}
.action .read {
background: #ff9c00;
}
.action .delete {
background: #ff3a31;
}
</style>
</head>
<body>
<div class="main">
<ul>
<li>
<div class="item">新闻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="item">新闻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="item">新闻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>9
<script>
var startX = 0;
_(".main li").forEach((v, i) => {
// v.open = false
v.addEventListener('touchstart', (e) => {
startX = e.targetTouches[0].screenX;
_(".main li").forEach((j, index) => {
if (index != i) {
j.style.transform = `translateX(0px)`;
}
})
console.log("startX: ", startX);
})
v.addEventListener('touchmove', (e) => {
var moveX = e.targetTouches[0].screenX;
console.log('moveX',moveX);
// 左滑
if (startX > moveX) {
if (!v.open) {
var x = moveX - startX
console.log("左滑:",);
v.style.transform = `translateX(${x < -180 ? -180 : x}px)`;
v.open = true
}
} else {
if (v.open) {
var newX = -180 + (moveX - startX)
v.style.transform = `translateX(${newX <= 0 ? newX : 0}px)`;
console.log("右滑");
}
}
})
v.addEventListener('touchend', (e) => {
var endX = e.changedTouches[0].screenX;
var ox = endX - startX;
console.log('endX',endX,);
// 左滑
if (startX > endX) {
if (ox > -60) {
v.style.transform = `translateX(0px)`;
v.open = false
} else {
v.style.transform = `translateX(-180px)`;
}
// 右滑
} else {
console.log("ox: ", ox);
if (ox > 60) {
v.style.transform = `translateX(0px)`;
v.open = false
} else {
v.style.transform = `translateX(-180px)`;
}
}
})
})
function $(className) {
return document.querySelector(className)
}
function _(className) {
return document.querySelectorAll(className)
}
</script>
</html>