思路:通过div模拟时间滚动条
结构图
结构如下图所示(利用CSS样式表来调整样式):
结果如下:
通过滑动滑块,改变当前值。利用JavaScript获得滑块在滑动轴上的当前位置,并返回给当前显示值。另:滑块只能在给定范围内滑动。
HTML代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>时间滚动条</title>
<link rel="stylesheet" href="css/TimeBar.css">
<script type="text/javascript" src="js/jquery2.1.4.js"></script>
</head>
<body style="background-color: papayawhip;">
<div id="TimeBar" class="TimeBarClass">
<div class="TimePClass">
<p>时间:</p>
</div>
<div class="TimeBarContentClass">
<div class="TimeSliderClass">
<div id="TimeMove" class="TimeMoveClass"></div>
</div>
<div class="StartTimeClass">
<p id="StartTimeBar">0</p>
</div>
<div class="CurTimeClass">
<p id="CurTimeBar">0</p>
</div>
<div class="EndTimeClass">
<p id="EndTimeBar">600</p>
</div>
</div>
</div>
<script type="text/javascript" src="js/TimeBar.js"></script>
</body>
</html>
JavaScript代码如下:
/**
* Created by zhangxiaoshuang on 2016/9/8.
*/
$(document).ready(function() {
var $StartTimeBar=$("#StartTimeBar");
var $CurTimeBar=$("#CurTimeBar");
var $EndTimeBar=$("#EndTimeBar");
//进度条
var moveWindSpeed = false;//移动标记
var _xTimeMove;//鼠标离控件左上角的相对位置
var $TimeMove = $("#TimeMove");
$TimeMove.mousedown(function (e) {
moveWindSpeed = true;
_xTimeMove = e.pageX - parseInt($TimeMove.css("left"));
});
$(document).mousemove(function (e) {
var x = e.pageX - _xTimeMove;//控件左上角到屏幕左上角的相对位置
if (moveWindSpeed) {
if (x <=600 && x >= 0) {
$TimeMove.css({"left": x});
//转换为给定值的当前值
var s=Number($StartTimeBar.text());
var e=Number($EndTimeBar.text());
var n=e-s+1;
var PerTime=600/n;
var Min;
var Max;
for(var i=0;i<n;i++)
{
Min=i*PerTime;
Max=(i+1)*PerTime;
if((x>=Min && x<Max))
{
$CurTimeBar.text(s+i);
}
else if(x==600)
{
$CurTimeBar.text(e);
}
}
}
}
}).mouseup(function () {
moveWindSpeed = false;
});
//初始化函数 s,e分别为开始变量和结束变量
function InitTimeBar(s,e)
{
//更新数据
$StartTimeBar.text(s);
$CurTimeBar.text(s);
$EndTimeBar.text(e);
$TimeMove.css("left","0");
}
//调用一次,进度条走一格,且数据被更新
function NextTimeBar()
{
//获取当前Left
var CurLeft=$TimeMove.position().left;
//获取当前范围
var s=Number($StartTimeBar.text());
var e=Number($EndTimeBar.text());
//获取间隔
var n=e-s+1;
var PerTime=600/n;
var Min;
var Max;
var Ret;
for(var i=0;i<n;i++)
{
Min=i*PerTime;
Max=(i+1)*PerTime;
if((CurLeft>=Min && CurLeft<Max))
{
Ret=i;
}
else if(CurLeft==600)
{
Ret=n-1;
}
}
if(Ret==n-1)
{
return;
}
else
{
Ret++;
var temp=Number($CurTimeBar.text());
temp++;
$CurTimeBar.text(temp);
$TimeMove.css({"left": CurLeft+PerTime});
}
}
//InitTimeBar(0,4);
//NextTimeBar();
});