Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Проблемы со слайдером (https://javascript.ru/forum/dom-window/26649-problemy-so-slajjderom.html)

(Sandr) 16.03.2012 14:04

Проблемы со слайдером
 
Делаю слайдер, но столкнулся с проблемами и прошу помощи в решении.

1. когда нажимаешь на ползунок, перемещаешь его в одну из сторон и выходишь за поля элемента слайдера(но при этом не отпуская зажатую кнопку), а потом отпускаешь его, то он всё равно продолжает следовать за мышью(в разрешённых пределах). Хотя, событие onmouseup должно было бы прекратить движение ползулка.. Как это исправить?

2. хочу, чтобы при перемещении ползунка показывалось на сколько процентов от продвинулся от своего начального состояния до конечного. И всё в роде бы норм, да только вот когда ползунок доводишь до максимума, то показываются не все 100%, а 93%. Это происходит из-за выставленного условия "if(draggerLeft < 0 || draggerLeft > scale.offsetWidth - dragger.offsetWidth)", но если это условие изменить на "if(draggerLeft < 0 || draggerLeft > scale.offsetWidth)", то считается всё нормально, но если ползунок довести на максимум, то он на длину dragger.offsetWidth выходит за пределы "шкалы".


Сам код слайдера
function slider() {
	var source = document.getElementById('slider');
	
	var scale = document.createElement('div');
	scale.setAttribute('class', 'scaleClass');
	source.appendChild(scale);
	scale.style.width = '200px';
	scale.style.height = '10px';
	scale.style.backgroundColor = '#ddd';
	sCoords = getCoords(scale);
	var dragger = document.createElement('div');
	dragger.setAttribute('class', 'draggerClass');
	dragger.style.position = 'relative';
	scale.appendChild(dragger);
	dragger.style.width = '11px';
	dragger.style.height = '11px';
	dragger.style.border = '1px solid black';
	dragger.style.borderRadius = '10px';
	dragger.style.backgroundColor = 'silver';
	
	dragger.onmousedown = function(e) {
		e = getEvent(e);
		var coords = getCoords(dragger);
		var shiftX = e.pageX - coords.left;
		
		document.onmousemove = function(e) {
			draggerLeft = e.pageX - shiftX - sCoords.left;
			if(draggerLeft < 0 || draggerLeft > scale.offsetWidth - dragger.offsetWidth)
				return;
			dragger.style.left = draggerLeft + 'px';
			
			document.getElementById('result').innerHTML = parseInt(draggerLeft / scale.offsetWidth * 100) + '%';
		};
	};
	dragger.onmouseup = function() {
		document.onmousemove = document.onmouseup = null;
	};
	dragger.ondragstart = function() { return false; };
}

nerv_ 16.03.2012 17:47

1. mouseup на документ
2. особо не вникал, значит берите за 100% scale.offsetWidth - dragger.offsetWidth

(Sandr) 16.03.2012 20:05

nerv_,
1. тоже об этом подумал, но в данном случае происходит что-то чудное.. В первый раз всё срабатывает нормально, а если нажать ещё раз, тогда ползунок снова глючит, но в этот раз он всё время движется за курсором.

2. спасибо!)) Как же я сам не догадался:-E

(Sandr) 16.03.2012 23:29

Ребят, ну может у кого ещё какие мысли есть по поводу первого вопроса?)

nerv_ 18.03.2012 09:53

(Sandr), рабочий пример где глючит.

(Sandr) 18.03.2012 17:14

Вложений: 1
Вот файл.

(Sandr) 19.03.2012 23:24

Помощь больше не нужна.

viy.li 16.05.2012 23:17

файл не качается - с чем это связано


Часовой пояс GMT +3, время: 18:24.