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 .scroll_con { width: 500px; height: 500px; background-color: #5c0af7; position: relative; overflow-y: hidden; }
 6
 7 /*滚动文本*/
 8 .scroll_text { width: 480px; font-size: 14px; word-break: break-word; color: #ffffff; position: absolute; left: 0; top: 0; }
 9
10 /*滚动条整体框*/
11 .scroll { height: 500px; background-color: #2e03c4; position: absolute; left: 486px; top: 0; }
12 .scroll,.scroll .scroll_cen, .scroll .scroll_up, .scroll .scroll_down { width: 14px; }
13 /*滚轮上下按钮*/
14 .scroll .scroll_up, .scroll .scroll_down { height: 20px; line-height: 20px; background-color: #7263f8; color: #ffffff; font-size: 14px; font-weight: bold; text-align: center; }
15 .scroll .scroll_up:hover, .scroll .scroll_down:hover { background-color: #9da2f8; cursor: pointer; }
16 /*滚动滚动轨道*/
17 .scroll .scroll_cen { height: 460px; background-color: #2e03c4; position: relative; }
18 .scroll .scroll_cen .scroll_button { width: 12px; margin: 0px 1px; background-color: #7263f8; border-radius: 5px; position: absolute; cursor: pointer; }

二、Html

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5     <title></title>
 6     <meta charset="utf-8" />
 7     <script src="/jquery-1.10.2.js"></script>
 8     <script src="/mousewheel.js"></script>
 9     <script src="/scroll.js"></script>
10 </head>
11
12 <body>
13     <div class="scroll_con">
14         <div class="scroll_text">
15            你需要放在滚动条可滑动区域的文本
16         </div>
17     </div>
18
19     <script type="text/javascript">
20         //滚动条方法调用,括号里的数字为滑动速度
21         $(".scroll_con").LeonaScroll(50);
22     </script>
23
24 </body>
25 </html>

三、Js

 1 $.fn.extend({
 2     LeonaScroll: function (speed) {
 3         return this.each(function () {
 4             var elem = $(this);
 5             var celem = $(this).find(".scroll_text");
 6             var index = $(this).index();
 7             //添加滚动条
 8             scrollHTML = "";
 9             scrollHTML += "<div class=‘scroll_up leonaup" + index + "‘>∧</div>";
10             scrollHTML += "<div class=‘scroll_cen leonacen" + index + "‘><div class=‘scroll_button leonabutton" + index + "‘></div></div>";
11             scrollHTML += "<div class=‘scroll_down leonadown" + index + "‘>∨</div>";
12             $(elem).append("<div class=‘scroll leonas" + index + "‘> " + scrollHTML + "</div>");
13
14             var text_hidden = $(elem).height(),
15                 text_show = $(celem).height(),
16                 scroll_b = $(".leonabutton" + index + ""),
17                 text_p = text_hidden / text_show,
18                 bH_max = $(".leonas" + index + " .leonacen" + index + "").height(),
19                 bH = text_p * bH_max;
20             if (text_p >= 1) $(".leonas" + index + "").css("display", "none"); else { $(".leonas" + index + "").css("display", "block"); scroll_b.css("height", bH + "px"); }
21
22             //鼠标拖动div事件
23             var needMove = false, mouseY = 0;
24             scroll_b.mousedown(function (event) { needMove = true; var bH_Top = scroll_b.position().top; mouseY = event.pageY - bH_Top; });
25             $(document).mouseup(function (event) { needMove = false; });
26             $(document).mousemove(function (event) {
27                 if (needMove) {
28                     var sMouseY = event.pageY, bH_Top = sMouseY - mouseY, textY = bH_Top / bH_max * text_show;
29                     if (bH_Top <= 0) {
30                         scroll_b.css("top", 0);
31                         $(celem).css("top", 0);
32                         return;
33                     }
34                     if (bH_Top >= bH_max - bH) {
35                         scroll_b.css("top", bH_max - bH);
36                         $(celem).css("top", text_hidden - text_show);
37                         return;
38                     }
39                     scroll_b.css("top", bH_Top); $(celem).css("top", -textY);
40                 }
41                 return;
42             });
43
44             function goGun(direction, timer) {
45                 bH_Top = scroll_b.position().top;
46                 var h = 0; h += speed;  //调节滑动速度
47                 if (direction == 1) { //up
48                     var Toping = bH_Top - h;
49                     if (bH_Top <= 0 || Toping <= 0) {
50                         scroll_b.css("top", 0);
51                         $(celem).css("top", 0);
52                         if (timer == 2) clearInterval(goThread);   //need timer
53                         return;
54                     }
55                     scroll_b.css("top", bH_Top - h);
56                 }
57                 if (direction == -1) { //down
58                     var Downing = bH_Top + h;
59                     if (bH_Top >= bH_max - bH || Downing >= bH_max - bH) {
60                         scroll_b.css("top", bH_max - bH);
61                         $(celem).css("top", text_hidden - text_show);
62                         if (timer == 2) clearInterval(goThread);   //need timer
63                         return;
64                     }
65                     scroll_b.css("top", bH_Top + h);
66                 }
67                 var textY = bH_Top / bH_max * text_show;
68                 $(celem).css("top", -textY);
69             }
70
71             //上下微调按钮事件
72             function minTiao(minTB, d, t) {
73                 var goThread = "";
74                 minTB.mouseup(function () { clearInterval(goThread); });
75                 minTB.mousedown(function () {
76                     clearInterval(goThread);
77                     goThread = setInterval(function () { goGun(d, t); }, 300);
78                 });
79                 minTB.click(function () { goGun(d); });
80             }
81             minTiao($(".leonaup" + index + ""), 1, 2);
82             minTiao($(".leonadown" + index + ""), -1, 2);
83
84             //滚轮事件
85             $(elem).bind("mousewheel", function (event, delta, deltaX, deltaY) {
86                 if (delta == 1) {
87                     goGun(1, 0);
88                     if (scroll_b.position().top != 0)
89                         return false;
90                 } if (delta == -1) {
91                     goGun(-1, 0);
92                     if (Math.ceil(scroll_b.position().top) != Math.ceil(bH_max - bH))
93                         return false;
94                 }
95             });
96         });
97     }
98 });

四、插件下载链接:http://share.weiyun.com/143696ddb7e1f11ad47b7782ed629cbb (密码:vrml)【内含压缩的js】

时间: 2024-08-19 00:45:37

JavaScript学习笔记- 自定义滚动条插件的相关文章

javascript 学习之自定义滚动条加滚轮事件

要自己写一个自定义滚动条加上滚轮事件,之前的没有滚轮事件不完整,今天整理了一个. 1.滚轮事件是不兼容的,firefox中是必需要用事件绑定的添加,用的DOMMouseScroll,当滚动鼠标的时候,只要鼠标滚动的方法就行了,而这通过检测datail的正负号就可以确定 2.其他的用mousewheel(Ie是onmousewheel),通过检测wheelDelta 1 <!doctype html> 2 <html> 3 <head> 4 <title>拖拽

javascript自定义滚动条插件.

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

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

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

JavaScript学习笔记【2】表达式和运算符、语句、对象

笔记来自<JavaScript权威指南(第六版)> 包含的内容: 表达式和运算符 语句 对象 表达式和运算符 数组直接量中的列表逗号之间的元素可以省略,这时省略的空位会填充值undefined.元素列表末尾可以留下单个逗号,这时并不会创建一个新的值为undefined元素. 属性访问表达式,.identifier的写法只适用于要访问的属性名称是合法的标识符,并且需要知道要访问的属性的名字.如果属性名称是一个保留字或者包含空格和标识符,或是一个数字(对于数组来说),则必须使用方括号的写法.当属性

Javascript 学习笔记 2: 标识语句

可以在任何语句声明之前使用唯一标识(identifier)和冒号(:)用来标记该语句: identifier: statement 这样,你可以在程序的任何其他地方通过标识来使用这个语句.即使在语句内部也可以使用该语句的标识(例如:循环语句和条件语句).当在一个循环语句前添加一个标识,你可以在语句内部通过break 标识来退出当前循环,也可以通过continue标识来继续执行该语句.例如: mainloop: while(token != null) { // Code omitted... c

MySQL学习笔记-自定义函数

MySQL学习笔记-自定义函数 1.自定义函数简介 自定义函数:用户自定义函数(user-defined function,UDF)是一种对MySQL扩展的途径,其用法与内置函数相同 自定义函数的两个必要条件:(1)参数  (2)返回值 自定义函数: 创建自定义函数 CREATE FUNCTION function_name RETURNS {STRING|INTEGER|REAL|DECIMAL} routine_body 关于函数体: 1.函数体可以由合法的SQL语句构成: 2.函数体可以是

javascript学习笔记---ECMAScript-判断变量类型

判断类型之前,先要清楚有哪些类型. (理理思路:程序由数据和方法构成,数据由简单数据和复杂数据构成) 即类型有: 数据(简单数据:boolean,string,num,undefined,null.复杂数据:object), 方法(function) 万能的typeof,神一样的方法 typeof(1);// num typeof("hello");// string   typeof(false);// boolean var vFlag; typeof(vFlag);// unde

javascript学习笔记---ECMAScript语法(引用类型)

引用类型通常叫做类(class). 本教程会讨论大量的 ECMAScript 预定义引用类型. 引用类型 引用类型通常叫做类(class),也就是说,遇到引用值,所处理的就是对象. 本教程会讨论大量的 ECMAScript 预定义引用类型. 从现在起,将重点讨论与已经讨论过的原始类型紧密相关的引用类型. 注意:从传统意义上来说,ECMAScript 并不真正具有类.事实上,除了说明不存在类,在 ECMA-262 中根本没有出现"类"这个词.ECMAScript 定义了"对象定

javascript学习笔记---ECMAScriptECMAScript 对象----定义类或对象

使用预定义对象只是面向对象语言的能力的一部分,它真正强大之处在于能够创建自己专用的类和对象. ECMAScript 拥有很多创建对象或类的方法. 原始的方式 因为对象的属性可以在对象创建后动态定义(后绑定),类似下面的代码: var oCar = new Object; oCar.color = "blue"; oCar.doors = 4; oCar.mpg = 25; oCar.showColor = function() { alert(this.color); };不过这里有一