Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Две одинаковые функции (https://javascript.ru/forum/events/47510-dve-odinakovye-funkcii.html)

Daniil94 27.05.2014 01:10

Две одинаковые функции
 
Короче беда с слушателями событий
есть jquery код функции для горизонтального ползунка
function setSliderH(obj, funcDraw)
 {	
	var length=obj.width();
	var offset=obj.offset().left;
	obj.bind('mousedown', function(e){
		relative = (e.pageX - offset);
		funcDraw(relative/length*100);
		obj.bind('mousemove', function(e){
			relative = (e.pageX - offset);
			funcDraw(relative/length*100);
		});
	
	});

	obj.bind('mouseup mouseover', function(){
	obj.unbind( "mousemove" );
	});	
}



Есть почти идентичная функция для вертикального
function setSliderV(obj, funcDraw)
 {
	var length=obj.height();
	var offset=obj.offset().top;
	obj.bind('mousedown', function(e){
		relative = (e.pageY - offset);
		funcDraw(relative/length*100);
		obj.bind('mousemove', function(e){
			relative = (e.pageY - offset);
			funcDraw(relative/length*100);
			});
		});
 
	$("body").bind('mouseup', function(){
	obj.unbind( "mousemove" );
	});
 }



И вот который день мне не даёт покоя мысль, что этот код никуда не годится. Как объединить эти две функции в одну?
пробовал делать что то типо
function setSliderV(obj, funcDraw, vert)
{
        var length=obj.height();
	if (vert) var offset=obj.offset().top; else var offset=obj.offset().left; 
	obj.bind('mousedown', function(e){
		if (vert) ... else relative = (e.pageY - offset);
		....
		obj.bind('mousemove', function(e){
			if (vert) ... else relative = (e.pageY - offset);
			...
			});
		});
 
...
	});
}


При таком варианте как я понял, при каждом событии он смотрит на vert а оно хз какое и происходят чудеса)

Хелп!

krasovsky 27.05.2014 07:35

function setSliderV(obj, funcDraw,direction)
 {

  if (direction) {
	var length=obj.height();
	var offset=obj.offset().top;
  }
  else {
        var length=obj.width();
	var offset=obj.offset().left;
}
	obj.bind('mousedown', function(e){
		relative = (e.pageY - offset);
		funcDraw(relative/length*100);
		obj.bind('mousemove', function(e){
			relative = (e.pageY - offset);
			funcDraw(relative/length*100);
			});
		});
 
	$("body").bind('mouseup', function(){
	obj.unbind( "mousemove" );
	});
 }


переменная direction определяет направление - если true то вертикальный , false - горизонтальный

Daniil94 27.05.2014 17:48

С этим всё ясно.
Я не понял как работать с самими слушателями событий
т.е
obj.bind('mousedown', function(e){
13
        relative = (e.pageY - offset);
...


А для вертикального надо relative = (e.pageX - offset);


Но ведь если добавить условие в сам обработчик, он будет не правильно работать

krasovsky 28.05.2014 08:07

ну для таких вещей как e.pageX и e.pageY я бы сделал так:
var epage = direction ? e.pageX : e.pageY;//и epage уже подставляешь вместо e.pageX/Y

а для событий - они так у тебя достаточно разные , навскидку через if else

Daniil94 30.05.2014 01:40

Так проблема с условиями в обработчиках событий)
В каком месте вы предлагаете это написать?
var epage = direction ? e.pageX : e.pageY;


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