一直想写个仿QQ通讯列表左滑删除的效果,今天终于忙里偷闲,简单一个.
大概思路是这样的:
通过
ontouchstart
ontouchmove
ontouchend
结合css3的平移.
不多说,直接上demo,如有错误希望看客老爷雅正.
html:
<div class="contain"> <ul> <li> <div id="list" class="list"> <div class="list_lf"><p>列表1</p></div> <div class="list_rt"><p>删除</p></div> </div> </li> <li> <div class="list"> <div class="list_lf"><p>列表2</p></div> <div class="list_rt"><p>删除</p></div> </div> </li> <li> <div class="list"> <div class="list_lf"><p>列表3</p></div> <div class="list_rt"><p>删除</p></div> </div> </li> <li> <div class="list"> <div class="list_lf"><p>列表4</p></div> <div class="list_rt"><p>删除</p></div> </div> </li> <li> <div class="list"> <div class="list_lf"><p>列表5</p></div> <div class="list_rt"><p>删除</p></div> </div> </li> <li> <div class="list"> <div class="list_lf"><p>列表6</p></div> <div class="list_rt"><p>删除</p></div> </div> </li> <li> <div class="list"> <div class="list_lf"><p>列表7</p></div> <div class="list_rt"><p>删除</p></div> </div> </li> <li> <div class="list"> <div class="list_lf"><p>列表8</p></div> <div class="list_rt"><p>删除</p></div> </div> </li> </ul> </div>
css:
.contain{ width: 200px; height: 500px; margin: 100px auto; border: 1px solid #dcdcdc; background-color: #f5f5f5; } .contain ul { margin: 0; padding: 0; float: left; list-style: none; } .contain ul li{ position: relative; width: 200px; height: 50px; border-bottom: 1px solid #000; overflow: hidden; } .contain ul li .list{ position: absolute; top: 0; left: 0; width: 251px; height: 100%; overflow: hidden; } .contain ul li .list div{ float: left; } .contain ul li .list .list_lf{ width: 200px; overflow: hidden; } .contain ul li .list .list_lf p{ width: 180px; padding-left: 20px; } .contain ul li .list .list_rt{ width: 50px; border-left: 1px solid #dcdcdc; text-align: center; }
js:
var li = document.getElementById('list'), spirit, startX, startY, x; // touch start listener function touchStart(event) { event.preventDefault(); if (! event.touches.length) return; var touch = event.touches[0]; startX = touch.pageX; startY = touch.pageY; } // add touch start listener li.addEventListener("touchstart", touchStart, false); function touchMove(event) { event.preventDefault(); if (!event.touches.length) return; var touch = event.touches[0]; x = touch.pageX - startX; // y = touch.pageY - startY; console.log(x); li.style.webkitTransform = 'translate(' + x + 'px)'; } li.addEventListener("touchmove", touchMove, false); function touchEnd(event){ if (x<0&&x>-30) { li.style.webkitTransform = 'translate(-51px)'; } if (x<-30) { li.style.webkitTransform = 'translate(-51px)'; }; if (x>0) { li.style.webkitTransform = 'translate(0px)'; }; } li.addEventListener("touchend", touchEnd, false);
等有时间再继续完善..原创,勿转.谢谢