我用纯 JavaScript 开发了一个音量 Controller 。鼠标移动效果很好,但不幸的是我无法使其成为完美的音量 Controller 。 该功能面临两个问题:
鼠标点击时音量不改变
onmousemove
函数即使在onmouseup
之后仍继续工作var vControl = document.getElementById("voumecontrol"); var vNow = document.getElementById("volumenow"); var resultDiv = document.getElementById("result"); vControl.onmousedown = function (e) { vControl.onmousemove = function (e) { var varPosition = e.pageY - vControl.offsetTop; var volPercentage = varPosition / vControl.offsetHeight; kili = Math.abs((e.pageY - (vControl.offsetTop + vControl.offsetHeight)) / vControl.offsetHeight); var volumePer = kili * 100; vNow.style.height = volumePer + "%"; resultDiv.innerHTML = "volume position " + volumePer + "%"; } vControl.onmouseup = function (e) { vControl.onmousemove = function (e) { e.preventDefault(); } } }
最佳答案
鼠标单击时音量不会改变,因为要执行的函数
onmousemove
只会在单击后移动鼠标时执行。您应该在
onmouseup
内将onmousemove
设置为null
这是修复后的版本:
var vControl = document.getElementById("voumecontrol");
var vNow = document.getElementById("volumenow");
var resultDiv = document.getElementById("result");
var mousemovemethod = function (e) {
var varPosition = e.pageY - vControl.offsetTop;
var volPercentage = varPosition / vControl.offsetHeight;
kili = Math.abs((e.pageY - (vControl.offsetTop + vControl.offsetHeight)) / vControl.offsetHeight);
var volumePer = kili * 100;
vNow.style.height = volumePer + "%";
resultDiv.innerHTML = "volume position " + volumePer + "%";
}
vControl.onmousedown = function (e) {
mousemovemethod(e);
vControl.onmousemove = mousemovemethod;
vControl.onmouseup = function (e) {
vControl.onmousemove = null;
}
}
关于onmousedown 和 onmousemove 之间的 JavaScript 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23848590/