
一、主要HTML代码:

二、主要的CSS样式

三、面向对象的形式书写javaScript
1、创建滚动条方法:
function createScroll() {
this.doc = document;
this._wheelData = -1;
this.init.apply(this, arguments);
}2、初始化滚动条:
init: function(mainBox, contentBox, className) {
var mainBox = this.doc.getElementById(mainBox);
var contentBox = this.doc.getElementById(contentBox);
var scrollDiv = this._createScroll(mainBox, className);
this._resizeScorll(scrollDiv, mainBox, contentBox);
this._tragScroll(scrollDiv, mainBox, contentBox);
this._wheelChange(scrollDiv, mainBox, contentBox);
this._clickScroll(scrollDiv, mainBox, contentBox);
},3、创建滚动条基本元素:
_createScroll: function(mainBox, className) {
var _scrollBox = this.doc.createElement('div')
var _scroll = this.doc.createElement('div');
var span = this.doc.createElement('span');
_scrollBox.appendChild(_scroll);
_scrollBox.className = 'scroll';
_scroll.appendChild(span);
_scroll.className = className;
mainBox.appendChild(_scrollBox);
return _scroll;
},4、页面加载调整滚动条:
_resizeScorll: function(element, mainBox, contentBox) {
var eleNode = element.parentNode;
var conHeight = contentBox.offsetHeight;
var _width = mainBox.clientWidth;
var _height = mainBox.clientHeight;
var _scrollWidth = element.offsetWidth;
var _left = _width - _scrollWidth;
eleNode.style.width = _scrollWidth + "px";
eleNode.style.height = _height + "px";
eleNode.style.left = _left + "px";
eleNode.style.position = "absolute";
eleNode.style.background = "#ccc";
contentBox.style.width = (mainBox.offsetWidth - _scrollWidth + 10) + "px";
var _scrollHeight = parseInt(_height * (_height / conHeight));
if (_scrollHeight >= mainBox.clientHeight) {
element.parentNode.style.display = "none";
}
element.style.height = _scrollHeight + "px";
},5、定义鼠标拖动滚动条方法:
_tragScroll: function(element, mainBox, contentBox) {
var mainHeight = mainBox.clientHeight;
element.onmousedown = function(event) {
var _this = this;
var _scrollTop = element.offsetTop;
var e = event || window.event;
var top = e.clientY;
//this.onmousemove=scrollGo;
document.onmousemove = scrollGo;
document.onmouseup = function(event) {
this.onmousemove = null;
}
function scrollGo(event) {
var e = event || window.event;
var _top = e.clientY;
var _t = _top - top + _scrollTop;
if (_t > (mainHeight - element.offsetHeight)) {
_t = mainHeight - element.offsetHeight;
}
if (_t <= 0) {
_t = 0;
}
element.style.top = _t + "px";
contentBox.style.top = -_t * (contentBox.offsetHeight / mainBox.offsetHeight) + "px";
this._wheelData = _t;
}
}
element.onmouseover = function() {
this.style.background = "#1b4f63";
}
element.onmouseout = function() {
this.style.background = "#2c8cab";
}
},6、定义鼠标滚轮滚动,滚动条滚动:
_wheelChange: function(element, mainBox, contentBox) {
var node = typeof mainBox == "string" ? $(mainBox) : mainBox;
var flag = 0,
rate = 0,
wheelFlag = 0;
if (node) {
this._mouseWheel(node, function(data) {
wheelFlag += data;
if (this._wheelData >= 0) {
flag = this._wheelData;
element.style.top = flag + "px";
wheelFlag = this._wheelData * 12;
this._wheelData = -1;
} else {
flag = wheelFlag / 12;
}
if (flag <= 0) {
flag = 0;
wheelFlag = 0;
}
if (flag >= (mainBox.offsetHeight - element.offsetHeight)) {
flag = (mainBox.clientHeight - element.offsetHeight);
wheelFlag = (mainBox.clientHeight - element.offsetHeight) * 12;
}
element.style.top = flag+ "px";
contentBox.style.top = -flag * (contentBox.offsetHeight / mainBox.offsetHeight) + "px";
});
}
},7、定义鼠标点击滚动条方法:
_clickScroll: function(element, mainBox, contentBox) {
var eleNode = element.parentNode;
eleNode.onclick = function(event) {
var e = event || window.event;
var t = e.target || e.srcElement;
var sTop = document.documentElement.scrollTop > 0 ? document.documentElement.scrollTop : document.body.scrollTop;
var top = mainBox.offsetTop;
var _top = e.clientY + sTop - top - element.offsetHeight / 2;
if (_top <= 0) {
_top = 0;
}
if (_top >= (mainBox.clientHeight - element.offsetHeight)) {
_top = mainBox.clientHeight - element.offsetHeight;
}
if (t != element) {
element.style.top = _top + "px";
contentBox.style.top = -_top * (contentBox.offsetHeight / mainBox.offsetHeight) + "px";
this._wheelData = _top;
}
}
},8、方法调用
new createScroll('box', 'content', 'scrollDiv');评论
暂无评论
评论(0)