文字走马灯的实现

/**
 *
 *  marqueeObject : 跑马灯对象 ul,
 *  marqueeDelay : 跑马灯滚动延时,
 *  marqueeHeight : 跑马灯区域高度,
 *  marqueeWidth : 跑马灯区域宽度
 *  isRecursive : 跑马灯是否无线循环滚动
 */

var marquee = (function(window,$){
    var _$marqueeObject,_$marqueeObjectList,
        _marqueeLength,_marqueeWidth,
        _options,_$marqueeId,
        _marqueeInterval1 = null,   //跑马灯延时效果的interval
        _marqueeInterval2 = null,   //跑马灯上下滚动的interval
        _currentIndex = 0,          //跑马灯当前展示的序号
        _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>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容