文字走馬燈的實(shí)現(xiàn)

/**
 *
 *  marqueeObject : 跑馬燈對(duì)象 ul,
 *  marqueeDelay : 跑馬燈滾動(dòng)延時(shí),
 *  marqueeHeight : 跑馬燈區(qū)域高度,
 *  marqueeWidth : 跑馬燈區(qū)域?qū)挾? *  isRecursive : 跑馬燈是否無(wú)線循環(huán)滾動(dòng)
 */

var marquee = (function(window,$){
    var _$marqueeObject,_$marqueeObjectList,
        _marqueeLength,_marqueeWidth,
        _options,_$marqueeId,
        _marqueeInterval1 = null,   //跑馬燈延時(shí)效果的interval
        _marqueeInterval2 = null,   //跑馬燈上下滾動(dòng)的interval
        _currentIndex = 0,          //跑馬燈當(dāng)前展示的序號(hào)
        _previousScrollUp,
//        _$marqueeItemWidthList,


        _init = function(options){
            _options = $.extend({
                marqueeDelay : 3000,
                isRecursive : true
            },options || {});
//            console.log(_options);

            _$marqueeObject = _options.marqueeObject;
            _$marqueeObjectList = _$marqueeObject.find("li");
            _marqueeLength = _$marqueeObject.children().length;
            _marqueeWidth = _options.marqueeWidth;
            _options._marqueeHeight = _$marqueeObject.find("li").height();

            var firestItemchildrenWidth = _getItemChildrenWidth(_currentIndex);
            if(firestItemchildrenWidth > _marqueeWidth){
                var gap = firestItemchildrenWidth - _marqueeWidth
                _scrollSingleNews(_currentIndex);
            }else{
                _marqueeInterval1 = setInterval(_startMarquee,_options.marqueeDelay);
            }

//        _bindEvent();

        },
//    _bindEvent = function(){
//        _$marqueeObject.find("li").on('swipeUp',function(){
//            console.log("trigger -- swipeUp");
//        });
//
//        _$marqueeObject.find("li").on('touchstart',function(e){
//            console.log("trigger -- touchmove");
//            console.log(e);
//        });
//
//
//        _$marqueeObject.find("li").on('touchmove',function(e){
//            console.log("trigger -- touchmove");
//            console.log(e);
//        });
//
//
//        _$marqueeObject.find("li").on('touchend',function(e){
//            console.log("trigger -- touchmove");
//            console.log(e);
//        });
//
//    },
//
        _startMarquee = function(){
            clearInterval(_marqueeInterval2);
            if(_options.isRecursive){
                _marqueeInterval2 = setInterval(_scrollMarquee2,20);
            }else{
                _marqueeInterval2 = setInterval(_scrollMarquee,20);
            }

        },

        _scrollMarquee = function(){
            _previousScrollUp = _$marqueeObject.scrollTop();
            _$marqueeObject.scrollTop(_previousScrollUp+1);
//            console.log(_$marqueeObject.scrollTop()%_options._marqueeHeight);
//            console.log(_options._marqueeHeight - 1);

            if(_$marqueeObject.scrollTop()%_options._marqueeHeight==_options._marqueeHeight - 1 || _previousScrollUp == _$marqueeObject.scrollTop()){
                //console.log(_$marqueeObject.scrollTop());
                //console.log(_options._marqueeHeight - 1);
                //console.log("end--------");
                clearInterval(_marqueeInterval2);
                _currentIndex++;
                var previousItem = _$marqueeObjectList[_currentIndex  - 1];
                $(previousItem).css("margin-left","0px");

                if(_currentIndex == _marqueeLength){
                    console.log("start again--------");
                    //_$marqueeObject.animate({scrollTop: '0px'}, 800);
                    _$marqueeObject.scrollTop(0);
                    _currentIndex = 0;
                }
                _scrollSingleNews(_currentIndex)
            }
        },
        _scrollMarquee2 = function(){
            _previousScrollUp = _$marqueeObject.scrollTop();
            _$marqueeObject.scrollTop(_previousScrollUp+1);
            if(_$marqueeObject.scrollTop()%_options._marqueeHeight==_options._marqueeHeight - 1 || _previousScrollUp == _$marqueeObject.scrollTop()){
                clearInterval(_marqueeInterval2);
                _currentIndex++;
                var previousItem = _$marqueeObjectList[_currentIndex  - 1];
                $(previousItem).css("margin-left","0px");
                $(previousItem).remove();
                _$marqueeObject.append($(previousItem));


                var domNodes = Array.prototype.slice.call(_$marqueeObjectList);
                domNodes.push(domNodes.shift());
                _$marqueeObjectList = domNodes;
//                console.log(domNodes);
                _previousScrollUp = 0;
                _$marqueeObject.scrollTop(_previousScrollUp);
                _currentIndex--;
                _scrollSingleNews(_currentIndex);

            }
        },
        _scrollSingleNews = function(index){
            var topNewsItem = _$marqueeObjectList[index];
//            console.log(index);
//            console.log(topNewsItem);
            var childrenWidth = _getItemChildrenWidth(index);
            if(childrenWidth > _marqueeWidth){
//                console.log("out of range");
                var overflowWidth = childrenWidth - _marqueeWidth;
                clearInterval(_marqueeInterval1);
                $(topNewsItem).animate({"margin-left":overflowWidth * -1 + "px"},{ duration: 9000, queue: false, complete: function() { _marqueeInterval1 = setInterval(_startMarquee,_options.marqueeDelay);  } });
            }

        },
        _getItemChildrenWidth = function(index){
            var topNewsItem = _$marqueeObjectList[index];
            var chidrenWidth = 0;
            $.each(topNewsItem.children, function(index,value){
                chidrenWidth+= $(value).width();
            })
            return chidrenWidth;
        }

    return {
        init : function(options){
            _init(options);
        }
    }
}( window,Zepto));
 var $topNews = $(".topNewsContent");
    var topNewsContentWidth = $(".topNews").width() - ( $topNews.offset().left - $(".topNewsHead").offset().left) ;
    var topNewsContentHeight = $topNews.find("li").height();
    marqueeHandler.init({
        marqueeObject : $topNews,
        marqueeDelay : 2000,
        marqueeHeight : topNewsContentHeight,
        marqueeWidth : topNewsContentWidth
    });


.topNewsSection {
  background-color: #f3f4f5;
  position: relative;
  .topNews{
    text-align: left;
    font-size: 1.6rem;
    margin: 0;
    background-color: #f3f4f5;
    white-space: nowrap;
    overflow: hidden;
    .topNewsHead {
      color: #DC137D;
      border-right: 1px solid;
      padding-right: .3rem;
      border-color: #CACACA;
      font-size: 1.3rem;
      display: inline-block;
      vertical-align: text-top;
      line-height: 2.3rem;
    }

    .noticeIcon {
      background: url("../../images/icon_notice.png") no-repeat;
      width: 1rem;
      height: 1rem;
      display: inline-block;
      background-size: 100%;
      margin-left: 5px;
      vertical-align: text-top;
      margin-top: 0.6rem;
    }

    .topNewsContent {
      font-size: .7rem;
      display: inline-block;
      position: relative;
      /* left: 8.5rem; */
      //top: 8px;
      height: 2.3rem;
      overflow: hidden;
      vertical-align: text-top;
      li {
        position: relative;
        white-space: nowrap;
        font-size: .3rem;
        color: #666;
        a {
          line-height: 2.3rem;
          font-size: 1rem;
        }
      }
    }
  }
}


<section class="topNewsSection">
        <span class="topNewsHead" style="display:none"></span>

        <div class="topNews">
            <span class="noticeIcon"></span>
            <ul class="topNewsContent">
                <#list rotationNewsInfoList as rotationNews >
                    <li><a
                        <#assign url="${rotationNews.url!''}">
                        <#if url!=''> href="${url}"</#if>
                          >${rotationNews.text}</a>
                        <a class="topNewsHypertext"
                            <#if url!=''> href="${url}"</#if>
                           >${rotationNews.hypertext}</a></li>
                </#list>
            </ul>

        </div>
    </section>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末硬爆,一起剝皮案震驚了整個(gè)濱河市秋柄,隨后出現(xiàn)的幾起案子钥屈,更是在濱河造成了極大的恐慌郭厌,老刑警劉巖铲球,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宜岛,死亡現(xiàn)場(chǎng)離奇詭異霜旧,居然都是意外死亡棚潦,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)疮跑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)组贺,“玉大人,你說(shuō)我怎么就攤上這事祖娘∈Ъ猓” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)掀潮。 經(jīng)常有香客問(wèn)我菇夸,道長(zhǎng),這世上最難降的妖魔是什么仪吧? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任庄新,我火速辦了婚禮,結(jié)果婚禮上薯鼠,老公的妹妹穿的比我還像新娘择诈。我一直安慰自己,他們只是感情好出皇,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布羞芍。 她就那樣靜靜地躺著,像睡著了一般郊艘。 火紅的嫁衣襯著肌膚如雪涩金。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天暇仲,我揣著相機(jī)與錄音步做,去河邊找鬼。 笑死奈附,一個(gè)胖子當(dāng)著我的面吹牛全度,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播斥滤,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼将鸵,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了佑颇?” 一聲冷哼從身側(cè)響起顶掉,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎挑胸,沒(méi)想到半個(gè)月后痒筒,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡茬贵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年簿透,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片解藻。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡老充,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出螟左,到底是詐尸還是另有隱情啡浊,我是刑警寧澤觅够,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站巷嚣,受9級(jí)特大地震影響蔚约,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜涂籽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望砸抛。 院中可真熱鬧评雌,春花似錦、人聲如沸直焙。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)奔誓。三九已至斤吐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間厨喂,已是汗流浹背和措。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蜕煌,地道東北人派阱。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像斜纪,于是被迫代替她去往敵國(guó)和親贫母。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容