javascript自定义滚动条插件.

在实际项目中,经常由于浏览器自带的滚动条样式太戳,而且在各个浏览器中显示不一样,所以我们不得不去实现自定义的滚动条,今天我就用最少的代码实现了一个自定义滚动条,代码量区区只有几十行,使用起来也非常方便。

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>自定义滚动条</title>
<style type="text/css">
body,ul,dl,dd{ margin:0; padding:0; font-size:12px; font-family:‘微软雅黑‘;}
.clear{ zoom:1}
.clear:after{ display:block; content:""; clear:both}
.box{margin:28px auto; width:164px; height:440px; background:#000; padding:8px;}
#wrap{ width:170px; height:386px; background:#1c1c1d; overflow:hidden; position:relative; }
#listbox{ float:left; width:160px; position:absolute; left:0; top:0; }
#scrollbox{ float:right; width:3px; height:386px; background: #333; position:relative;}
#scrollbar{ width:3px; height:30px; background:#cc3f2e; position:absolute; left:0; top:0;}

li{ height:80px; margin-bottom:8px; list-style:none;}
.picbox,.div{ float:left;}
.picbox{ width:150px; position:relative; }
.picbox span{ position:absolute; left:0px; bottom:0px; width:90px; height:22px;}
dl{ width:139px; height:76px; color:#fff; padding:4px 0 0 10px;line-height:18px; position:absolute;left:0; top:0; opacity:0.2; filter:alpha(opacity=20); }
.div{width:149px; height:80px; position:relative; }
.mark{width:149px; height:80px; position:absolute; top:0; left:0; background:#fff; opacity:0.1; filter:alpha(opacity=10);}

.nav{ width:160px; height:35px; font-family:‘微软雅黑‘;background:#1c1c1d; padding-top:5px;}
.a,.b{ width:152px; height:24px; line-height:24px; background:#666; text-align:center; float:left; color:#fff; cursor:pointer}
.a{margin-right:5px; display:inline; background:#333; color:#666; }

li.active .mark{opacity:0.2; filter:alpha(opacity=20);}
li.active dl{ opacity:0.7; filter:alpha(opacity=70);}
</style>
</head>
<body>
  <div class="box">
    <div class="nav">
      <div class="a">猜你喜欢</div>
    </div>
    <div id="wrap">
      <ul id="listbox">
        <li class="active">
          <div class="picbox">
            <span class="a1"></span>
          </div>
          <div class="div">
            <div class="mark"></div>
            <dl class="textbox">
              <dt>飞狐外传</dt>
              <dd>主演:方力申 周秀娜 谈莉娜 周秀娜施展媚术</dd>
              <dd>史上身材最棒狐仙</dd>
            </dl>
          </div>
        </li>
        <li>
          <div class="picbox">
            <span class="a2"></span>
          </div>
          <div class="div">
            <div class="mark"></div>
            <dl class="textbox">
              <dt>飞狐外传</dt>
              <dd>主演:方力申 周秀娜 谈莉娜 周秀娜施展媚术</dd>
              <dd>史上身材最棒狐仙</dd>
            </dl>
          </div>
        </li>
        <li>
          <div class="picbox">
            <span class="a2"></span>
          </div>
          <div class="div">
            <div class="mark"></div>
            <dl class="textbox">
              <dt>飞狐外传</dt>
              <dd>主演:方力申 周秀娜 谈莉娜 周秀娜施展媚术</dd>
              <dd>史上身材最棒狐仙</dd>
            </dl>
          </div>
        </li>
        <li>
          <div class="picbox">
            <span></span>
          </div>
          <div class="div">
            <div class="mark"></div>
            <dl class="textbox">
              <dt>飞狐外传</dt>
              <dd>主演:方力申 周秀娜 谈莉娜 周秀娜施展媚术</dd>
              <dd>史上身材最棒狐仙</dd>
            </dl>
          </div>
        </li>
        <li>
          <div class="picbox">
          </div>
          <div class="div">
            <div class="mark"></div>
            <dl class="textbox">
              <dt>飞狐外传</dt>
              <dd>主演:方力申 周秀娜 谈莉娜 周秀娜施展媚术</dd>
              <dd>史上身材最棒狐仙</dd>
            </dl>
          </div>
        </li>
        <li>
          <div class="picbox">
          </div>
          <div class="div">
            <div class="mark"></div>
            <dl class="textbox">
              <dt>飞狐外传</dt>
              <dd>主演:方力申 周秀娜 谈莉娜 周秀娜施展媚术</dd>
              <dd>史上身材最棒狐仙</dd>
            </dl>
          </div>
        </li>
        <li>
          <div class="picbox">
          </div>
          <div class="div">
            <div class="mark"></div>
            <dl class="textbox">
              <dt>飞狐外传</dt>
              <dd>主演:方力申 周秀娜 谈莉娜 周秀娜施展媚术</dd>
              <dd>史上身材最棒狐仙</dd>
            </dl>
          </div>
        </li>
        <li>
          <div class="picbox">
          </div>
          <div class="div">
            <div class="mark"></div>
            <dl class="textbox">
              <dt>飞狐外传</dt>
              <dd>主演:方力申 周秀娜 谈莉娜 周秀娜施展媚术</dd>
              <dd>史上身材最棒狐仙</dd>
            </dl>
          </div>
        </li>
        <li>
          <div class="picbox">
          </div>
          <div class="div">
            <div class="mark"></div>
            <dl class="textbox">
              <dt>飞狐外传</dt>
              <dd>主演:方力申 周秀娜 谈莉娜 周秀娜施展媚术</dd>
              <dd>史上身材最棒狐仙</dd>
            </dl>
          </div>
        </li>
        <li>
          <div class="picbox">
          </div>
          <div class="div">
            <div class="mark"></div>
            <dl class="textbox">
              <dt>飞狐外传</dt>
              <dd>主演:方力申 周秀娜 谈莉娜 周秀娜施展媚术</dd>
              <dd>史上身材最棒狐仙</dd>
            </dl>
          </div>
        </li>
        <li>
          <div class="picbox">
          </div>
          <div class="div">
            <div class="mark"></div>
            <dl class="textbox">
              <dt>飞狐外传</dt>
              <dd>主演:方力申 周秀娜 谈莉娜 周秀娜施展媚术</dd>
              <dd>史上身材最棒狐仙</dd>
            </dl>
          </div>
        </li>
      </ul>
      <div id="scrollbox">
        <div id="scrollbar"></div>
      </div>
    </div>
  </div>
</body>

<script src="tinyScroll.js"></script>
<script>
    new tinyScroll({
        wrapBox : document.getElementById(‘wrap‘),
        wrapList : document.getElementById(‘listbox‘),
        scrollBox :document.getElementById(‘scrollbox‘),
        scrollBar : document.getElementById(‘scrollbar‘)
    })
</script>
</html>

然后引入滚动条插件:

/**
 * javascript自定义滚动条(滚动条高度可以动态改变)
 * @param opts
 * 调用方式
 * new tinyScroll({
        wrapBox : document.getElementById(‘wrap‘),
        wrapList : document.getElementById(‘listbox‘),
        scrollBox :document.getElementById(‘scrollbox‘),
        scrollBar : document.getElementById(‘scrollbar‘)
    })
 */
function tinyScroll(opts) {
    this.wrapBox = opts.wrapBox;
    this.wrapList = opts.wrapList;
    this.scrollBox = opts.scrollBox;
    this.scrollBar = opts.scrollBar;
    this.scale = 0;
    this.height = 0;
    this.maxTop = 0;
    this.ListMaxTop = 0;
    this.top = 0;

    this.bindEvent();
}
tinyScroll.prototype = {
    constructor: tinyScroll,
    init: function() {
        this.scale = this.wrapBox.clientHeight / this.wrapList.scrollHeight;
        if (this.scale > 1) this.scale = 1;
        this.height = this.scale * this.scrollBox.scrollHeight;
        this.maxTop = this.scrollBox.scrollHeight - this.height;
        this.ListMaxTop = this.wrapBox.clientHeight - this.wrapList.scrollHeight;
        if (this.scale == 1) this.scrollBox.style.display = ‘none‘;
        this.scrollBar.style.height = this.height + ‘px‘;
    },
    bindEvent: function() {
        var that = this;
        var mouseScroll = function(ev) {
            ev = ev || event;
            var fx = ev.wheelDelta || ev.detail;
            var bDown = true;
            if (ev.detail) {
                bDown = fx > 0 ? true: false;
            } else {
                bDown = fx > 0 ? false: true;
            }
            if (bDown) {
                that.top += 10;
            } else {
                that.top -= 10;
            }
            that.fnScroll();
            if (ev.preventDefault) {
                ev.preventDefault();
            }
            return false;
        };
        this.init();
        this.scrollBar.onmousedown = function(ev) {
            ev = ev || event;
            var disY = ev.clientY - this.offsetTop;
            document.onmousemove = function(ev) {
                ev = ev || event;
                that.top = ev.clientY - disY;
                that.fnScroll();
            };
            document.onmouseup = function() {
                document.onmouseup = document.onmousemove = null;
            };
            return false;
        };
        this.wrapBox.onmousewheel = mouseScroll;
        if (this.wrapList.addEventListener) {
            this.wrapList.addEventListener(‘DOMMouseScroll‘, mouseScroll, false);
        }
    },
    fnScroll: function() {
        if (this.top < 0) this.top = 0;
        if (this.top > this.maxTop) this.top = this.maxTop;
        var scale = this.top / this.maxTop;
        var listTop = scale * this.ListMaxTop;
        this.scrollBar.style.top = this.top + ‘px‘;
        this.wrapList.style.top = listTop + ‘px‘;
    }
};

javascript自定义滚动条插件.

时间: 2024-10-14 19:10:15

javascript自定义滚动条插件.的相关文章

javascript自定义滚动条插件,几行代码的事儿

在实际项目中,经常由于浏览器自带的滚动条样式太戳,而且在各个浏览器中显示不一样,所以我们不得不去实现自定义的滚动条,今天我就用最少的代码实现了一个自定义滚动条,代码量区区只有几十行,使用起来也非常方便. <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title

JavaScript自定义滚动条

原生JavaScript自定义滚动条 版权所有,如若转载请注明出处并附上本文链接 http://www.cnblogs.com/Pengxm-liveShare/p/5953810.html 由于项目需求需要用到滚动条, 但是浏览器自带的太丑, 而且每个浏览器显示的都不同, 所以自己编写了一个自定义的滚动条. (由于是菜鸟, 写的比较乱, 大家仅供参考就好, 能提提意见改进下就更好了!) 话不多说先看下样式: 主要功能: 支持滚动条自定义样式(颜色, 大小) 支持鼠标事件(点击和滑轮滚动) 主要

JavaScript学习笔记- 自定义滚动条插件

此滚动条仅支持竖向(Y轴) 一.Css 1 /*这里是让用户鼠标在里面不能选中文字,避免拖动的时候出错*/ 2 body { -moz-user-select: none; /*火狐*/ -webkit-user-select: none; /*webkit浏览器*/ -ms-user-select: none; /*IE10*/ -khtml-user-select: none; /*早期浏览器*/ user-select: none; } 3 4 /*滚动文本及滚动条大框*/ 5 .scro

jQuery自定义滚动条插件mCustomScrollbar

写项目的时候遇到了这种情况 我用了两个iframe,左边是一个菜单栏,可以展开也可以收回去的.就说这个滚动条太丑了,是浏览器默认的,所以学着用mCustomScrollbar来解决一下这个问题. 1:资源下载 https://github.com/malihu/malihu-custom-scrollbar-plugin,我是从这里下载的. 2:引入 注意顺序. <link rel="stylesheet" type="text/css" href="

实战-jQuery实现自定义滚动条插件

效果图: 这篇文章主要讲解js交互,就不用篇幅去告诉大家怎么写html css了,让文章言简意赅. 大体思路: 如何实现滚动滑块,让滑块与内容一起联动呢?请看下图: 首先来看, 空心鼠标位置与实心鼠标位置的距离 是不是等于滑块移动的距离X0 呢? 答:等于 滑块移动的最大距离X0是多少呢? 答:滚动条的高度X - 滑块的高度 内容能滚动最大高度Y0是多少呢? 答:内容总高度Y - 内容可视区的高度 通过比较:可以得出滚动比率: 那么代码应该怎么写呢: 第一步: 获取鼠标移动距离 = 滑块移动距离

Jquery自定义滚动条插件

下载地址:http://files.cnblogs.com/files/LoveOrHate/jquery.nicescroll.min.js <script src="jquery.nicescroll.js"></script> $(document).ready( function() { $("html").niceScroll(); } ); var nice = false; $(document).ready( function

jQuery自定义滚动条样式插件mCustomScrollbar

如果你构建一个很有特色和创意的网页,那么肯定希望定义网页中的滚动条样式,这方面的 jQuery 插件比较不错的,有两个:jScrollPane 和 mCustomScrollbar. 关于 jScrollPane,大家见过的可能比较多,但是这个插件太过于古老而且功能不强大,效果在几年前非常不错,但是放在现在就不好说了.所以我选择了后者:mCustomScrollbar.下图是两者官方示例的简单对比: 本文就是介绍如何使用 mCustomScrollbar 这个插件,大部分的内容是翻译自 mCus

自定义滚动条mCustomScrollbar

mCustomScrollbar 是个基于 jQuery UI 的自定义滚动条插件,它可以让你灵活的通过 CSS 定义网页的滚动条,并且垂直和水平两个方向的滚动条都可以定义,它通过 Brandon Aaron jquery mouse-wheel plugin 提供了鼠标滚动的支持,并且在滚动的过程中,还可以缓冲滚动使得滚动更加的平滑,还可以自动调整滚动条的位置和定义滚动到的位置等. 1.如何使用 mCustomScrollbar(必须要加载如下的4个文件) jquery.mCustomScro

mCustomScrollbar插件自定义滚动条

系统自定义 的滚动条是超级丑的有木有,为了网站的风格统一,需要有自定义的滚动下拉条,自己封装函数又累又难,今天给大家一款炒鸡好用的自定义下拉条插件~(百度云有完整demo,可以下载下来参考) demo在百度云:http://pan.baidu.com/s/1nutdP9J 可以先看一下这个插件可以选择的样式,http://manos.malihu.gr/repository/custom-scrollbar/demo/examples/scrollbar_themes_demo.html 1.如