• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    來自騰訊的一個不固定高度得消息的滾動特效_javascript技巧

    來源:懂視網 責編:小采 時間:2020-11-27 20:54:46
    文檔

    來自騰訊的一個不固定高度得消息的滾動特效_javascript技巧

    來自騰訊的一個不固定高度得消息的滾動特效_javascript技巧: #msg_weibo {width:300px;height:186px;*height:186px;_height:170px;margin:10px auto 0;zoom:1; overflow:hidden;font-size:12px;line-height:20px;margin-bottom:4px;background:#ffffff;} #msg_weibo a{margin-right:6px;color:#003C71;text-decor
    推薦度:
    導讀來自騰訊的一個不固定高度得消息的滾動特效_javascript技巧: #msg_weibo {width:300px;height:186px;*height:186px;_height:170px;margin:10px auto 0;zoom:1; overflow:hidden;font-size:12px;line-height:20px;margin-bottom:4px;background:#ffffff;} #msg_weibo a{margin-right:6px;color:#003C71;text-decor


    [Ctrl+A 全選 注:如需引入外部Js需刷新才能執行]
    看關鍵的js code:
    代碼如下:
    var $ = function (d){
    typeof d == "string" &&(d = document.getElementById(d));
    return $.fn.call(d);
    };
    $.fn = function (){
    this.addEvent = function (sEventType,fnHandler){
    if (this.addEventListener) {this.addEventListener(sEventType, fnHandler, false);}
    else if (this.attachEvent) {this.attachEvent("on" + sEventType, fnHandler);}
    else {this["on" + sEventType] = fnHandler;}
    }
    this.removeEvent = function (sEventType,fnHandler){
    if (this.removeEventListener) {this.removeEventListener(sEventType, fnHandler, false);}
    else if (this.detachEvent) {this.detachEvent("on" + sEventType, fnHandler);}
    else { this["on" + sEventType] = null;}
    }
    return this;
    };
    var Class = {create: function() {return function() { this.initialize.apply(this, arguments); }}};
    var Bind = function (obj,fun,arr){return function() {return fun.apply(obj,arr);}}
    var Marquee = Class.create();
    Marquee.prototype = {
    initialize: function(id,name,out,speed) {
    this.name = name;
    this.box = $(id);
    this.out = 3;//滾動間隔時間,單位秒
    this.speed = speed;
    this.d = 1;
    this.box.style.position = "relative";
    this.box.scrollTop = 0;
    var _li = this.box.firstChild;
    while(typeof(_li.tagName)=="undefined")_li = _li.nextSibling;
    this.lis = this.box.getElementsByTagName(_li.tagName);
    this.len = this.lis.length;
    for(var i=0;ivar __li = document.createElement(_li.tagName);
    __li.innerHTML = this.lis[i].innerHTML;
    this.box.appendChild(__li);//cloneNode
    if(this.lis[i].offsetTop>=this.box.offsetHeight)break;
    }
    this.Start();
    this.box.addEvent("mouseover",Bind(this,function(){clearTimeout(this.timeout);},[]));
    this.box.addEvent("mouseout",Bind(this,this.Start,[]));
    },
    Start:function (){
    clearTimeout(this.timeout);
    this.timeout = setTimeout(this.name+".Up()",this.out*1000)
    },
    Up:function(){
    clearInterval(this.interval);
    this.interval = setInterval(this.name+".Fun()",10);
    },
    Fun:function (){
    this.box.scrollTop+=this.speed;
    if(this.lis[this.d].offsetTop <= this.box.scrollTop){
    clearInterval(this.interval);
    this.box.scrollTop = this.lis[this.d].offsetTop;
    this.Start();
    this.d++;
    }
    if(this.d >= this.len + 1){
    this.d = 1;
    this.box.scrollTop = 0;
    }
    }
    };
    $(window).addEvent("load",function (){
    marquee = new Marquee("msg_weibo","marquee",1,2);
    });

    實現思路與以前的文字滾動是一樣的,都是先充滿當前容器,再通過scrollTop++往上滾的,只不過他是每次滾動的距離不是固定的,是取當前滾動消息的高度。由于scrollTop(滾出當前可視區域的高度)和offsetTop(距離父節點頂部的距離,常用于取某元素在頁面的坐標位置)的區別,所以通過 if(this.lis[this.d].offsetTop <= this.box.scrollTop)來判斷是否滾動完上條消息,需要停頓下了。

    我覺得亮點之處在于$的寫法。通常Prototype里也就取下obj||document.getElementById('objId'),他這里除此外還幫obj綁定了一些方法。他的作用是不是類似于原型擴展String、Array等對象的方法呢。這個可以借鑒。
    另外,他初始化時填充容器時用document.createElement->賦innerHTML->appendChild來做,我覺的不如直接cloneNode(true)->appendChild好,如不對,歡迎指正。

    主要還是填下這個月的坑,哈哈。

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    來自騰訊的一個不固定高度得消息的滾動特效_javascript技巧

    來自騰訊的一個不固定高度得消息的滾動特效_javascript技巧: #msg_weibo {width:300px;height:186px;*height:186px;_height:170px;margin:10px auto 0;zoom:1; overflow:hidden;font-size:12px;line-height:20px;margin-bottom:4px;background:#ffffff;} #msg_weibo a{margin-right:6px;color:#003C71;text-decor
    推薦度:
    標簽: QQ 騰訊 消息的
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 免费视频成人国产精品网站| 欧美成人精品高清在线播放| 精品欧美激情在线看| 久久Av无码精品人妻系列| 久久久精品人妻无码专区不卡| 四虎4hu永久免费国产精品| 久久精品人人槡人妻人人玩AV| 四虎亚洲国产成人久久精品| 91国内揄拍国内精品对白不卡| 国产成人精品无码一区二区| 一本色道久久88—综合亚洲精品| 亚洲精品成人片在线播放| 99久久精品九九亚洲精品| 潮喷大喷水系列无码久久精品| 亚洲精品成人片在线播放| 亚洲国产精品视频| 国产精品视频免费一区二区| 91精品一区二区综合在线| 久久福利青草精品资源站| 国产成人亚洲综合无码精品| 亚洲欧美激情精品一区二区| 日韩精品无码永久免费网站| 久久精品无码一区二区三区日韩 | 国产成人AV无码精品| 国产成人精品男人的天堂538| 无码精品久久久久久人妻中字| 亚洲精品国产精品乱码不卞| 久久国产热这里只有精品| 国产情侣大量精品视频| 国产精品gz久久久| 99热精品久久只有精品| 亚洲午夜精品一区二区| 久久亚洲国产午夜精品理论片| 99热这里只有精品在线| 8AV国产精品爽爽ⅴa在线观看| 国产成人精品亚洲精品| 99热成人精品免费久久| 国产综合免费精品久久久| 久热精品视频第一页| 日韩欧美一区二区三区中文精品 | 岛国精品一区免费视频在线观看 |