當前項目有一個類似公告向上滾動的需求,在網上搜索到一個比較棒的程序,現摘錄如下:
//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控制權