上一篇​​使用​​jqueryUI​​编写了一个显示数值的滑动条​​,这次继续参考一下demo写一个自定义的滚动条。

参考demo

​constrain-movement​

需求

使用限制y轴运动的特性,写一个嵌套div,做成滚动条的形式。左边还有一个div,随着滚动条的滚动而改变上下位置。

编写基本HTML + CSS


jqueryUI 自定义滚动条_css


<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">
*{margin:0;padding: 0;}

.scroll_warp{
width: 500px;
height: 500px;
border: 1px solid #000;
margin: 50px auto;
overflow: hidden;
position: relative;
}

.scroll_warp .content{
width: 485px;
text-align: center;
}

.scroll_warp .scroll_outside{
position: absolute;
top: 0;
right: 0;
width: 10px;
height:100%;

}

.scroll_warp .scroll_outside .scroll_inside{
height: 200px;
border-radius: 15px;
background-color: pink;
}
</style>
</head>
<body>
<!-- div.scroll_warp>div.content+div.scroll_outside>div.scroll_inside -->
<div class="scroll_warp">
<div class="content">
<p>文章内容</p>
<p>文章内容</p>
<p>文章内容</p>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<p>文章内容</p>
<p>文章内容</p>
<p>文章内容</p>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<p>文章内容</p>
<p>文章内容</p>
<p>文章内容</p>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
</div>
<div class="scroll_outside">
<div class="scroll_inside"></div>
</div>
</div>
</body>
</html>

下面设置右边的粉红div可以拖动,同时修改左边内容div的top位置,就可以达到滚动拖动的效果了。


jqueryUI 自定义滚动条_css_02


思路:将内容的div改为绝对定位,根据拖动​​ui.position.top​​​的相反值来设置在内容​​div​​的top值即可。


jqueryUI 自定义滚动条_ide_03


实现代码如下:

<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">
*{margin:0;padding: 0;}

.scroll_warp{
width: 500px;
height: 500px;
border: 1px solid #000;
margin: 50px auto;
overflow: hidden;
position: relative;
}

.scroll_warp .content{
position: absolute;
top: 0;
left: 0;
width: 485px;
text-align: center;
}

.scroll_warp .scroll_outside{
position: absolute;
top: 0;
right: 0;
width: 10px;
height:100%;

}

.scroll_warp .scroll_outside .scroll_inside{
height: 200px;
border-radius: 15px;
background-color: pink;
}
</style>
<script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="js/jquery-ui.js"></script>
<script type="text/javascript">
$(function(){
$(".scroll_inside").draggable({
axis: "y",
containment: "parent", // 限制在父级元素下拖动
opacity: 0.6, // 设置拖动的时候,透明度设置为0.6

drag:function(ev,ui){
console.log(ui.position.top);

$(".content").css({"top":-ui.position.top});
}
})
})
</script>
</head>
<body>
<!-- div.scroll_warp>div.content+div.scroll_outside>div.scroll_inside -->
<div class="scroll_warp">
<div class="content">
<p>文章内容</p>
<p>文章内容</p>
<p>文章内容</p>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<p>文章内容</p>
<p>文章内容</p>
<p>文章内容</p>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<p>文章内容</p>
<p>文章内容</p>
<p>文章内容</p>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
</div>
<div class="scroll_outside">
<div class="scroll_inside"></div>
</div>
</div>
</body>
</html>


jqueryUI 自定义滚动条_html_04