Две одинаковые функции
Короче беда с слушателями событий
есть 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 а оно хз какое и происходят чудеса) Хелп! |
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 - горизонтальный |
С этим всё ясно.
Я не понял как работать с самими слушателями событий т.е obj.bind('mousedown', function(e){ 13 relative = (e.pageY - offset); ... А для вертикального надо relative = (e.pageX - offset); Но ведь если добавить условие в сам обработчик, он будет не правильно работать |
ну для таких вещей как e.pageX и e.pageY я бы сделал так:
var epage = direction ? e.pageX : e.pageY;//и epage уже подставляешь вместо e.pageX/Y а для событий - они так у тебя достаточно разные , навскидку через if else |
Так проблема с условиями в обработчиках событий)
В каком месте вы предлагаете это написать? var epage = direction ? e.pageX : e.pageY; |
Часовой пояс GMT +3, время: 05:39. |