Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.05.2014, 01:10
Аватар для Daniil94
Новичок на форуме
Отправить личное сообщение для Daniil94 Посмотреть профиль Найти все сообщения от Daniil94
 
Регистрация: 16.01.2012
Сообщений: 9

Две одинаковые функции
Короче беда с слушателями событий
есть 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 а оно хз какое и происходят чудеса)

Хелп!
Ответить с цитированием
  #2 (permalink)  
Старый 27.05.2014, 07:35
Профессор
Отправить личное сообщение для krasovsky Посмотреть профиль Найти все сообщения от krasovsky
 
Регистрация: 21.12.2012
Сообщений: 869

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 - горизонтальный

Последний раз редактировалось krasovsky, 27.05.2014 в 07:38.
Ответить с цитированием
  #3 (permalink)  
Старый 27.05.2014, 17:48
Аватар для Daniil94
Новичок на форуме
Отправить личное сообщение для Daniil94 Посмотреть профиль Найти все сообщения от Daniil94
 
Регистрация: 16.01.2012
Сообщений: 9

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


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


Но ведь если добавить условие в сам обработчик, он будет не правильно работать
Ответить с цитированием
  #4 (permalink)  
Старый 28.05.2014, 08:07
Профессор
Отправить личное сообщение для krasovsky Посмотреть профиль Найти все сообщения от krasovsky
 
Регистрация: 21.12.2012
Сообщений: 869

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

а для событий - они так у тебя достаточно разные , навскидку через if else
Ответить с цитированием
  #5 (permalink)  
Старый 30.05.2014, 01:40
Аватар для Daniil94
Новичок на форуме
Отправить личное сообщение для Daniil94 Посмотреть профиль Найти все сообщения от Daniil94
 
Регистрация: 16.01.2012
Сообщений: 9

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


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как запустить в цикле последовательно две функции вызова ajax Bakhit jQuery 4 24.08.2013 12:13
Два файла, две функции, но с одним именем Janom Общие вопросы Javascript 19 31.01.2013 10:46
Помогите соединить две функции bratkovsky Общие вопросы Javascript 0 30.07.2012 23:53
Две функции не хотят работать в одном файле aDiVaNToS jQuery 17 30.06.2012 18:20
onload две функции Abraham jQuery 3 07.08.2011 18:45