第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

咱一起來(lái)寫(xiě)一個(gè)卷軸控件吧

        我们先看一看这个卷轴控件实现了什么。

        它的功能呢很简单:

                1、能根据后台的数据实时的展示出来(我这里的话用了随机数代替,可自行替换)

                2、这里有5个卡片,每个卡片是独立的,当新的数据较原数据大时,卡片从下方顶起,当数据较小时,卡片从上方掉落。

                3、写完后自己看着还蛮像是抽奖的。

https://img3.sycdn.imooc.com/5bad0ba70001d64004810155.jpg

        要源码的请点击这里:github地址

        要看效果的去这里:演示地址

接下来呢,我大致说下实现这个的思路:其实需要注意的点不多,思路大概是这样:

        总思路:用5个原先藏好的标签填入新数据,再把原标签顶掉。

        上面看到了吧?而实际上是这样的:

https://img1.sycdn.imooc.com//5bad7c2c00017a9806770314.jpg

        把超出的隐藏掉,整个就达到我们的效果了。

        1、得有个数据处理器,或者说写一个函数,把一个数据转成一个个位数的数字,用来做卡片单元

https://img4.sycdn.imooc.com/5bad0fb70001485c07050597.jpg

        2、得有个机制用于比对新数每一位与旧数的大小关系,并做不同的输出,比如新比旧的大输出1,反之输出0,我这顺便做了点样式调整。

https://img1.sycdn.imooc.com/5bad0feb00018ac409260451.jpg

        3、有了上面的判断,还得有一个样式调整与归原,什么意思呢?首先我们一开始有个初始值,我们的卷轴是卡片这样划进划出的吧?那新数替换了旧数之后,实际上新数就变成了旧数,这时候呢,我们是不是又回到了起点(这时候的新数看成是初始值),但这时候的类名都变了,不怕,全部归原后,再重新开始下一个循环卷动。

https://img1.sycdn.imooc.com/5bad11190001a9e708660446.jpg

        4、最后的话呢再设置一个定时器,做循环就好了。

这里就贴一下js的代码吧:

/**
 *  卷轴控件
 *  @author:dorseyCh
 *  @date:2018-09-13
***/
(function(win){

    var Scroll = function(option){
        this.option = option;
    };

    Scroll.prototype = {
        //初始化
        init : function(){
            this.oldData = 900;
            this.newData = 800;
            this.arrOld = [0,0,9,0,0];
            this.arrNew = [0,0,8,0,0];
            this.direction = [];
            this.styleReturn();
        },
        //数据生成器 ———— 配合后台则需要异步接收到数据
        dataGet : function () {
            return Math.floor(Math.random() * 99999);
        },
        //数据处理
        dataSolve : function () {

            var num = this.option.num;
            var newData = this.dataGet(),
                oldData = this.newData;

            this.newData = newData;
            var arrOld = [],arrNew = [];
            for(var i = 0 ; i < num ; i ++) {
                arrOld[num - 1 - i] = (parseInt(oldData) % 10);
                // if(parseInt(newData) % 10 !== parseInt(oldData) % 10){
                arrNew[num - 1 - i] = (parseInt(newData) % 10);
                // }
                newData = Math.floor(newData / 10);
                oldData = Math.floor(oldData / 10);
            }
            this.arrOld = arrOld;
            this.arrNew = arrNew;
            this.oldData = this.newData;
            
        },
        //数据展示
        dataDisplay : function (){
            var _self = this;
            var $li = _self.option.dom.find("li");
            _self.direction = [];

            for(var i = 0 ; i < _self.option.num ; i ++){

                //新数据与旧数据对比,较大时,div-hide瞬移到div-on的下方,反之则上方,同时返回一个数组表示接下来li要移动的方向
                // if(_self.arrNew[i] !== '') {
                    _self.arrOld[i] > _self.arrNew[i] ? 
                    ($li.eq(i).find('.s-hide').attr("class","s-hide s-top"), _self.direction.push('bottom')) : 
                    ($li.eq(i).find('.s-hide').attr("class","s-hide s-bottom"), _self.direction.push('top'));
                // }
                // else{
                //     _self.direction.push('');
                // }
                $li.eq(i).find('.s-on').html(_self.arrOld[i]);
                $li.eq(i).find('.s-hide').html(_self.arrNew[i]);
            }

        },
        //添加动画
        animate : function () {
            var _self = this;           
            var $li = this.option.dom.find('li');
            
            $li.each(function(i){
                $li.eq(i).css("transition", 0.5 * ($li.length - i) + "s").attr("class","s-" + _self.direction[i]);
            });
        },
        //样式归原
        styleReturn : function () {
            var _self = this;
            var $li = _self.option.dom.find("li");
            
            for(var i = 0 ; i < _self.option.num ; i ++){
                $li.eq(i).find('.s-on').html(_self.arrNew[i]);
                $li.eq(i).find('.s-hide').html(_self.arrOld[i]);
            }

            $li.css("transition","").attr('class','');
            $li.find(".s-on").attr("class","s-on"),
            $li.find(".s-hide").attr("class","s-hide s-bottom");
            
        },
        run : function () {
            var _self = this;
            _self.init();
            
            setInterval(function(){
                //这里暂时想不到更好的办法,先勉强这样
                _self.styleReturn();    //数据还原
                setTimeout(function(){
                    _self.dataSolve();      //数据处理
                    _self.dataDisplay();    //数据展示
                    _self.animate();
                },100);
            },_self.option.delay);
        }
    }

    win.Scroll = Scroll;

})(window);






點(diǎn)擊查看更多內(nèi)容
5人點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
Web前端工程師
手記
粉絲
1.3萬(wàn)
獲贊與收藏
1519

關(guān)注作者,訂閱最新文章

閱讀免費(fèi)教程

感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消