【发布时间】:2021-05-26 22:14:38
【问题描述】:
大多数视频播放器允许您单击进度条跳转到视频中的特定点,方法是使用鼠标在进度条上的位置来粗略计算出用户将跳到视频中的哪个点,如果此时点击进度条。
如果进度条最大值较小,则计算正确。
这是一个例子:
$("#range").on("click", function(event){
var tooltip = Math.round((event.offsetX / event.target.clientWidth) * parseInt(event.target.getAttribute('max')));
if (tooltip < 0) {
tooltip = 0
}else if (tooltip > 10) {
tooltip = 10
}
$(".calculated").text("Calculated Value: " + tooltip)
$(".real").text("Real Value: " + $(this).val())
});
.main{
position: relative;
width: 100%;
margin-top: 50px
}
/* Tooltip text */
.main .tooltip {
width: 120px;
background-color: #555;
color: #fff;
text-align: center;
padding: 5px;
border-radius: 6px;
}
input{
width: 100%;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="main">
<span class="tooltip calculated">5</span>
<span class="tooltip real">20</span>
<input type="range" min="0" max="10" value="20" id="range">
</div>
但如果进度条最大值很大,计算将不准确。
这是一个例子:
$("#range").on("click", function(event){
var tooltip = Math.round((event.offsetX / event.target.clientWidth) * parseInt(event.target.getAttribute('max')));
if (tooltip < 0) {
tooltip = 0
}else if (tooltip > 1000) {
tooltip = 1000
}
$(".calculated").text("Calculated Value: " + tooltip)
$(".real").text("Real Value: " + $(this).val())
});
.main{
position: relative;
width: 100%;
margin-top: 50px
}
/* Tooltip text */
.main .tooltip {
width: 120px;
background-color: #555;
color: #fff;
text-align: center;
padding: 5px;
border-radius: 6px;
}
input{
width: 100%;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="main">
<span class="tooltip calculated">20</span>
<span class="tooltip real">20</span>
<input type="range" min="0" max="1000" value="20" id="range">
</div>
有没有其他解决方案可以得到更准确的计算?我很高兴听到任何建议。
【问题讨论】:
-
尝试将
event.offsetX记录到控制台,看看为什么计算结果不符合您的预期。听起来像一个 XY 问题。你想做什么? -
是的,问题是像素数小于视频时长,所以计算不准确是正常的。
event.offsetX没有错
标签: javascript html jquery html5-video