/*
* @Author: dothin前端
* @Date: 2015-11-21 00:12:15
* @Last Modified by: dothin前端
* @Last Modified time: 2015-11-21 00:29:12
*/
! function() {
var EventUtil = {
addHandler: function(obj, type, handler) {
if (obj.addEventListener) {
obj.addEventListener(type, handler, false);
} else if (obj.attachEvent) {
obj.attachEvent("on" + type, handler);
} else {
obj["on" + type] = handler;
}
},
removeHandler: function(obj, type, handler) {
if (obj.removeEventListener) {
obj.removeEventListener(type, handler, false);
} else if (obj.detachEvent) {
obj.detachEvent("on" + type, handler);
} else {
obj["on" + type] = null;
}
},
getEvent: function(event) {
return event ? event : window.event;
},
getTarget: function(event) {
return event.target || event.srcElement;
},
preventDefault: function(event) {
if (event.preventDefault) {
event.preventDefault();
} else {
event.returnValue = false;
}
},
stopPropagation: function(event) {
if (event.stopPropagation) {
event.stopPropagation();
} else {
event.cancelBubble = true;
}
},
getWheelDelta: function(event) {
if (event.wheelDelta) {
return event.wheelDelta;
} else {
return -event.detail * 40;
}
}
};
//tip:滚动条上面的长度可变的按钮
//scrollBar:滚动条
//section:内容父级
//article:内容
function ScrollBar(tip, scrollBar, section, article) {
this.oTip = document.getElementById(tip);
this.oScrollBar = document.getElementById(scrollBar);
this.oSection = document.getElementById(section);
this.oArticle = document.getElementById(article);
var _this = this;
this.init();
this.oTip.onmousedown = function(ev) {
_this.Down(ev);
return false;
};
//给需要加滚动事件的元素加滚动事件
EventUtil.addHandler(this.oSection, 'mousewheel', function(ev) {
_this.onMouseWheel(ev);
}); //ie,chrome
EventUtil.addHandler(this.oSection, 'DOMMouseScroll', function(ev) {
_this.onMouseWheel(ev);
}); //ff
EventUtil.addHandler(this.oScrollBar, 'mousewheel', function(ev) {
_this.onMouseWheel(ev);
}); //ie,chrome
EventUtil.addHandler(this.oScrollBar, 'DOMMouseScroll', function(ev) {
_this.onMouseWheel(ev);
}); //ff
};
//初始化滚动条,内容不够时隐藏滚动条,滚动条按钮长度由内容长度决定
ScrollBar.prototype.init = function() {
if (this.oSection.offsetHeight >= this.oArticle.offsetHeight) {
this.oScrollBar.style.display = 'none';
} else {
this.oTip.style.height = 100 * this.oScrollBar.offsetHeight / (this.oArticle.offsetHeight - this.oSection.offsetHeight) + 'px';
//document.title = this.oTip.style.height;
}
//各浏览器行高,字体大小,字体类型,不一致,要想初始化滚动条一致,先统一样式
};
ScrollBar.prototype.Down = function(ev) {
var oEvent = EventUtil.getEvent(ev);
var _this = this;
this.maxH = this.oScrollBar.offsetHeight - this.oTip.offsetHeight;
this.disY = oEvent.clientY - this.oTip.offsetTop;
document.onmousemove = function(ev) {
_this.fnMove(ev);
return false;
}
document.onmouseup = function(ev) {
_this.Up(ev);
}
};
ScrollBar.prototype.fnMove = function(ev) {
var oEvent = EventUtil.getEvent(ev);
var t = oEvent.clientY - this.disY;
this.Move(t);
};
ScrollBar.prototype.onMouseWheel = function(ev) {
var oEvent = EventUtil.getEvent(ev);
this.maxH = this.oScrollBar.offsetHeight - this.oTip.offsetHeight;
this.disY = oEvent.clientY - this.oTip.offsetTop;
if (EventUtil.getWheelDelta(oEvent) > 0) {
var t = this.oTip.offsetTop - 10;
this.Move(t);
} else {
var t = this.oTip.offsetTop + 10;
this.Move(t);
}
EventUtil.preventDefault(oEvent);
};
ScrollBar.prototype.Move = function(t) {
if (t < 0) {
t = 0;
} else if (t > this.maxH) {
t = this.maxH;
}
this.oTip.style.top = t + 'px';
this.contentH = this.oArticle.offsetHeight - this.oSection.offsetHeight;
this.oArticle.style.top = -this.contentH * this.oTip.offsetTop / this.maxH + 'px';
};
ScrollBar.prototype.Up = function(ev) {
document.onmousemove = document.onmouseup = null;
};
window.ScrollBar = ScrollBar;
}();

调用实例:

 <!DOCTYPE html>
<html lang="en" id="html">
<head>
<meta charset="UTF-8" />
<title>title here</title>
<script src="scrollBar.js"></script>
<style>
#section{position:absolute;top:200px; left:50px;width:300px; height:298px; border:1px solid #999; overflow: hidden; }
#article{position:absolute;padding:20px; text-indent: 30px;font-size: 14px; line-height: 25px; font-family: '微软雅黑';}
#scrollBar{ position:absolute;top:0; right:0;height:300px; width:20px; background:#ddd;}
#tip{position:absolute;top:0;left:0; background:#999; width:20px; min-height:20px; cursor:pointer;}
</style>
</head>
<body id="body" style="height:2000px;">
<div id="section">
<div id="article">
一滴血而已,居然带动天地大势,滚滚而涌,让大漠沸腾,沙浪拍天,所有人都在颤栗! 异域百世
一滴血,居然造成这种要灭世般的景象,怎能令人不畏? “不朽之王!” 这一刻,异域百万大军顶礼膜拜后,全都高呼,他们激动,神色疯狂,带着敬仰。还有无比的崇敬,仰望血海。 五色血液浩荡,真的如汪洋席卷而来,淹没这里。
的杀气,滔天而上,滚滚沸腾。 大旗横空,如银河翻卷。猎猎作响,绽放出刺目的光,上面有血迹,虽然过去了一个纪元,还未彻底干涸。 因为,那是属于仙王的血,此时像是要滴落了下来,从旗面内不断渗出!
万大军全都跪伏了下去,进行膜拜! 刹那,域外诸多星斗都在摇动,整片大宇宙都要震荡起来,那种威势不可想象,撼天动地,岁月长河跟着浮现。 一滴血而已,就造成了这般无法理解的恐怖景象! 所有人都知道,那是异域的无上强者演绎的,真身过不来,洒出一滴血,跨过天渊,飞临这片战场中。 一滴血,晶莹欲滴,绽放五色不朽之光,滚滚而来,看着很小一滴,但是气势磅礴,压的乾坤轰鸣,要崩溃了。 帝关,城墙上。 许多人胆寒,哪怕有巨城可守,难以攻破,众人也惶恐,神魂都在不由自主的颤栗。 “我就知道,孟天正惹大祸了,我都已经谈好条件,他还出城,今日若有大难,他将是千古罪人!”金太君说道。 至于各族修士,包括金系人马、杜家等都早已说不出话来,那种恐怖波动,让他们一个脸色苍白。 许多人都觉得,不朽之王是不可战胜的,万一他们真的动身过来,城破了怎么办? “应该……不会跨界吧?”一些人颤声道,这是杜家的大统领。 “跨界与否,一直是五五之数,就看他们的心意了!”金太君手拄着木杖说道。 帝关前,出城作战的帝关修士自然也都面色发白了,虽然说他们很勇猛,无所畏惧,但是那种压迫让他们身体难受。 轰! 几件仙器发光,隔绝外界,绽放出一缕又一缕白雾,那是仙气在弥漫,守护了他们。 然而,那滴血也发生了奇异的变化。迅速放大,如同汪洋一般,席卷了天上地下,迅速而来。铺天盖地。 仿佛世界末日来临,震撼人间,所有人都惶恐,难以抗拒。 域外,一颗又一颗星体都在跟着颤栗。在抖动,间要解体,要在这一刻崩开。 “铁血战旗,不复苏更待何时!”孟天正站在那里,一招手,将那面破烂的战旗取到手中,一声大吼,而后猛力将它掷出。 破烂的战旗,饱经岁月洗礼。带着万古的沉重与沧桑,哗的一声卷动,朝前方飞去,而后不断放大。 到了最后。它抖动起来,原本暗淡的旗面,发出盖
</div>
<div id="scrollBar">
<div id="tip"></div>
</div>
</div>
<script>
new ScrollBar('tip','scrollBar','section','article');
</script>
</body>
</html>

js原生封装自定义滚动条的更多相关文章

  1. 基于js原生封装的点击显示完整文字

    基于js原生封装的点击显示完整文字 (function(window) { var inner = ''; var showCont_s = function(ele) { this.init.app ...

  2. Vue.js 桌面端自定义滚动条组件|vue美化滚动条VScroll

    基于vue.js开发的小巧PC端自定义滚动条组件VScroll. 前段时间有给大家分享一个vue桌面端弹框组件,今天再分享最近开发的一个vue pc端自定义滚动条组件. vscroll 一款基于vue ...

  3. javascript封装自定义滚动条方法,可自定义四个边框滚动条

    还是根据我的个人习惯封装了一个方法 setScroll({ box :父盒子DOM对象, content : 内容盒子DOM对象, scrollall : 滚动条大盒子DOM对象, scroll : ...

  4. js原生封装getClassName()方法-ie不支持getElementsByClassName,所以要自己实现获取类名为className的所有元素

    <html> <head> <script type="text/javascript"> window.onload = function() ...

  5. Js原生封装选项卡组件

    class MyTab extends HTMLElement{ //创建一个类名MyTab constructor(){ //构造函数 super(); //指向父类构造函数,必须要有的 const ...

  6. js原生函数一些封装

    这是一些js原生封装的函数,主要是为了兼容IE浏览器,如下 获取css样式 function getStyle(ele, prop) { if(window.getComputedStyle) { r ...

  7. 利用JS实现自定义滚动条

    一般默认的滚动条会比较丑,我们可以用简单的js实现自定义滚动条的功能: 代码如下: <!doctype html> <html> <head> <meta c ...

  8. js自定义滚动条

    今天听到别人说自定义滚动条,所以就在吃饭的时间写了个 html部分 <div class="out" id="out"> <div class ...

  9. css和js实现硬件加速渲染自定义滚动条

    听别人说用CSS的变换来实现渲染有硬件加速的效果,看到很多大网站都开始陆续使用上了,我也来说说怎么做,我这边实现的滚动条有自然滚动效果,看起来比较自然,说的再多不如直接写,让我们开始吧! 我们需要自己 ...

随机推荐

  1. IOS 点击空白处隐藏键盘的几种方法

    IOS 点击空白处隐藏键盘的几种方法     IOS7 点击空白处隐藏键盘的几种方法   IOS开发中经常要用到输入框,默认情况下点击输入框就会弹出键盘,但是必须要实现输入框return的委托方法才能 ...

  2. libcurl的封装,支持同步异步请求,支持多线程下载,支持https

    最近在做一个项目,需要用到http get post等 需求分析需要做到同步和异步,异步请求的返回以可选的回调通知的方式进行. 本人以Linux为例,一步一步的来实现. 配置并且编译libcurl我以 ...

  3. HBase eclipse开发环境搭建

    伪分布式环境安装 事先本机必须部署好了伪分布式hadoop开发环境将Hbase/lib下的 hadoop-core-*.jar 与 hadoop保持一致. 将hadoop下的复制到hbase下将had ...

  4. [BZOJ 3747] [POI 2015] Kinoman【线段树】

    Problem Link : BZOJ 3747 题解:ZYF-ZYF 神犇的题解 解题的大致思路是,当区间的右端点向右移动一格时,只有两个区间的左端点对应的答案发生了变化. 从 f[i] + 1 到 ...

  5. linux 发布 qt(更新ld命令的路径依赖)

    PATH 错误解决error while loading shared libraries: libXXX.so.X: cannot open shared object file: No such ...

  6. "Redis客户端连接数一直降不下来"的有关问题解决

    [线上问题] "Redis客户端连接数一直降不下来"的问题解决 前段时间,上线了新的 Redis缓存(Cache)服务,准备替换掉 Memcached. 为什么要将 Memcach ...

  7. BZOJ1726: [Usaco2006 Nov]Roadblocks第二短路

    1726: [Usaco2006 Nov]Roadblocks第二短路 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 768  Solved: 369[S ...

  8. 保留n位四舍五入小数

    一:可选择保留位数,注释很解释的很详细,上图 二:全部代码 using System; using System.Collections.Generic; using System.Component ...

  9. adb测试使用相关

    1.adb中文 无论是shell下显示中文.logcat输出中文乱码还是adb push/pull路径包括中文名,windows下都可以通过更改cmd窗口代码页为UTF-8解决: chcp 65001 ...

  10. Introduction to Glide, Image Loader Library for Android, recommended by Google

    In the passed Google Developer Summit Thailand, Google introduced us an Image Loader Library for And ...