Js實現內容向上無縫循環滾動


當前項目有一個類似公告向上滾動的需求,在網上搜索到一個比較棒的程序,現摘錄如下:

//document.getElementById()的最簡化應用
function $(element) {
    if (arguments.length > 1) {
        for (var i = 0, length = arguments.length, elements = []; i < length; i++) {
            elements.push($(arguments[i]));
        }
        return elements;
    }
    if (typeof element == "string") {
        return document.getElementById(element);
    } else {
        return element;
    }
}
//類創建函數
var Class = {
    create: function () {
        return function () {
            this.initialize.apply(this, arguments);
        }
    }
}
//對象屬性方法擴展
Function.prototype.bind = function (object) {
    var method = this;
    return function () {
        method.apply(object, arguments);
    }
}
var Scroll = Class.create();
Scroll.prototype = {
    //第一個參數定義要滾動的區域,第二個參數定義每次滾動的高度,第三個參數定義每次滾動的時間間隔(按秒計算)
    initialize: function (element, height, delay) {
        this.element = $(element);
        this.element.innerHTML += this.element.innerHTML;
        this.height = height;
        this.delay = delay * 1000;
        this.maxHeight = this.element.scrollHeight / 2;
        this.counter = 0;
        this.scroll();
        this.timer = "";
        this.element.onmouseover = this.stop.bind(this);
        this.element.onmouseout = function () { this.timer = setTimeout(this.scroll.bind(this), 1000); }.bind(this);
    },
    scroll: function () {
        if (this.element.scrollTop < this.maxHeight) {
            this.element.scrollTop++;
            this.counter++;
        } else {
            this.element.scrollTop = 0;
            this.counter = 0;
        }

        if (this.counter < this.height) {
            this.timer = setTimeout(this.scroll.bind(this), 5);
        } else {
            this.counter = 0;
            this.timer = setTimeout(this.scroll.bind(this), this.delay);
        }
    },
    stop: function () {
        clearTimeout(this.timer);
    }
}
new Scroll('a', 22, 1) //適當調整第2和第3個參數呈現效果稍有差異

對應Html和Css如下:

ul {
    margin:100px;
    height:22px; border:1px solid red;
    overflow:hidden;
}
li {
    height:22px; line-height:22px; font-size:12px;
}

<ul id="a">
    <li>1-1</li>
    <li>1-2</li>
    <li>1-3</li>
    <li>1-4</li>
</ul>

在使用上面示例程序過程中注意下面這個自定義行為可能會與jQuery或其他Js庫或程序發生命名沖突

function $(element) {
  ......
}

解決方案1:將function $(element){......}重新命名
解決方案2:對於引入了jQuery庫的項目,可用jQuery.noConflict()方法讓渡變量$的jQuery控制權


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM