html之js控制动态滚动条滚动

有些时候我们不希望滚动条滚动到底的太快,有一个过渡,又不想用匀速运动,希望有一个可控制的曲线。

//缓慢滚动滚动条
var _scrolling=false;
//缓慢滚动滚动条
function _scrollto(elc,target){
    if(!_scrolling){
        var now =$(elc)[0].scrollTop;
        var total =target-now; 
        if(total>0){
            _scrolling=true;
            var rateval =scrollrate(total);
            console.log(rateval);
            var tickindex= -1;
            var tickinter=setInterval(function(){
                tickindex ++;
                if(rateval[tickindex]>0){
                now = now+rateval[tickindex];
                $(elc).scrollTop(now);
                }
                if(tickindex>=rateval.length){
                    clearInterval(tickinter);
                     _scrolling=false;
                }
            },60);
        }
    }
}

function scrollrate(tnum) {

    //曲线概率,自己改
    var ratelist = [10,20,30,40,50,60,70,40,20,10];

    //计算随机数
    var _getrandom =function(minNum, maxNum) {
    switch (arguments.length) {
        case 1:
            return parseInt(Math.random() * minNum + 1, 10);
            break;
        case 2:
            return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10);
            break;
        default:
            return 0;
            break;
    }
}

    var back=[];
    var sumrate = 0;
    for (var k = 0; k < ratelist.length; k++) {
        sumrate += ratelist[k];
    }
    var result = new Map();

    var persize=1;
    if(tnum>100){
     persize = parseInt(tnum/100);
    }

    for (var k = 0; k < (tnum>100?100:tnum); k++) {
        //最大不超过100次           
        var hitval = _getrandom(0, sumrate);
        if (hitval > 0) {
            var hiti = ratelist.length - 1;
            var hitcount = 0;
            for (var i = 0; i < ratelist.length; i++) {
                if (ratelist[i] != 0) {
                    hitcount += ratelist[i];
                    if (hitcount >= hitval) {
                        hiti = i;
                        break;
                    }
                }
            }
            if (hiti < ratelist.length) {
                if (result.has(hiti)) {
                    var v = result.get(hiti);
                    result.set(hiti, (v + persize));
                } else {
                    result.set(hiti, persize);
                }
            }
        }
    }

    //可能还会有结余 处理结余
    if(tnum>100){
        var less = tnum-persize*100;
        if(less>0){
            persize=1;
            for (var k = 0; k < less; k++) {
                //最大不超过100次           
                var hitval = _getrandom(0, sumrate);
                if (hitval > 0) {
                    var hiti = ratelist.length - 1;
                    var hitcount = 0;
                    for (var i = 0; i < ratelist.length; i++) {
                        if (ratelist[i] != 0) {
                            hitcount += ratelist[i];
                            if (hitcount >= hitval) {
                                hiti = i;
                                break;
                            }
                        }
                    }
                    if (hiti < ratelist.length) {
                        if (result.has(hiti)) {
                            var v = result.get(hiti);
                            result.set(hiti, (v + persize));
                        } else {
                            result.set(hiti, persize);
                        }
                    }
                }
            }
        }
    }

    for (var k = 0; k < ratelist.length; k++) {
        if (result.has(k)) {
            back[k]=result.get(k);
        } else {
            back[k]=0;
        }
    }

    return back;
}

调用比如

_scrollto(".divscrollbox",1000);//表示.divscrollbox滚动到目标1000位置.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值