demo:

html:

<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta name="author" content="guojufeng">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>兼容到ie7的自定义滚动条</title>
<link rel="stylesheet" href="scrollStyle.css">
</head> <body>
<div class="box" id="scrollBox">
<!-- 滚动条 -->
<div class="scrollBar-area" id="scrollBarBox">
<div class="scrollBar-bar" id="scrollBar"></div>
</div>
<ul class="scrollCont" id="scrollCont">
<li>
<span>滚动效果第一项</span>
</li>
<li>
<span>滚动效果第一项</span>
</li>
<li>
<span>滚动效果第一项</span>
</li>
<li>
<span>滚动效果第一项</span>
</li>
<li>
<span>滚动效果第一项</span>
</li>
<li>
<span>滚动效果第一项</span>
</li>
<li>
<span>滚动效果第一项</span>
</li>
<li>
<span>滚动效果第一项</span>
</li>
</ul>
</div>
<script src='http://libs.baidu.com/jquery/1.7.1/jquery.min.js'></script>
<script src="scrolldown.js"></script>
</body> </html>

css:

html.body,li,ul{
margin:;
padding:;
list-style: none;
}
body{
padding-top: 45px;
padding-left: 50px;
}
.box{
position: relative;
padding: 0px 11px;
background: #dbe0ff; width: 300px;
height: 180px;
overflow: hidden;
}
.scrollBar-area{
position: absolute;
/* 注意下边这种写法 */
top:;
bottom:;
/* top+bottom均为0,如果父元素height不为auto,就相当于height:100%的设置 */
/* 但是这种写法再ie5中用js得不到高度,jq的height()方法和js的clientHeight都得不到 */
right:;
width: 11px;
border-radius: 10px;
height: 100%;
}
.scrollBar-bar{
margin: 0 3px;
border-radius: 10px;
background: #b8c2ff;
cursor: pointer; /* 关键代码,提前定位好改变top值进行滚动 */
position: absolute;
top:;
right:;
z-index:;
left:; }
.scrollCont{
padding: 10px 0;
/* 关键代码,提前定位好改变top值进行滚动 */
position: absolute;
top:;
/* 注意下面这种写法 */
right:;
left:;
/* left+right均为0,如果父元素width不为0,就相当于块元素的width:100%的设置 */
}
li{
margin: 5px 0;
padding: 5px 10px;
cursor: pointer;
}
li:hover{
background: #a3b0ff;
}

js:

 var firefox = navigator.userAgent.indexOf('Firefox') != -1;//监测火狐浏览器下使用兼容写法
// 下拉滚动条
//竖向的滚动条,四个参数,可视区域ID,内容区域Id,滚动条区域,滚动条,
function ScrollTop(params){
var $container = $(params.scrollBox),//可视区域
$contanr = $(params.scrollCont),//内容区域
$conScroll = $(params.scrollBarBox),//滚动条活动区域
$sroll = $(params.scrollBar),//滚动条
startY = 0,//开始位置
lastY = 0,//结束位置
YN = false,//判断鼠标按下
bBtn = true;//判断滚动条上滚还是下滚
var $containerH = $container.height();
var $contanrH = $contanr.outerHeight();
// console.log($container.height())
// console.log($conScroll.height())
// console.log($contanr.outerHeight())
// console.log($container.height()*$conScroll.height()/$contanr.outerHeight())
function MouseScr(ev){
var $containerH1 = $container.height();
var $contanrH1 = $contanr.outerHeight();
if($containerH1 >= $contanrH1){
return false
}else{
var ev = ev || window.event,
TopY = 0;
if(ev.detail){
bBtn = ev.detail>0 ? true : false;
}
else{
bBtn = ev.wheelDelta<0 ? true : false;
}
if(bBtn){ //下
TopY = $contanr.position().top-10;
}
else{ //上
TopY = $contanr.position().top+10;
}
var maxTop = $contanr.outerHeight()-$container.outerHeight();
TopY = TopY > 0 ? 0 : TopY;
TopY = TopY < -maxTop ? -maxTop : TopY;
// console.log($conScroll.outerHeight());
$contanr.css({'top':TopY+'px'});
$sroll.css({'top':$sroll.height()*Math.abs(TopY)/$conScroll.height()+'px'}); if(ev.preventDefault){
ev.preventDefault();
}
else{
return false;
}
}
}
if( $containerH >= $contanrH){
// console.log('remove scroll')
$sroll.css('height',$containerH);
// 禁止鼠标事件
function MouseWheel(e) {
// console.log('we')
$contanr.css('top',0);
$sroll.css('top',0);
e = e || window.event;
if (e.stopPropagation) e.stopPropagation();
else e.cancelBubble = true;
if (e.preventDefault) e.preventDefault();
else e.returnValue = false;
return false;
};
if(firefox){
$contanr[0].removeEventListener('DOMMouseScroll',MouseScr,false);//兼容火狐。。。。。。。
$conScroll[0].removeEventListener('DOMMouseScroll',MouseScr,false);
}
// console.log($contanr)
// console.log($contanr[0])
$contanr[0].onmousewheel = MouseWheel;
$conScroll[0].onmousewheel = MouseWheel;
}else{
// 滚动条的高度等于可视区域高度*滚动区域高度/内容高度。
$sroll.css({'height':$container.height()*$conScroll.height()/$contanr.outerHeight()+'px'});
$sroll.mousedown(function(e){
startY = e.clientY - this.offsetTop;
this.setCapture && this.setCapture();//避免IE下拖拽过快鼠标失去对象
YN = true;
return false;
});
$sroll.mousemove(function(e){
var maxVal = $conScroll.height() - $(this).height();
if(YN){
lastY = e.clientY - startY;
lastY = lastY < 0 ? 0 :lastY;
lastY = lastY > maxVal ? maxVal : lastY; $(this).css({'top':lastY+'px'});
$contanr.css({'top':-$conScroll.height()*lastY/$(this).height()+'px'});
window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty(); // 防止拖动文本
e.stopPropagation();
} return false;
}); $sroll.mouseup(function(e){
YN = false;
NumY = lastY;
return false;
});
//为内容区域添加滑轮滚动事件
if($contanr[0].addEventListener){
$contanr[0].addEventListener('DOMMouseScroll',MouseScr,false);//兼容火狐。。。。。。。对,不是ie是火狐。
$conScroll[0].addEventListener('DOMMouseScroll',MouseScr,false);
}
$contanr[0].onmousewheel = MouseScr;
$conScroll[0].onmousewheel = MouseScr;
}
}
(function(){
var params = {
scrollBox : '#scrollBox',
scrollCont : '#scrollCont',
scrollBarBox : '#scrollBarBox',
scrollBar : '#scrollBar'
}
/*注意: .height()方法不计算padding在内 */
if($(scrollCont).height()>$(scrollBox).height()){
$(scrollBar).css('visibility','visible');
ScrollTop(params);
}else{
$(scrollBar).css('visibility','hidden');
}
})();

JS - 兼容到ie7的自定义样式的滚动条封装的更多相关文章

  1. js alert(“”)弹框 自定义样式

    首先用css渲染一个样式 #msg{ height: 2rem; text-align: center; position: fixed; top: 50%; margin-top: -1rem; l ...

  2. js兼容方法:获取当前样式|计算后样式 getStyle

    function getStyle(obj,attr){ if(obj.currentStyle){ //for IE return obj.currentStyle[attr]; }else{ re ...

  3. div错位/解决IE6、IE7、IE8样式不兼容问题

    IE6里DIV错位的问题    原文:chinafine 采用”FLOAT:LEFT“的DIV在IE8.IE7.都没问题,IE6下却向下移动,出现空白.这是因为,IE6采用的内核默认把DIV之间的距离 ...

  4. div错位解决IE6、IE7、IE8样式不兼容问题

    IE6里DIV错位的问题       采用”FLOAT:LEFT“的DIV在IE8.IE7.都没问题,IE6下却向下移动,出现空白.这是因为,IE6采用的内核默认把DIV之间的距离增加了3~5个PX, ...

  5. 解决IE5、IE6、IE7与W3C标准的冲突,使用(IE7.js IE8.js)兼容

    如果分别用IE5.IE6.IE7浏览同一个网页,将可能出现不一样的效果. 这是它们之间对CSS的解析选择器不一样或错误和个别bug所导致.为了解决这些错误和bug. 我们不得不找到一个能平衡于它们之间 ...

  6. js+css实现点击回到顶部的效果(最低兼容至ie7)

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  7. 一步步开发自己的博客 .NET版 剧终篇(6、响应式布局 和 自定义样式)

    前言 这次开发的博客主要功能或特点:    第一:可以兼容各终端,特别是手机端.    第二:到时会用到大量html5,炫啊.    第三:导入博客园的精华文章,并做分类.(不要封我)    第四:做 ...

  8. css js 兼容问题

    js  兼容问题 1. document.form.item 问题问题:代码中存在 document.formName.item("itemName") 这样的语句,不能在FF下运 ...

  9. 拖放排序插件Sortable.js 兼容好及功能全个人觉得比dragula.js 好的多

    经测试,Sortable.js 兼容好和使用方便都是比较不错的,特别手机端使用很棒 介绍 Sortable.js是一款轻量级的拖放排序列表的js插件(虽然体积小,但是功能很强大)下载地址:https: ...

随机推荐

  1. com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method

    查看了网友们的错误原因, 需要进行实例化的类没有进行实例化,具体没有实例化的类会在错误信息中显示,在错误信息中搜索“Serializable”即可找到将其实现序列化可消除错误. 是在使用Dubbo提供 ...

  2. C# 各种输入格式验证#各种输入格式验证

    /// <summary> /// 各种输入格式验证 /// </summary> public class ValidateUtil { private static Reg ...

  3. IntelliJ IDEA Default Keymap

    Alt+回车 导入包,自动修正Ctrl+N   查找类Ctrl+Shift+N 查找文件Ctrl+Alt+L  格式化代码Ctrl+Alt+O 优化导入的类和包Alt+Insert 生成代码(如get ...

  4. CentOS 7 安装、配置、使用 PostgreSQL 10 安装及基础配置

    官网安装方法:https://www.postgresql.org/download/linux/redhat/ 卸载的话使用 yum remove 相应的安装 Install the reposit ...

  5. Service 保活法之一

    我们都知道,在Android中,Service有两种启动方式: startService 以startService()启动服务,系统将通过传入的Intent在底层搜索相关符合Intent里面信息的s ...

  6. Android图片编码机制深度解析(Bitmap,Skia,libJpeg)

    问题 工作中遇到了Android中有关图片压缩保存的问题,发现这个问题还挺深,而且网上资料比较有限,因此自己深入研究了一下,算是把这个问题自顶至下全部搞懂了,在此记录. 相关的几个问题如下: 1.An ...

  7. Thinkphp5模板继承

    代码 application\index\controller\index.php <?php namespace app\index\controller; use app\index\con ...

  8. redhat enterprise edition 6.8:禁止ipv6后,nfs文件系统无法挂载:no such device

    如题:谨记. 附注:如何禁止ipv6? 方法一 第一种方法是通过 /etc/sysctl.conf 文件对 /proc 进行永久修改. 换句话说,就是用文本编辑器打开 /etc/sysctl.conf ...

  9. 企业IT管理说:全自动就一定是最好的吗?

    现如今,企业基础设施变得越来越网络化.虚拟化并且愈加复杂,人们更愿意寻求自动化以期优化信息管理过程.毕竟,有谁不想要一个更为有效且迅速的法子来管控数据的安全.存储.应用性能监控以及IT的经济性?这不用 ...

  10. zookeeper入门系列讲解

    zookeeper可谓是目前使用最广泛的分布式组件了.其功能和职责单一,但却非常重要.    在现今这个年代,介绍zookeeper的书和文章可谓多如牛毛,本人不才,试图通过自己的理解来介绍zooke ...