javascript - “输入”类型范围内的问题,以及用于设计视频播放器的 JavaScript
问题描述
是否可以在更新图片中指定的光标移动的同时控制周期并更改其颜色
CSS 中那个时期的名称是什么?在这种情况下,Java Script 中的代码将如何?
var video = document.querySelector('.video');
var btn = document.getElementById('play-pause');
function intializePlayer() {
btn = document.getElementById("play-pause");
seekslider = document.getElementById("seekslider");
// Add event listeners
seekslider.addEventListener("change", vidSeek, false);
video.addEventListener("timeupdate", seektimeupdate, false);
}
window.onload = intializePlayer;
function vidSeek() {
var seekto = video.duration * (seekslider.value / 100);
video.currentTime = seekto;
}
function seektimeupdate() {
var nt = video.currentTime * (100 / video.duration);
seekslider.value = nt;
if (video.ended) {
btn.className = "play";
}
}
#seekslider {
height: 10px;
top: 0;
left: 0;
width: 100%;
background: #000;
}
input[type='range'] {
-webkit-appearance: none !important;
background: #000;
border: #666 1px solid;
height: 4px;
}
input[type='range']::-webkit-slider-thumb {
-webkit-appearance: none !important;
background: #FFF;
height: 15px;
width: 15px;
border-radius: 100%;
}
<input id="seekslider" type="range" min="0" max="100" value="0" step="1">
解决方案
正如评论中提到的,只有 Internet Explorer 允许您本地设计滑块的经过和剩余部分,至少这是我从这篇写得很好的关于样式范围滑块的文章中得到的。
但是,您可能会使用其他替代方法。我尝试的一个想法是将范围滑块放入一个DIV
包含元素以显示进度的元素中。背景元素将是(某种)滑块的宽度,而前景元素(“进度指示器”)将根据滑块的值扩展。请注意,我没有更改滑块本身的外观,但如果您想这样做,请阅读上面的文章,值得花时间。
让我们继续看相关的代码。
HTML 代码
<div class="slider-wrapper" style="width: 500px;">
<div class="slider-underlay"></div>
<input class="seekslider" type="range" min="30" max="60" value="0" step="1">
<div class="slider-progress"></div>
</div>
滑块位于定义背景颜色的背景元素和指示进度的前景元素的中间。
CSS 代码
.slider-wrapper {
display: inline-block;
position: relative;
height: 30px;
width: 310px;
}
.slider-underlay {
background-color: black;
position: absolute;
height: 100%;
width: 100%;
left: 0;
top: 0;
background: black;
border-right: 1px solid white;
z-index: 1;
}
.slider-progress {
position: absolute;
height: 100%;
width: 0;
left: 0;
top: 0;
background: #999;
border-right: 1px solid white;
z-index: 1;
}
.seekslider {
width: 98%;
z-index: 2;
position: absolute;
left: 0;
top: 3px;
}
JS代码
$(".seekslider").on('change, input', function() {
const ratio = (this.value - this.min) / (this.max - this.min);
const counterRatio = (0.5 - ratio) * 1.2;
const counterWidth = counterRatio * 10 + 2;
const width= $(this).width();
$(this).next('.slider-progress').width(ratio * width + counterWidth);
});
由于滑块元素本身内部的内部填充(拇指滑块只会接触到控件外部宽度的左侧或右侧),我们需要进行一些调整。当滑块在左侧时,我们需要让进度指示器的宽度稍微宽一些,但是当我们向右移动时,我们需要减少额外的填充,否则进度会超过滑块上的滑块对。上面的值是通过实验配置的,可能需要调整,很有可能在网上有更好的实现。
除了包装器之外,所有元素都按百分比缩放,因此您可以随意调整滑块的宽度。
以下是从 Codepen 中获取的一些演示图像:
火狐
边缘
铬合金
请让我知道您的想法以及这是否适合您。谢谢。
推荐阅读
- python - Python 与 Mbed 的串行通信
- excel - 一次将多个单元格引用从相对更改为绝对 ($)
- powershell - Powershell excel替换总是返回true
- php - 如何在php中编写前缀唯一优惠券代码
- swift - 如何快速检查符合协议的实例的类?
- javascript - 如何在 Laravel 完整日历上转到特定日期?
- elasticsearch - Kibana 6.4 作为守护进程运行
- python - Tensorflow eval() - (a/b).eval() 和 (a.eval()/b.eval()) 的不同结果
- android - RxJava Android 方向改变和网络请求
- angular - 角传单弹出点击不起作用?