touch 反弹

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<meta http-equiv="X-UA-Compatible" content="ie=edge">

<title>Document</title>

<style>

*{

margin: 0;

padding: 0;

}

html,body{

width:100%

}

aside{

height: 100%;

width:100%;

}

.draw{

width: 60px;

height: 500px;

border: 2px solid #ccc;

overflow: hidden;

position: fixed;

left: 10px;

top: 50%;

transform: translateY(-50%);

}

ul::after{

content: "";

display: block;

visibility: hidden;

height: 0;

clear: both;

 

}

ul{

zoom:1;

}

li{

list-style: none;

float: left;

width: 60px;

height: 60px;

line-height: 60px;

text-align: center;

border: 1px solid #494444;

box-sizing: border-box;

}

</style>

</head>

<body>

<aside class="main">

<div class="draw" id="draw">

<ul>

<li>列表1</li>

<li>列表2</li>

<li>列表3</li>

<li>列表4</li>

<li>列表5</li>

<li>列表6</li>

<li>列表7</li>

<li>列表8</li>

<li>列表9</li>

<li>列表10</li>

</ul>

</div>

</aside>

<script>

var draw = document.querySelector("#draw");

var ul = draw.children[0];

var startY = 0;

var centerY = 0;

var maxDown = 50;

var maxUp = -(ul.offsetHeight - draw.offsetHeight+maxDown)

var maxUpBounce = 0;

var maxDownBounce = -(ul.offsetHeight - draw.offsetHeight);

ul.addEventListener('touchstart',function(e){

startY = e.changedTouches[0].clientY;

})

ul.addEventListener('touchmove',function(e){

var dy = e.changedTouches[0].clientY - startY;

var tempY = centerY + dy;

if(tempY>maxDown){

tempY = maxDown;

}

if(tempY<maxUp){

tempY = maxUp;

}

ul.style.transform = 'translateY('+tempY+'px)';

})

ul.addEventListener('touchend',function(e){

var dy = e.changedTouches[0].clientY-startY;

centerY = centerY + dy;

if(centerY>maxUpBounce){

centerY=maxUpBounce;

ul.style.transition = 'transform .5s';

ul.style.transform = 'translateY('+centerY+'px)';

console.log('下拉')

}

if(centerY<maxDownBounce){

centerY=maxDownBounce;

ul.style.transition = 'transform .5s';

ul.style.transform = 'translateY('+centerY+'px)'

console.log('上拉')

}

})

</script>

</body>

</html>


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值