Показать сообщение отдельно
  #2 (permalink)  
Старый 08.05.2018, 09:47
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Ваш регулятор не работает, когда указатель находится не над регулятором. Почему бы не прослушивать событие mousemove по всему документу?

Я модифицировал ваш код, вот что получилось (плохо получилось)

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width">
	<title>Audio player volume control UI test</title>
</head>
<body>
	<style>
		#vol {
			width: 10em; height: 1em;
			background: #eee;
			cursor: ew-resize;
		}

		#volCont {
			background: red;
			width: 50%; height: 100%;
		}
	</style>
	<div id="vol">
		<div id="volCont"></div>
	</div>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
	<script>

let isPointerDown = false;

$("#vol").on("mousedown", volumeHandler);
$(document).on("mousemove", volumeHandler);
$(document).on("mouseup", volumeHandler);

function volumeHandler(event) {
	if(event.type === "mousedown") isPointerDown = true;
	if(event.type === "mouseup") isPointerDown = false;
	if(!isPointerDown) return;

	var width = $("#vol").width();
	var volume = Math.min(Math.max(0, event.offsetX / width), 1);
	$("#volCont").width(width * volume);
	console.log(volume);
	// audio.volume = volume;
}

	</script>
</body>
</html>


Плохо, поскольку в случае, когда у вас 2 плеера и пользователь захочет двумя пальцами регулировать, то у него ничего не получится.
И вне окна не работает. И в HTML есть подобный элемент, так что выше даже "костыль"!

Можно использовать HTMLInputElement для этой цели

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width">
	<title>Audio player volume control UI test</title>
</head>
<body>
	<input type="range" min="0" max="1" step="any" id="vol">
	<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
	<script>

$("#vol").on("input", function(event) {
	var volume = event.target.value;
	console.log(volume);
	// audio.volume = volume;
});

	</script>
</body>
</html>
Ответить с цитированием