移动端左侧滑动原生js

2017-02-19  本文已影响0人  012ca771a446

js入口函数

window.onload = function(){
    /*调用函数*/
   leftCategory();
};

封装方法

function leftCategory() {
    // 1. 获取需要的标签
    var parentBox = document.getElementsByClassName('category_main_left')[0];
    var childBox = parentBox.getElementsByTagName('ul')[0];
    var parentH = parentBox.offsetHeight;
    var childH = childBox.offsetHeight;
    //console.log(parentH, childH);
    // 2. 确定合理的滚动区间
    var maxY = 0, minY = -(childH - parentH);
    // 3. 缓冲区间
    var buffer = 150;
    // 4. 过渡效果\清除过渡效果\位置的改变
    var addTransition = function () {
        childBox.style.transition = 'all .2s ease';
        /*兼容老版本的webkit内核*/
        childBox.style.webkitTransition = 'all .2s ease';
    };
    var removeTransition = function () {
        childBox.style.transition = 'none';
        /*兼容老版本的webkit内核*/
        childBox.style.webkitTransition = 'none';
    };
    var changeTranslateY = function (y) {
        childBox.style.transform = 'translateY(' + y + 'px)';
        childBox.style.webkitTransform = 'translateY(' + y + 'px)';
    };
    // 5.监听滑动
    var startY = 0, endY = 0, moveY = 0;
    var currentY = 0; // 记录当前y轴上的滚动位置

    childBox.addEventListener('touchstart', function (e) {
        // 5.1 获取起始位置
        startY = e.touches[0].clientY;
    });
    childBox.addEventListener('touchmove', function (e) {
        // 5.2 获取结束位置
        endY = e.touches[0].clientY;
        // 5.3 求出移动距离
        moveY = startY - endY;
        // 5.4 移除过渡效果
        if ((currentY - moveY) < (maxY + buffer) && (currentY - moveY) > (minY - buffer)) {
            removeTransition();
            changeTranslateY(currentY - moveY);
        }
    });
    childBox.addEventListener('touchend', function (e) {
        // 1.向下滑动
        if ((currentY - moveY) > maxY) {
            currentY = maxY;
            // 加过渡效果
            addTransition();
            // 改变位置
            changeTranslateY(currentY);
        } else if ((currentY - moveY) < minY) {
            currentY = minY;
            // 加过渡效果
            addTransition();
            // 改变位置
            changeTranslateY(currentY);
        } else {
            currentY = currentY - moveY;
        }
        // 2.清零
        startY = 0;
        endY = 0;
        moveY = 0;
    });
上一篇下一篇

猜你喜欢

热点阅读