div模拟滚动条效果示例代码


Posted in Javascript onOctober 16, 2013
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="html.aspx.cs" Inherits="WebApplication1.html" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<style type="text/css"> 
* 
{ 
margin: 0; 
padding: 0; 
} 
{ 
height: 1000px; 
} 
#mainBox 
{ 
width: 250px; 
height: 500px; 
border: 1px #bbb solid; 
position: relative; 
overflow: hidden; 
margin: 50px auto; 
} 
#content 
{ 
height:1000px; 
position: absolute; 
left: 0; 
top: 0; 
} 
.scrollDiv 
{ 
width: 6px; 
position: absolute; 
top: 0; 
background: #666; 
border-radius: 10px; 
} 
/* 章节类别 */ 
.m-catr{padding:15px 0 10px 12px;*padding:15px 0 10px 14px;} 
.m-catr .tte{float:left; line-height:35px; text-align:left;font-size:14px; font-weight:bold; color:#5b98db;} 
#content dl{width:225px; float:left; margin-top:10px;} 
#content dl dt, .m-catr dl dd{float:left;width:100%; line-height:25px; text-align:left; color:#444;} 
#content dl dt{font-weight:bold;} 
#content dl dd{margin-left:12px;} 
</style> 
<script src="Scripts/jquery-1.7.2.min.js" type="text/javascript"></script> 
<title></title> 
</head> 
<body> 
<!-- 章节类别 --> 
<div class="m-catr f-cb"> 
<div class="tte"> 
章节类别</div> 
<div id="mainBox"> 
<div id="content"> 
<dl data-type="menu"> 
<dt>第一单元科学是系统化了的知识</dt> 
<dd> 
1、千篇一律与千变万化</dd> 
<dd> 
2、双语言时代</dd> 
<dd> 
3、人们如何做出决策</dd> 
<dd> 
4、培养独立工作和独立思考的人</dd> 
</dl> 
<dl data-type="menu"> 
<dt>第二单元科学是系统化了的知识</dt> 
<dd> 
1、千篇一律与千变万化</dd> 
<dd> 
2、双语言时代</dd> 
<dd> 
3、人们如何做出决策</dd> 
<dd> 
4、培养独立工作和独立思考的人</dd> 
</dl> 
<dl data-type="menu"> 
<dt>第三单元科学是系统化了的知识</dt> 
<dd> 
1、千篇一律与千变万化</dd> 
<dd> 
2、双语言时代</dd> 
<dd> 
3、人们如何做出决策</dd> 
<dd> 
4、培养独立工作和独立思考的人</dd> 
</dl> 
<dl data-type="menu"> 
<dt>第四单元科学是系统化了的知识</dt> 
<dd> 
1、千篇一律与千变万化</dd> 
<dd> 
2、双语言时代</dd> 
<dd> 
3、人们如何做出决策</dd> 
<dd> 
4、培养独立工作和独立思考的人</dd> 
</dl> 
<dl data-type="menu"> 
<dt>第五单元科学是系统化了的知识</dt> 
<dd> 
1、千篇一律与千变万化</dd> 
<dd> 
2、双语言时代</dd> 
<dd> 
3、人们如何做出决策</dd> 
<dd> 
4、培养独立工作和独立思考的人</dd> 
</dl> 
</div> 
</div> 
</div> 
<!-- /章节类别 --> 
<script type="text/javascript"> 
var doc = document; 
var _wheelData = -1; 
var mainBox = doc.getElementById('mainBox'); 
function bind(obj, type, handler) { 
var node = typeof obj == "string" ? $(obj) : obj; 
if (node.addEventListener) { 
node.addEventListener(type, handler, false); 
} else if (node.attachEvent) { 
node.attachEvent('on' + type, handler); 
} else { 
node['on' + type] = handler; 
} 
} 
function mouseWheel(obj, handler) { 
var node = typeof obj == "string" ? $(obj) : obj; 
bind(node, 'mousewheel', function (event) { 
var data = -getWheelData(event); 
handler(data); 
if (document.all) { 
window.event.returnValue = false; 
} else { 
event.preventDefault(); 
} 
}); 
//火狐 
bind(node, 'DOMMouseScroll', function (event) { 
var data = getWheelData(event); 
handler(data); 
event.preventDefault(); 
}); 
function getWheelData(event) { 
var e = event || window.event; 
return e.wheelDelta ? e.wheelDelta : e.detail * 40; 
} 
} 
function addScroll() { 
this.init.apply(this, arguments); 
} 
addScroll.prototype = { 
init: function (mainBox, contentBox, className) { 
var mainBox = doc.getElementById(mainBox); 
var contentBox = 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); 
}, 
//创建滚动条 
_createScroll: function (mainBox, className) { 
var _scrollBox = doc.createElement('div'); 
_scrollBox.setAttribute("id", "scrollBox"); 
var _scroll = doc.createElement('div'); 
var span = doc.createElement('span'); 
_scrollBox.appendChild(_scroll); 
_scroll.appendChild(span); 
_scroll.className = className; 
mainBox.appendChild(_scrollBox); 
return _scroll; 
}, 
//调整滚动条 
_resizeScorll: function (element, mainBox, contentBox) { 
var p = element.parentNode; 
var conHeight = contentBox.offsetHeight; 
var _width = mainBox.clientWidth; 
var _height = mainBox.clientHeight; 
var _scrollWidth = element.offsetWidth; 
var _left = _width - _scrollWidth; 
p.style.width = _scrollWidth + "px"; 
p.style.height = _height + "px"; 
p.style.left = _left + "px"; 
p.style.position = "absolute"; 
p.style.background = "#ccc"; 
contentBox.style.width = (mainBox.offsetWidth - _scrollWidth) + "px"; 
var _scrollHeight = parseInt(_height * (_height / conHeight)); 
if (_scrollHeight >= mainBox.clientHeight) { 
element.parentNode.style.display = "none"; 
} 
element.style.height = _scrollHeight + "px"; 
}, 
//拖动滚动条 
_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"; 
_wheelData = _t; 
} 
} 
element.onmouseover = function () { 
this.style.background = "#444"; 
} 
element.onmouseout = function () { 
this.style.background = "#666"; 
} 
}, 
//鼠标滚轮滚动,滚动条滚动 
_wheelChange: function (element, mainBox, contentBox) { 
var node = typeof mainBox == "string" ? $(mainBox) : mainBox; 
var flag = 0, rate = 0, wheelFlag = 0; 
if (node) { 
mouseWheel(node, function (data) { 
wheelFlag += data; 
if (_wheelData >= 0) { 
flag = _wheelData; 
element.style.top = flag + "px"; 
wheelFlag = _wheelData * 12; 
_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"; 
}); 
} 
}, 
_clickScroll: function (element, mainBox, contentBox) { 
var p = element.parentNode; 
p.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"; 
_wheelData = _top; 
} 
} 
} 
} 
new addScroll('mainBox', 'content', 'scrollDiv'); 
$(function () { 
$("#scrollBox").hide(); 
$("#mainBox").mouseover(function () { 

$("#scrollBox").show(); 

}).mouseout(function () { 
$("#scrollBox").hide(); 
}); 
}); 
</script> 
</body> 
</html>
Javascript 相关文章推荐
通过jQuery源码学习javascript(二)
Dec 27 Javascript
获取当前点击按钮的id用this.id实现
Mar 17 Javascript
浅谈Javascript中的函数、this以及原型
Oct 09 Javascript
Map.vue基于百度地图组件重构笔记分享
Apr 17 Javascript
jQuery响应滚动条事件功能示例
Oct 14 jQuery
详解如何在vscode里面调试js和node.js的方法步骤
Dec 24 Javascript
小程序测试后台服务的方法(ngrok)
Mar 08 Javascript
vue v-for循环重复数据无法添加问题解决方法【加track-by='索引'】
Mar 15 Javascript
vue进入页面时滚动条始终在底部代码实例
Mar 26 Javascript
详解vue 动态加载并注册组件且通过 render动态创建该组件
May 30 Javascript
vue 中this.$set 动态绑定数据的案例讲解
Jan 29 Vue.js
5个实用的JavaScript新特性
Jun 16 Javascript
Jquery实现的tab效果可以指定默认显示第几页
Oct 16 #Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
Oct 16 #Javascript
限制textbox或textarea输入字符长度的JS代码
Oct 16 #Javascript
父元素与子iframe相互获取变量和元素对象的具体实现
Oct 15 #Javascript
纯Javascript实现Windows 8 Metro风格实现
Oct 15 #Javascript
自定义ExtJS控件之下拉树和下拉表格附源码
Oct 15 #Javascript
Javascript 实现的数独解题算法网页实例
Oct 15 #Javascript
You might like
PHP二维关联数组的遍历方式(实例讲解)
2017/10/18 PHP
实例说明js脚本语言和php脚本语言的区别
2019/04/04 PHP
比较全面的event对像在IE与FF中的区别 推荐
2009/09/21 Javascript
在JavaScript并非所有的一切都是对象
2013/04/11 Javascript
php的文件上传入门教程(实例讲解)
2014/04/10 Javascript
javascript if条件判断方法小结
2014/05/17 Javascript
jQuery中offset()方法用法实例
2015/01/16 Javascript
JavaScript返回网页中超链接数量的方法
2015/04/03 Javascript
JavaScript实现下拉列表框数据增加、删除、上下排序的方法
2015/08/11 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
2015/09/14 Javascript
JavaScript 节流函数 Throttle 详解
2016/07/04 Javascript
浅述节点的创建及常见功能的实现
2016/12/15 Javascript
AngularJS 单选框及多选框的双向动态绑定
2017/04/20 Javascript
MUI实现上拉加载和下拉刷新效果
2017/06/30 Javascript
利用Javascript实现一套自定义事件机制
2017/12/14 Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
2017/12/22 Javascript
vue webpack打包优化操作技巧
2018/02/22 Javascript
通过jquery获取上传文件名称、类型和大小的实现代码
2018/04/19 jQuery
微信小程序使用scroll-view标签实现自动滑动到底部功能的实例代码
2018/11/09 Javascript
详解vue项目中使用token的身份验证的简单实践
2019/03/08 Javascript
Node.js 多线程完全指南总结
2019/03/27 Javascript
利用原生JavaScript实现造日历轮子实例代码
2019/05/08 Javascript
package.json中homepage属性的作用详解
2020/03/11 Javascript
[00:36]DOTA2风云人物相约完美“圣”典 12月17日不见不散
2016/11/30 DOTA
python使用folium库绘制地图点击框
2018/09/21 Python
基于多进程中APScheduler重复运行的解决方法
2019/07/22 Python
Python将主机名转换为IP地址的方法
2019/08/14 Python
浅谈Python 敏感词过滤的实现
2019/08/15 Python
Manuka Doctor美国官网:麦卢卡蜂蜜和蜂毒护肤
2016/12/25 全球购物
介绍一下JNDI的基本概念
2013/07/26 面试题
打造高效课堂实施方案
2014/03/22 职场文书
2014年小学教师工作自我评价
2014/09/22 职场文书
一般基层干部群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
《藏戏》教学反思
2016/02/23 职场文书
MYSQL 无法识别中文的永久解决方法
2021/06/03 MySQL
《遗弃》开发商删推文要跑路?官方回应:还在开发
2022/04/03 其他游戏