效果预览 (滑动部分,请将浏览器手机调试模式打开预览)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>移动端自定义侧滑菜单(滑动)</title>
<style>
* {
margin: 0;
padding: 0;
}
.page {
height: 100%;
}
.page-bottom {
height: 100%;
width: 100%;
position: fixed;
background-color: rgb(0, 68, 97);
z-index: 0;
}
.wc {
color: white;
/* padding: 30px 0 30px 40px; */
padding-left: 20px;
}
.wc div {
line-height: 60px;
border-bottom: 1px solid white;
}
.page-content {
padding-top: 100px;
}
.page-top {
height: 100%;
position: fixed;
width: 100%;
background-color: rgb(57, 125, 230);
z-index: 0;
/* transition: All 0.1s linear; */
}
.page-top img {
position: absolute;
width: 35px;
/* height: 38px; */
left: 20px;
top: 20px;
z-index: 111;
}
#btn {
transition: all 0.4s linear;
transform: rotate(0deg);
}
</style>
</head>
<body>
<div class="page">
<div class="page-bottom">
<div class="page-content">
<div class="wc">
<div>item1</div>
</div>
<div class="wc">
<div>item2</div>
</div>
<div class="wc">
<div>item3</div>
</div>
<div class="wc">
<div>item4</div>
</div>
</div>
</div>
<div id="move" class="page-top draggable">
<img id="btn" src="images/7qmY.png" />
</div>
</div>
<script>
(function () {
var mark = 0; // 拖动起点
var newMark = 0; // 拖动终点
var open = false; // 展开状态
var el = document.getElementById('move');
var elBtn = document.getElementById('btn');
var width = document.body.clientWidth;
var changeWidth = width * 0.2;
elBtn.onclick = function (e) {
e.stopPropagation();
if (open) {
el.style.cssText = "transition: All 0.4s linear; transform: translate3d(0px,0,0);"
} else {
el.style.cssText = "transition: All 0.4s linear; transform: translate3d(300px,0,0);"
}
open = !open;
}
function touchmove(e) {
newMark = e.touches[0].pageX
var moveX = Math.ceil(newMark - mark);
if (open) {
if (moveX > 0) {
return
}
moveX += 300
}
if (moveX > 0) {
el.style.cssText = "transform: translate3d(" + moveX + "px,0,0);"
}
}
function touchstart(e) {
mark = newMark = e.touches[0].pageX;
}
function touchend(e) {
if (!e.target.classList.contains("draggable")) {
return;
}
var moveX = Math.abs(newMark - mark);
if (open) { // 已打开
if (moveX > changeWidth) {
el.style.cssText = "transition: All 0.2s linear; transform: translate3d(0px,0,0);"
open = !open
} else {
el.style.cssText = "transition: All 0.2s linear; transform: translate3d(300px,0,0);"
}
} else {
if (moveX > changeWidth) {
el.style.cssText = "transition: All 0.2s linear; transform: translate3d(300px,0,0);"
open = !open
} else {
el.style.cssText = "transition: All 0.2s linear; transform: translate3d(0px,0,0);"
}
}
mark = 0
newMark = 0
}
el.addEventListener('touchmove', touchmove, false);
el.addEventListener('touchstart', touchstart, false);
el.addEventListener('touchend', touchend, false);
}())
</script>
</body>
</html>