Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Применение библиотек > jquery selectable, draggable


Автор: MrDmitry 23.10.2013, 16:23
Помогите уже сломал всю голову. Как написал в описании темы, использую плагин jquery.ui. Есть следующий код


Код

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
    <script type="text/javascript" src="JavaScript/jquery-1.9.1.js"></script>
    <script type="text/javascript" src="Ui/js/jquery-ui-1.10.3.custom.js"></script>             
    <link rel="stylesheet" type="text/css" href="Ui/css/ui-lightness/jquery-ui-1.10.3.custom.css">     
    <script type="text/javascript">  $(document).ready(function () {
  $("#work").selectable({tolerance:'fit', selected: function(event, ui) {
   alert(ui.selected.id);
   }
  });
  $("#test").draggable();
  $("#test2").draggable();
});
</script>
    <style>
      #work {width:100%; height:1000px;  position:relative;}
#test {
height:400px;
width:600px;
border:1px solid #000; 
position:relative;
left:300px;
top:75px;
}
#test #test2 {
height:95px;
width:100px;
border:1px solid #000;
position:relative;
left:50px;
top:40px;
}
#test3 {
height:30px;
width:50px;
border:1px solid #000;
position:absolute;
left:50px;
top:40px;
} 
    </style>
    <body>     
     <div id="work"> 
      <div id="test"><div id="test2"> </div></div>
     </div>
     
    </body>   
</html>




Задача: нужно если событие selectable произошло внутри слоя test вывести его id, также со слоем test2.

Проблема: Т.к слои test и test2 являются перемещаемыми (draggable) то и событие selectable на них не срабатывает. Событие selectable срабатывает если весь слой test или test2 находится внутри выделения.  

Я пытался решить проблему путем добавления еще одного  слоя с z-index 0. Таким способом выделение проходит и внутри слоев но id элементов не определяется

Автор: MrDmitry 24.10.2013, 21:55
Ни у кого нет ни каких идей? (

Автор: MrDmitry 25.10.2013, 02:03
В общем башка уже не варит, время 5 утра. Попытался сделать так и тоже не получается


Код
   $("#work").selectable({ 
          start: function (event) {
    startX = event.pageX; //Начальные координаты мыши
    startY = event.pageY;
   },
   stop: function(event){
    stopX = event.pageX;  //Конечные координаты мыши
    stopY = event.pageY;
   },
   selected: function(event, ui) {
    id = ui.selected.id;  //перебираем id выбранных элементов
    childX = $("#"+id).offset().left; //левая позиция выбранного элемента
    childY = $("#"+id).offset().top; //Верхняя позиция выбранного элемента
    childH = $("#"+id).height();//Размеры выбранного элемента
    childW = $("#"+id).width();
    objectW = stopX-startX; //Размеры выбранной области
    objectH = stopY-startY;
    if(startX>=childX || stopX<=childX)//Если начальные координаты входят в элемент и не выходят за его пределы по оси X
     {
      if(startY>=childY || stopY<=childY)//Если начальные координаты входят в элемент и не выходят за его пределы по оси Y то
       {
        new_id = id; //данный элемент то что нам нужно
        alert("Выделен id:"+new_id ); 
       }
     }
    id = " "; 
   }            
  });  
})
;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)