2012-05-08 16 views
1

私はJQueryとJavaScriptを初めて使用しているので、ドラッグアンドドロップ機能の作成には苦労していました。JQuery:コンテナ内のドラッグアンドドロップ

ここではアイコンをあるコンテナから別のコンテナにドラッグアンドドロップする必要があります。 アイコンを右のコンテナにドロップすると、左のコンテナのアイコンはグレースケールでなければならず、アイコンが右から左のコンテナにドラッグアンドドロップされるとグレースケールから通常の色になります。 左のコンテナでは機能しないはずの右のコンテナアイコンのonclick関数を書くだけでいいです。

これを実行する方法はありますか。私は多くのプラグインを試しましたが失敗しました。

注:HTML5には含めないでください。

enter image description here

コード:

HTML

<div id="columns">   
     <ul id="column2" class="column"> 
      <li id="image1"><img class="widget-head" src="img/[email protected]" id="1"/></li> 
      <li id="image2"><img class="widget-head" src="img/[email protected]" id="2"/></li> 
      <li id="image3"><img class="widget-head" src="img/[email protected]" id="3"/></li> 
      <li id="image4"><img class="widget-head" src="img/[email protected]" id="4"/></li> 
     </ul> 

     <ul id="column3" class="column"></ul> 

    </div> 

JS

var iNettuts = { 

    jQuery : $, 

    settings : { 
     columns : '.column', 
     widgetSelector: '.widget', 
     handleSelector: '.widget-head', 
     contentSelector: '.widget-content', 
     widgetDefault : { 
      movable: true, 
      removable: true, 
      collapsible: true, 
      editable: true, 
      colorClasses : ['color-yellow', 'color-red', 'color-blue', 'color-white', 'color-orange', 'color-green'] 
     }, 
     widgetIndividual : { 
      intro : { 
       movable: false, 
       removable: false, 
       collapsible: false, 
       editable: false 
      } 
     } 
    }, 

    init : function() { 
     this.attachStylesheet('inettuts.js.css'); 
     this.addWidgetControls(); 
     this.makeSortable(); 
    }, 

    getWidgetSettings : function (id) { 
     var $ = this.jQuery, 
      settings = this.settings; 
     return (id&&settings.widgetIndividual[id]) ? $.extend({},settings.widgetDefault,settings.widgetIndividual[id]) : settings.widgetDefault; 
    }, 

    addWidgetControls : function() { 
     var iNettuts = this, 
      $ = this.jQuery, 
      settings = this.settings; 

     $(settings.widgetSelector, $(settings.columns)).each(function() { 
      var thisWidgetSettings = iNettuts.getWidgetSettings(this.id); 
      if (thisWidgetSettings.removable) { 
       $('<a href="#" class="remove">CLOSE</a>').mousedown(function (e) { 
        e.stopPropagation();  
       }).click(function() { 
        if(confirm('This widget will be removed, ok?')) { 
         $(this).parents(settings.widgetSelector).animate({ 
          opacity: 0  
         },function() { 
          $(this).wrap('<div/>').parent().slideUp(function() { 
           $(this).remove(); 
          }); 
         }); 
        } 
        return false; 
       }).appendTo($(settings.handleSelector, this)); 
      } 

      if (thisWidgetSettings.editable) { 
       $('<a href="#" class="edit">EDIT</a>').mousedown(function (e) { 
        e.stopPropagation();  
       }).toggle(function() { 
        $(this).css({backgroundPosition: '-66px 0', width: '55px'}) 
         .parents(settings.widgetSelector) 
          .find('.edit-box').show().find('input').focus(); 
        return false; 
       },function() { 
        $(this).css({backgroundPosition: '', width: ''}) 
         .parents(settings.widgetSelector) 
          .find('.edit-box').hide(); 
        return false; 
       }).appendTo($(settings.handleSelector,this)); 
       $('<div class="edit-box" style="display:none;"/>') 
        .append('<ul><li class="item"><label>Change the title?</label><input value="' + $('h3',this).text() + '"/></li>') 
        .append((function(){ 
         var colorList = '<li class="item"><label>Available colors:</label><ul class="colors">'; 
         $(thisWidgetSettings.colorClasses).each(function() { 
          colorList += '<li class="' + this + '"/>'; 
         }); 
         return colorList + '</ul>'; 
        })()) 
        .append('</ul>') 
        .insertAfter($(settings.handleSelector,this)); 
      } 

      if (thisWidgetSettings.collapsible) { 
       $('<a href="#" class="collapse">COLLAPSE</a>').mousedown(function (e) { 
        e.stopPropagation();  
       }).toggle(function() { 
        $(this).css({backgroundPosition: '-38px 0'}) 
         .parents(settings.widgetSelector) 
          .find(settings.contentSelector).hide(); 
        return false; 
       },function() { 
        $(this).css({backgroundPosition: ''}) 
         .parents(settings.widgetSelector) 
          .find(settings.contentSelector).show(); 
        return false; 
       }).prependTo($(settings.handleSelector,this)); 
      } 
     }); 

     $('.edit-box').each(function() { 
      $('input',this).keyup(function() { 
       $(this).parents(settings.widgetSelector).find('h3').text($(this).val().length>20 ? $(this).val().substr(0,20)+'...' : $(this).val()); 
      }); 
      $('ul.colors li',this).click(function() { 

       var colorStylePattern = /\bcolor-[\w]{1,}\b/, 
        thisWidgetColorClass = $(this).parents(settings.widgetSelector).attr('class').match(colorStylePattern) 
       if (thisWidgetColorClass) { 
        $(this).parents(settings.widgetSelector) 
         .removeClass(thisWidgetColorClass[0]) 
         .addClass($(this).attr('class').match(colorStylePattern)[0]); 
       } 
       return false; 

      }); 
     }); 

    }, 

    attachStylesheet : function (href) { 
     var $ = this.jQuery; 
     return $('<link href="' + href + '" rel="stylesheet" type="text/css" />').appendTo('head'); 
    }, 

    makeSortable : function() { 
     var iNettuts = this, 
      $ = this.jQuery, 
      settings = this.settings, 
      $sortableItems = (function() { 
       var notSortable = ''; 
       $(settings.widgetSelector,$(settings.columns)).each(function (i) { 
        if (!iNettuts.getWidgetSettings(this.id).movable) { 
         if(!this.id) { 
          this.id = 'widget-no-id-' + i; 
         } 
         notSortable += '#' + this.id + ','; 
        } 
       }); 
       return $('> li:not(' + notSortable + ')', settings.columns); 
      })(); 

     $sortableItems.find(settings.handleSelector).css({ 
      cursor: 'move' 
     }).mousedown(function (e) { 
      $sortableItems.css({width:''}); 
      $(this).parent().css({ 
       width: $(this).parent().width() + 'px' 
      }); 
     }).mouseup(function() { 
      if(!$(this).parent().hasClass('dragging')) { 
       $(this).parent().css({width:''}); 
      } else { 
       $(settings.columns).sortable('disable'); 
      } 
     }); 

     $(settings.columns).sortable({ 
      items: $sortableItems, 
      connectWith: $(settings.columns), 
      handle: settings.handleSelector, 
      placeholder: 'widget-placeholder', 
      forcePlaceholderSize: true, 
      revert: 300, 
      delay: 100, 
      opacity: 0.8, 
      containment: 'document', 
      start: function (e,ui) { 
       $(ui.helper).addClass('dragging'); 
      }, 
      stop: function (e,ui) { 
       $(ui.item).css({width:''}).removeClass('dragging'); 
       $(settings.columns).sortable('enable'); 
      } 
     }); 
    } 

}; 

iNettuts.init(); 
+0

@Arunコードが更新されました。答えはありますか? –

答えて

1

this nettuts tutorialさんのように見えます。コードを見ると、あなたが実際に必要としていない多くのことが記述されている必要条件を満たしていることがわかります。

このチュートリアルでは、jQuery UIと、特に興味があるのはdraggable interactionです。私は、あなたがこの文書を見て、理解することを奨励するでしょう。あなたがやろうとしていることを達成することは間違いありません。気を散らす余分なコードがなくても、力学の理解は間違いなくあなたを長期的に助けます。

+0

私はいくつかのプラグインを試して、私は必要なものを達成することができませんでした。それは複雑なので。 –

+0

更新された質問に沿って回答を更新しました。 –

+0

ありがとうございます。私はそれをやろうとします。 –

関連する問題