我想实现一个网络界面与许多项目,可以选择和拖动来定位他们,组或单独。而是像Windows桌面,真的。
我们已经使用JQuery,所以添加这些将是第一选择。 JQuery UI Draggables和Selectables单独做我们想要的很多东西,但是不是真的一起工作,给我们正在寻找的那种效果。
我完全不知所措的JQ插件网站(它的’流行’算法似乎并不非常有用),并将欢迎指导,以避免在这里的很多轮改造,最好的方法,因为我猜这个隐喻有已经完成。
解决方法
我也需要做同样的事情,我不想使用来自eyecon.ro的界面扩展。经过一番研究,我发现
Combining Selectables And Draggables Using jQuery UI.它被很好地告诉,但为了使代码片段运行你必须挖入它。我能够使它的工作。我稍微改变了,这是我的方式来完成。它需要修改在生产级别上使用,但我希望它有所帮助。
- // this creates the selected variable
- // we are going to store the selected objects in here
- var selected = $([]),offset = {top:0,left:0};
- // initiate the selectable id to be recognized by UI
- $("#selectable").selectable({
- filter: 'div',});
- // declare draggable UI and what we are going to be doing on start
- $("#selectable div").draggable({
- start: function(ev,ui) {
- selected = $(".ui-selected").each(function() {
- var el = $(this);
- el.data("offset",el.offset());
- });
- if( !$(this).hasClass("ui-selected")) $(this).addClass("ui-selected");
- offset = $(this).offset();
- },drag: function(ev,ui) {
- var dt = ui.position.top - offset.top,dl = ui.position.left - offset.left;
- // take all the elements that are selected expect $("this"),which is the element being dragged and loop through each.
- selected.not(this).each(function() {
- // create the variable for we don't need to keep calling $("this")
- // el = current element we are on
- // off = what position was this element at when it was selected,before drag
- var el = $(this),off = el.data("offset");
- el.css({top: off.top + dt,left: off.left + dl});
- });
- }
- });
CSS样式,以便能够看到发生了什么:
- #selectable { width: 100%; height: 100%;}
- #selectable div {
- background: #ffc;
- line-height: 25px;
- height: 25px;
- width: 200px;
- border: 1px solid #fcc;
- }
- #selectable div.ui-selected {
- background: #fcaf3e;
- }
- #selectable div.ui-selecting {
- background: #8ae234;
- }
HTML标记:
- <div id="selectable">
- <div>item 1</div>
- <div>item 2</div>
- <div>item 3</div>
- <div>item 4</div>
- </div>