JavaScript自定义滚动条

由于公司项目需要,火狐浏览器无法纯CSS修改滚动条的样式,可借助javaScript实现滚动条样式修改。

JavaScript自定义滚动条
一、主要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');
上一篇:利用three.js在网页嵌入dae类型的3d模型 下一篇:PHP设计模式之基础设计模式

评论

评论(0)

暂无评论