JavaScript学习笔记-自定义滚动条
这是一个基本实现思路,如果有新手和我一样没什么事,喜欢瞎研究话,可以参考下。
一、Html
<div class="scroll_con">
<div class="scroll_text">
这里是你的需要显示在滚动条框内文本内容......
</div>
</div>
二、Css
/*这里是让用户鼠标在里面不能选中文字,避免拖动的时候出错*/
body { -moz-user-select: none; /*火狐*/ -webkit-user-select: none; /*webkit浏览器*/ -ms-user-select: none; /*IE10*/ -khtml-user-select: none; /*早期浏览器*/ user-select: none; } * { margin:; padding:; border:; } /*滚动文本及滚动条大框*/
.scroll_con { width: 500px; height: 500px; background-color: #5c0af7; position: relative; overflow-y: hidden; } /*滚动文本*/
.scroll_text { width: 480px; font-size: 14px; word-break:break-word; color: #ffffff; position: absolute; left:; top:; } /*滚动条整体框*/
.scroll { height: 500px; background-color: #2e03c4; position: absolute; left: 486px; top:; }
.scroll,.scroll .scroll_cen, .scroll .scroll_up, .scroll .scroll_down { width: 14px; }
/*滚轮上下按钮*/
.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; }
.scroll .scroll_up:hover, .scroll .scroll_down:hover { background-color: #9da2f8; cursor: pointer; }
/*滚动滚动轨道*/
.scroll .scroll_cen { height: 460px; background-color: #2e03c4; position: relative; }
.scroll .scroll_cen .scroll_button { width: 12px; margin: 0px 1px; background-color: #7263f8; border-radius: 5px; position: absolute; cursor: pointer; }
三、JavaScript
$(function () {
//添加滚动条
scrollHTML = "";
scrollHTML += "<div class='scroll_up'>∧</div>"; //上微调按钮
scrollHTML += "<div class='scroll_cen'><div class='scroll_button'></div></div>"; //中间轨道层即内滑动按钮
scrollHTML += "<div class='scroll_down'>∨</div>"; //下微调按钮
$(".scroll_con").append("<div class='scroll'> " + scrollHTML + "</div>"); //在HTML中输出滚动条整体
var text_hidden = $(".scroll_con").height(); //文本内容显示高度
var text_show = $(".scroll_text").height(); //文本内容实际高度
var scroll_b = $(".scroll_button"); //获取滚动按钮
var text_p = text_hidden / text_show; //计算显示内容占实际内容的多少
var bH_max = 460; //定义滚动按钮最大显示长度
var bH = text_p * bH_max; //定义滚动按钮长度随文本实际内容成正比改变
if (text_p >= 1) { //判断当文本没有超出显示框时
$(".scroll").css("display", "none"); //滚动条不显示
} else { //否则
$(".scroll").css("display", "block"); //显示滚动条
scroll_b.css("height", bH + "px"); //且按钮长度为随正比改变的值
}
//鼠标拖动div事件
var needMove = false, //是否需要拖动
mouseY = 0; //清空当前鼠标指针坐标
scroll_b.mousedown(function (event) { //当鼠标按下时
needMove = true; //需要滑动
var bH_Top = scroll_b.position().top; //获取鼠标按下时滚动按钮的top
mouseY = event.pageY - bH_Top; //计算此时的鼠标指针坐标
});
$(document).mouseup(function (event) { //当鼠标离开时
needMove = false; //不需要滑动
});
$(document).mousemove(function (event) { //当鼠标移动时
if (needMove) {//如果为需要滑动
var sMouseY = event.pageY; //获取鼠标移动后在页面的当前坐标
var bH_Top = sMouseY - mouseY; //计算滚动按钮此时的top
var textY = bH_Top / bH_max * text_show; //根据前面计算出的占比计算文本此时应该显示的坐标
if (bH_Top <= 0) { //如果此时滚动按钮的top<0
scroll_b.css("top", 0);
$(".scroll_text").css("top", 0);
return;
}
if (bH_Top >= bH_max - bH) { //如果此时滚动按钮的top>=滚动按钮可滚动的最大范围
scroll_b.css("top", bH_max - bH);
$(".scroll_text").css("top", text_hidden - text_show);
return;
}
scroll_b.css("top", bH_Top);
$(".scroll_text").css("top", -textY);
}
return;
});
//上微调按钮点击事件
var goThread = "";
$(".scroll_up").mouseup(function () {
clearInterval(goThread);
})
$(".scroll_up").mousedown(function () {
clearInterval(goThread);
goThread = setInterval(function () {
bH_Top = scroll_b.position().top; //获取鼠标按下时滚动按钮的top
var h = 0;
h += 5;
var Toping = bH_Top - h;
if (bH_Top <= 0 || Toping <= 0) { //如果此时滚动按钮的top<0
scroll_b.css("top", 0);
$(".scroll_text").css("top", 0);
return;
}
var textY = bH_Top / bH_max * text_show;
scroll_b.css("top", bH_Top - h);
$(".scroll_text").css("top", -textY);
}, 300);
});
$(".scroll_up").click(function () {
bH_Top = scroll_b.position().top; //获取鼠标按下时滚动按钮的top
var h = 0;
h += 5;
var Toping = bH_Top - h;
if (bH_Top <= 0 || Toping <= 0) { //如果此时滚动按钮的top<0
scroll_b.css("top", 0);
$(".scroll_text").css("top", 0);
return;
}
var textY = bH_Top / bH_max * text_show;
scroll_b.css("top", bH_Top - h);
$(".scroll_text").css("top", -textY);
});
//下微调按钮点击事件
$(".scroll_down").mouseup(function () {
clearInterval(goThread);
})
$(".scroll_down").mousedown(function () {
clearInterval(goThread);
goThread = setInterval(function () {
bH_Top = scroll_b.position().top; //获取鼠标按下时滚动按钮的top
var h = 0;
h += 5;
var Downing = bH_Top + h;
if (bH_Top >= bH_max - bH || Downing >= bH_max - bH) { //如果此时滚动按钮的top>=滚动按钮可滚动的最大范围
scroll_b.css("top", bH_max - bH);
$(".scroll_text").css("top", text_hidden - text_show);
return;
}
var textY = bH_Top / bH_max * text_show;
scroll_b.css("top", bH_Top + h);
$(".scroll_text").css("top", -textY);
}, 300);
});
$(".scroll_down").click(function () {
bH_Top = scroll_b.position().top; //获取鼠标按下时滚动按钮的top
var h = 0;
h += 5;
var Downing = bH_Top + h;
if (bH_Top >= bH_max - bH || Downing >= bH_max - bH) { //如果此时滚动按钮的top>=滚动按钮可滚动的最大范围
scroll_b.css("top", bH_max - bH);
$(".scroll_text").css("top", text_hidden - text_show);
return;
}
var textY = bH_Top / bH_max * text_show;
scroll_b.css("top", bH_Top + h);
$(".scroll_text").css("top", -textY);
});
//滚轮事件(这里调用了一个插件jQuery Mousewheel)
$(".scroll_con").bind("mousewheel", function (event, delta, deltaX, deltaY) {
if (delta==1) { //滚动向上滚动时
bH_Top = scroll_b.position().top; //获取鼠标按下时滚动按钮的top
var h = 0;
h += 5;
var Toping = bH_Top - h;
if (bH_Top <= 0 || Toping <= 0) { //如果此时滚动按钮的top<0
scroll_b.css("top", 0);
$(".scroll_text").css("top", 0);
return;
}
var textY = bH_Top / bH_max * text_show;
scroll_b.css("top", bH_Top - h);
$(".scroll_text").css("top", -textY);
}
if (delta == -1) { //滚动向下滚动时
bH_Top = scroll_b.position().top; //获取鼠标按下时滚动按钮的top
var h = 0;
h += 5;
var Downing = bH_Top + h;
if (bH_Top >= bH_max - bH || Downing >= bH_max - bH) { //如果此时滚动按钮的top>=滚动按钮可滚动的最大范围
scroll_b.css("top", bH_max - bH);
$(".scroll_text").css("top", text_hidden - text_show);
return;
}
var textY = bH_Top / bH_max * text_show;
scroll_b.css("top", bH_Top + h);
$(".scroll_text").css("top", -textY);
}
return;
});
})
四、OK,这样就搞定一个自定义的滚动条了,最后总结下,将复用的方法整合,优化下代码。封装成一个方法就完成啦!
JavaScript学习笔记-自定义滚动条的更多相关文章
- JavaScript学习笔记- 自定义滚动条插件
此滚动条仅支持竖向(Y轴) 一.Css /*这里是让用户鼠标在里面不能选中文字,避免拖动的时候出错*/ body { -moz-user-select: none; /*火狐*/ -webkit-us ...
- javascript 学习之自定义滚动条加滚轮事件
要自己写一个自定义滚动条加上滚轮事件,之前的没有滚轮事件不完整,今天整理了一个. 1.滚轮事件是不兼容的,firefox中是必需要用事件绑定的添加,用的DOMMouseScroll,当滚动鼠标的时候, ...
- JavaScript学习笔记-自定义集合类
//集合类Set( ES6标准才有的类,目前兼容性较差)//自定义集合类:extend = function (o,p){ //定义一个复制对象属性的类函数 for(var x in p){ o[x] ...
- JavaScript:学习笔记(2)——基本概念与数据类型
JavaScript:学习笔记(2)——基本概念与数据类型 语法 1.区分大小写.Test 和 test 是完全不同的两个变量. 2.语句最好以分号结束,也就是说不以分号结束也可以. 变量 1.JS的 ...
- Java程序猿的JavaScript学习笔记(汇总文件夹)
最终完结了,历时半个月. 内容包含: JavaScript面向对象特性分析,JavaScript高手必经之路. jQuery源代码级解析. jQuery EasyUI源代码级解析. Java程序猿的J ...
- Java程序猿的JavaScript学习笔记(8——jQuery选择器)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿JavaScript学习笔记(2——复制和继承财产)
计划和完成在这个例子中,音符的以下序列: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaSc ...
- Java程序猿的JavaScript学习笔记(3——this/call/apply)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿JavaScript学习笔记(4——关闭/getter/setter)
计划和完成这个例子中,音符的顺序如下: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScr ...
随机推荐
- react native windows开发环境搭建(二)
上一篇中介绍了本地服务器端环境的安装,使用已经编译好的apk程序,设置ip地址,就可以看到welcome界面,并且可以对程序做出修改以及调试. 为了扩展和发布应用 还需要能编译loader程序,这里介 ...
- cal 命令
cal命令是linux里面查看日历的一个命令,效果如下: [root@localhost ~]# cal 十月 日 一 二 三 四 五 六 我们可以的很形象的从日历上看出今天是哪年,哪年的哪天,周几, ...
- 磁盘配额-----quota
为什么要使用磁盘配额:为了限制普通用户使用普通磁盘的空间与创建文件的个数等. 不至于个别人的浪费影响所有人的使用. 需要安装quota的软件包. mount -o usrquota,grpquota ...
- URL tailing slash
Without tailing slash request header GET /snippets HTTP/1.1 User-Agent: Fiddler Host: 192.168.128.13 ...
- [译] 企业级 OpenStack 的六大需求(第 2 部分):开放架构和混合云兼容
全文包括三部分: 第一部分:API 高可用和管理以及安全模型 第二部分:开放架构和混合云兼容 第三部分:弹性架构和全球交付 在本系列的第一部分,我介绍了企业级 OpenStack 的六大需求.现在,我 ...
- windows下nodejs环境配置
一.下载 去nodejs下载node.msi安装文件包,里面包含了node.js和npm: 双击node.msi就行了,选择安装路径和npm: 二.设置环境变量 [新版本都不需要设计环境变量了,软件会 ...
- NOIP2000单词接龙[DFS]
题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合 ...
- AC日记——潜伏着 openjudge 1.7 11
11:潜伏者 总时间限制: 1000ms 内存限制: 65536kB 描述 R国和S国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动. 历经艰险后,潜伏于S国的R国间谍小C终于摸清了S国军 ...
- jmeter 函数助手里的P,property的使用
1.函数助手里的 p及property的使用 ${__P(init,2)} , ${__property(init,start,200)} 可以自行定义变量名称,及变量的默认值 P 变量名为init, ...
- [No000037]操作系统Operating Systems操作系统历史与硬件概况History of OS & Summaries!
培根:读史使人明智 操作系统的简史 (1955-1965) 计算机非常昂贵,上古神机IBM7094 ,造价在250万美元以上 计算机使用原则:只专注于计算 批处理操作系统(Batch system) ...