移动端-纵向惯性移动

借助前期封装的transformCSS.js

<script src="transformCSS.js"></script>

css

<style>
        * {
            padding: 0;
            margin: 0;
        }
        
        #header {
            height: 10vh;
            background: rgba(0, 0, 0, 0.8);
            text-align: center;
            line-height: 10vh;
            color: white;
            font-size: 20px;
        }
        
        #main {
            width: 100vw;
            height: 90vh;
            overflow: hidden;
        }
        
        ul li {
            box-sizing: border-box;
            height: 10vh;
            line-height: 10vh;
            font-size: 16px;
            padding-left: 10px;
            border-top: 1px solid #ddd;
            border-bottom: 1px solid #ddd;
        }
    </style>

 

html

<div id="app">
        <div id="header">通讯录</div>
        <main id="main">
            <ul id="content"></ul>
        </main>
    </div>

javascript

<script>
        // 获取变量
        var app = document.querySelector('#app');
        var main = document.querySelector('#main');
        var content = document.querySelector('#content');
        // 添加内容
        var names = ['勾诗桃', '连盼山', '咸从筠', '许雅容', '徐云霞', '晏新苗', '文星星', '许忆雪', '禄芷秀', '须苇然', '晃觅风', '万雅晗', '贡合瑞', '廖珺琪', '沈安蕾', '杨安波', '朱天悦', '卓梓美', '车妍妍', '潘晓彤', '幸平乐', '须惜香', '邵令美', '逢千束', '通怜珊', '苍语雪', '堵鸣晨', '汤红叶', '彭荏苒', '龙秋芸', '沃香巧', '从列琴', '潘平安', '禄秋芸'];
        names.forEach(function(name) {
            var li = document.createElement('li');
            li.innerHTML = name;
            content.appendChild(li);
        });
        // 添加touch事件
        main.addEventListener('touchstart', function(event) {
            main.t = transformCSS(content, 'translateY');
            main.y = event.changedTouches[0].clientY;
            main.startTIme = Date.now();
            content.style.transition = 'none';
        });
        main.addEventListener('touchmove', function(event) {
            main._y = event.changedTouches[0].clientY;
            newTop = main._y - main.y + main.t;
            transformCSS(content, 'translateY', newTop);
        });
        main.addEventListener('touchend', function(even) {
            // 惯性移动
            // 结束事件
            main.endTime = Date.now();
            // 元素结束位置
            main._y = event.changedTouches[0].clientY;
            // 距离差
            var distanceY = main._y - main.y;
            // 时间
            var distanceTime = main.endTime - main.startTIme;
            // 判断停留时间 时间过短则直接跳出 不执行后面的代码
            if (distanceTime >= 300) {
                return;
            }
            // 速度
            var v = distanceY / distanceTime;
            // 距离
            var s = v * 200;
            // 元素结束时偏移量
            var translateY = transformCSS(content, 'translateY');
            // 惯性移动后的距离
            translateY += s;
            // 设置css样式
            content.style.transition = 'all 5s ease-out';
            transformCSS(content, 'translateY', translateY);

        });
    </script>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值