为什么我的垂直音量条不起作用?
Why is my vertical volume bar not working?
我正在尝试制作一个垂直滑块来控制背景音频的音量,它应该可以工作,但我有两个问题:
一个是由于某种原因它不跟随鼠标位置,另一个是拖动的大问题。第一次拖动不显示,但是一旦我再次拖动它就不会在释放鼠标时停止,而且我无法单击页面中的其余内容。谁能帮我解决这个问题?我仍然是 Javascript 的初学者。
提前致谢!
var e = document.querySelector('.volume-slider-con');
var eInner = document.querySelector('.volume-slider');
var audio = document.querySelector('audio');
var drag = false;
e.addEventListener('mouseup',function(ev){
drag = true;
updateBar(ev.clientY);
});
document.addEventListener('mousemove',function(ev){
if(drag){
updateBar(ev.clientY);
}
});
document.addEventListener('mousdown',function(ev){
drag = false;
});
var updateBar = function (y, vol) {
var volume = e;
var percentage;
if (vol) {
percentage = vol * 100;
} else {
var position = y - volume.offsetTop;
percentage = 100 - (25 * position / volume.clientHeight);
}
if (percentage > 100) {
percentage = 100;
}
if (percentage < 0) {
percentage = 0;
}
eInner.style.width = percentage +'%';
audio.volume = percentage / 100;
};
.volume-slider-con{
height:15px;
width:10%;
margin-top: 255px;
margin-left: 106px;
position:relative;
background-color: #000000;
transform: rotate(270deg);
border-radius: 2px;
}
.volume-slider{
height:100%;
width:100%;
position:relative;
background-color: #ffffff;
border-radius: 2px;
}
<div class="volume-slider-con">
<div class="volume-slider"></div>
</div>
您可以考虑使用 <input type="range">
并使用 css 变换将其旋转 90 度,而不是完全从头开始构建一个。
然后您还可以使用事件侦听器对输入和更改执行操作。
只要滑块拇指滑过范围(拖动时)并且 returns 滑块位置的值持续不断,输入事件就会运行。
一旦滑块被释放,on change 事件只运行一次。
我正在尝试制作一个垂直滑块来控制背景音频的音量,它应该可以工作,但我有两个问题: 一个是由于某种原因它不跟随鼠标位置,另一个是拖动的大问题。第一次拖动不显示,但是一旦我再次拖动它就不会在释放鼠标时停止,而且我无法单击页面中的其余内容。谁能帮我解决这个问题?我仍然是 Javascript 的初学者。 提前致谢!
var e = document.querySelector('.volume-slider-con');
var eInner = document.querySelector('.volume-slider');
var audio = document.querySelector('audio');
var drag = false;
e.addEventListener('mouseup',function(ev){
drag = true;
updateBar(ev.clientY);
});
document.addEventListener('mousemove',function(ev){
if(drag){
updateBar(ev.clientY);
}
});
document.addEventListener('mousdown',function(ev){
drag = false;
});
var updateBar = function (y, vol) {
var volume = e;
var percentage;
if (vol) {
percentage = vol * 100;
} else {
var position = y - volume.offsetTop;
percentage = 100 - (25 * position / volume.clientHeight);
}
if (percentage > 100) {
percentage = 100;
}
if (percentage < 0) {
percentage = 0;
}
eInner.style.width = percentage +'%';
audio.volume = percentage / 100;
};
.volume-slider-con{
height:15px;
width:10%;
margin-top: 255px;
margin-left: 106px;
position:relative;
background-color: #000000;
transform: rotate(270deg);
border-radius: 2px;
}
.volume-slider{
height:100%;
width:100%;
position:relative;
background-color: #ffffff;
border-radius: 2px;
}
<div class="volume-slider-con">
<div class="volume-slider"></div>
</div>
您可以考虑使用 <input type="range">
并使用 css 变换将其旋转 90 度,而不是完全从头开始构建一个。
然后您还可以使用事件侦听器对输入和更改执行操作。
只要滑块拇指滑过范围(拖动时)并且 returns 滑块位置的值持续不断,输入事件就会运行。 一旦滑块被释放,on change 事件只运行一次。