移动端下拉刷新头实现原理及代码实现

栏目: JavaScript · 发布时间: 6年前

内容简介:实现下拉刷新主要分为三步:HTML代码JS代码实现

下拉刷新实现原理

实现下拉刷新主要分为三步:

  1. 监听原生touchstart事件,记录其初始位置的值,e.touches[0].pageY;
  2. 监听原生touchmove事件,记录并计算当前滑动的位置值与初始位置值的差值,大于某个临界值时,显示下拉刷新头,并将页面的overflow属性,设置为false;
  3. 监听原生touchend事件,若此时元素滑动已经最大值,则进行刷新操作,操作结束后,将页面的overflow属性,设置为auto。

代码实现

HTML代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>下拉刷新</title>
    <style type="text/css">
        html,body, header,p,main,span,ul,li {
            margin: 0;
            padding: 0;
        }
        #refreshContainer li {
            background-color: rgba(5, 143, 62, 0.603);
            margin-bottom: 1px;
            padding: 30px 10px;
        }
        .refreshText {
            position: absolute;
            width: 100%;
            line-height: 80px;
            text-align: center;
            left: 0;
            top: 0;
            transform: translateY(-80px);
        }
    </style>
</head>
<body>
    <div class="parent">
        <p class="refreshText"></p>
        <ul id="refreshContainer">
            <li>000</li>
            <li>111</li>
            <li>222</li>
            <li>333</li>
            <li>444</li>
            <li>555</li>
            <li>666</li>
            <li>777</li>
            <li>888</li>
            <li>999</li>
        </ul>
    </div>
</body>  
</html>

JS代码实现

<script type="text/javascript">
    window.onload = function () {
        let container = document.querySelector('#refreshContainer');
        let refreshText = document.querySelector('.refreshText');
        let parent = document.querySelector('.parent');
        let startY = 0; //手指触摸最开始的Y坐标
        let endY = 0;   //手指结束触摸时的Y坐标
        let flag = false; //下拉刷新是否达到了临界值
        parent.addEventListener('touchstart', function (e) {
            startY = e.touches[0].pageY;
        });
        parent.addEventListener('touchmove', function (e) {
            if (isTop() && (e.touches[0].pageY - startY) > 50) {
                flag = true;
                document.body.style.overflow='hidden';
                refreshText.style.height = "80px";
                parent.style.transform = "translateY(80px)";
                parent.style.transition = "all ease 0.5s";
                refreshText.innerHTML = "释放立即刷新...";
            }
        });
        //松开手指
        parent.addEventListener('touchend', function (e) {
            if (isTop() && flag) {
                refreshText.innerHTML = "正在刷新...";
                //进行更新操作,更新结束后,结束下拉刷新
                setTimeout(function () {
                    parent.style.transform = "translateY(0)";
                    document.body.style.overflow = 'auto';
                }, 2000);
            }
        });
        //scrollTop没有滚过
        function isTop() {
            let t = document.documentElement.scrollTop || document.body.scrollTop;
            return t === 0 ? true : false;
        }
    }
</script>

注意 body 的 overflow 属性设置。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Ajax Design Patterns

Ajax Design Patterns

Michael Mahemoff / O'Reilly Media / 2006-06-29 / USD 44.99

Ajax, or Asynchronous JavaScript and XML, exploded onto the scene in the spring of 2005 and remains the hottest story among web developers. With its rich combination of technologies, Ajax provides a s......一起来看看 《Ajax Design Patterns》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试