<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,comments - 227,trackbacks - 0
     1. 滾動(dòng)

      以下是三種實(shí)現(xiàn)方式:

      1) 利用原生的css屬性 overflow: scroll

    <div id="parent" style="overflow:scroll;>
        <div id='content'>內(nèi)容區(qū)域</div>
    </div>

      Notice:

      在android 有bug, 滾動(dòng)完后會(huì)回退到最頂端的內(nèi)容區(qū)域,解決辦法是使用后兩種方式實(shí)現(xiàn)

      2)js 編程實(shí)現(xiàn)

      思路:對(duì)比手指在屏幕上移動(dòng)前后位置變化改變內(nèi)容元素content的位置

      第一步:設(shè)置parent的 overflow為hidden, 設(shè)置content的position為relative, top為0;

      第二步:監(jiān)聽touch事件

    var parent = document.getElementById('parent');

    parent.addEventListener('touchstart'function(e) {
        // do touchstart
    });
    parent.addEventListener('touchmove'function(e) {
        // do touchmove
    });
    parent.addEventListener('touchend'function(e) {
        // do touchend
    });

      第三步:實(shí)現(xiàn)滾動(dòng)代碼

    /**
     * 這里只實(shí)現(xiàn)垂直滾動(dòng)
     */

    var parent = document.getElementById('parent');
    var content = document.getElementById('content')
    var startY = 0; // 初始位置
    var lastY = 0; // 上一次位置

    parent.addEventListener('touchstart'function(e) {
        lastY = startY = e.touches[0].pageY;
    });
    parent.addEventListener('touchmove'function(e) {
        var nowY = e.touches[0].pageY;
        var moveY = nowY - lastY;
        var contentTop = content.style.top.replace('px''');
        // 設(shè)置top值移動(dòng)content
        content.style.top = (parseInt(contentTop) + moveY) + 'px';
        lastY = nowY;

    });
    parent.addEventListener('touchend'function(e) {
        // do touchend
        var nowY = e.touches[0].pageY;
        var moveY = nowY - lastY;
        var contentTop = content.style.top.replace('px''');
        // 設(shè)置top值移動(dòng)content
        content.style.top = (parseInt(contentTop) + moveY) + 'px';
        lastY = nowY;
    });

      第四步:優(yōu)化

      上邊代碼在手機(jī)上運(yùn)行效果相對(duì)PC上要卡很多

      優(yōu)化部分請(qǐng)參見:

      3) 使用iScroll4框架

      var scroll = new iScroll('parent', {

      hScrollbar: false,

      vScrollbar: true,

      checkDOMChanges : true

      });

      框架官網(wǎng):http://cubiq.org/iscroll-4

      2.慣性緩動(dòng)

      思路:取手指最后一段時(shí)間在屏幕上劃動(dòng)的平均速度v,讓v按一個(gè)遞減函數(shù)變化,直到不能移動(dòng)或v<=0

    /**
     * 這里只實(shí)現(xiàn)垂直滾動(dòng)
     */

    var parent = document.getElementById('parent');
    var content = document.getElementById('content')
    var startY = 0; // 初始位置
    var lastY = 0; // 上一次位置

    /**
     * 用于緩動(dòng)的變量
     */

    var lastMoveTime = 0;
    var lastMoveStart = 0;
    var stopInertiaMove = false// 是否停止緩動(dòng)

    parent.addEventListener('touchstart'function(e) {
        lastY = startY = e.touches[0].pageY;

        /**
         * 緩動(dòng)代碼
         */

        lastMoveStart = lastY;
        lastMoveTime = e.timeStamp || Date.now();
        stopInertiaMove = true;
    });
    parent.addEventListener('touchmove'function(e) {
        var nowY = e.touches[0].pageY;
        var moveY = nowY - lastY;
        var contentTop = content.style.top.replace('px''');
        // 設(shè)置top值移動(dòng)content
        content.style.top = (parseInt(contentTop) + moveY) + 'px';
        lastY = nowY;

        /**
         * 緩動(dòng)代碼
         */

        var nowTime = e.timeStamp || Date.now();
        stopInertiaMove = true;
        if(nowTime - lastMoveTime > 300) {
            lastMoveTime = nowTime;
            lastMoveStart = nowY;
        }
    });
    parent.addEventListener('touchend'function(e) {
        // do touchend
        var nowY = e.touches[0].pageY;
        var moveY = nowY - lastY;
        var contentTop = content.style.top.replace('px''');
        var contentY = (parseInt(contentTop) + moveY);
        // 設(shè)置top值移動(dòng)content
        content.style.top =  contentY + 'px';
        lastY = nowY;

        /**
         * 緩動(dòng)代碼
         */

        var nowTime = e.timeStamp || Date.now();
        var v = (nowY - lastMoveStart) / (nowTime - lastMoveTime); //最后一段時(shí)間手指劃動(dòng)速度
        stopInertiaMove = false;
        (function(v, startTime, contentY) {
            var dir = v > 0 ? -1 : 1; //加速度方向
            var deceleration = dir*0.0006;
            var duration = v / deceleration; // 速度消減至0所需時(shí)間
            var dist = v * duration / 2; //最終移動(dòng)多少
            function inertiaMove() {
                if(stopInertiaMove) return;
                var nowTime = e.timeStamp || Date.now();
                var t = nowTime-startTime;
                var nowV = v + t*deceleration;
                // 速度方向變化表示速度達(dá)到0了
                if(dir*nowV < 0) {
                    return;
                }
                var moveY = (v + nowV)/2 * t;
                content.style.top = (contentY + moveY) + 
    "px";
                setTimeout(inertiaMove, 10);
            }
            inertiaMove();
        })(v, nowTime, contentY);
    });

      本文來(lái)自zzm_justin的博客,原文地址:http://blog.csdn.net/zzm_justin/article/details/8476373

    posted on 2013-11-25 11:53 SIMONE 閱讀(2023) 評(píng)論(0)  編輯  收藏 所屬分類: JavaScript
    主站蜘蛛池模板: 亚洲砖码砖专无区2023| 免费看国产一级片| 亚洲一区二区女搞男| 永久中文字幕免费视频网站| 欧美最猛性xxxxx免费| 四虎在线最新永久免费| 24小时在线免费视频| 最近中文字幕大全中文字幕免费| 无码国产精品一区二区免费3p| 免费无码黄网站在线看| 97人妻精品全国免费视频| 久草免费手机视频| 99久9在线|免费| 蜜臀AV免费一区二区三区| 99久久精品日本一区二区免费 | 久久精品国产亚洲av影院| 亚洲欧洲国产精品你懂的| 国产成人精品高清免费| 爽爽日本在线视频免费| 国产女高清在线看免费观看| 免费国产人做人视频在线观看| 免费一级肉体全黄毛片| 亚洲男人天堂2020| 亚洲精品无码久久久久| 免费人成无码大片在线观看| 亚洲国产一成久久精品国产成人综合| 国产成人精品曰本亚洲79ren| 亚洲国产综合无码一区| 精品日韩亚洲AV无码| 亚洲日韩国产欧美一区二区三区| 青草久久精品亚洲综合专区| fc2免费人成在线| 免费女人高潮流视频在线观看| 亚洲免费一级视频| 日本免费网站观看| 成人毛片免费观看视频在线 | 久久精品成人免费观看97| 国内精品久久久久影院免费| 中文字幕免费在线看线人| 啦啦啦www免费视频| 国产亚洲自拍一区|