jQuery droppable ã®è¤æ°è¦ç´ ãéãªã£ãå ´åã®åé¡
第ï¼åã¸ãªã¡ãã£ã¢ãµããã
æ±å¤§é§å ´ãã£ã³ãã¹ã§éå¬ãããã第ï¼åã¸ãªã¡ãã£ã¢ãµããããè¡ã£ã¦ãããç¹ã«å°åæ å ±ã¨ãã½ã¼ã·ã£ã«ã®ãµã¼ãã¹ãæ å½ãã¦ãã訳ãããªããã§ããã©ãèªããã¦é¢ç½ããã ã£ãã®ã§ãè²ã 試ä½ãµã¼ãã¹ãè¦ãã¦ããã¦æ¥½ããã£ããå¤å°å³ã¢ããªå¤åè²·ããªã
æ¬é¡ã® jQuery
ä»è£½ä½ä¸ã®ãã®ã§æ´¾æã«ããããã®ã§ãä»å¾ãã¼ã¸ã§ã³ä¸ãã£ãæã«å¯¾å¿ãå¿ è¦ã«ãªããããããªãã®ã§ã¡ã¢ããã¦ãããå¯¾è±¡ç®æã¯ jQuery UI ã® droppable ç³»ï¼jquery-1.4.2 + jquery-ui-1.8ï¼ã
ã¯ãã¾ã
jQuery UI ã§ãæå®è¦ç´ ã« doroppable ãæå®ãã¦ããããé åã使ãããããã¾ã§ã¯åé¡ãªããåé¡ãªãã©ãããå®è£ ãç°¡åããã¦æ¶ãã§ãããä¸è¬çãªã¢ããªãªãããã§çµããã®ã§ç¹ã«åé¡ã¯ãªããåé¡ã¨ãªãã®ã¯ç°ãªãããããé åãã¬ã¤ã¤ã¼ã¨ãã¦éãªã£ã¦ããå ´åã
ãã¡ãã®æ³å®ã¨ãã¦ã¯ããªã¬ã³ã¸è²ã®é¨åã«ããããããããªã¬ã³ã¸ã¸ã®ãããããéãé¨åã«ãããããããéãé¨åã¸ã®ããããã¨ããããããããæ®éã ã¨æããã ãã©ãjQuery.ui.droppable ã¯å é¨çã«ç¡¬ãããæ¹ããã¦ãã¦ã交差ããé»ãé¨åã¸ããããããã¨ããªã¬ã³ã¸è²ã¸ã®ããããã¨èªèããã¦ãã¾ãï¼â»ãªã¬ã³ã¸ãéã®é ã«ä½æããå ´åï¼ããªãã ãã¨ã
çç±
ï¼æ¥åã«æ¸ããèªåã®ã³ã¼ãã§ããè¦ãããªãã®ã«ãã¾ãã¦ã jQuery ã®ã©ã¤ãã©ãªã¨ãè¦ãããªããã§ããã©ãªã¼ã©å ¨éã§ã½ã¼ã¹ãè¦ã¦ã¿ã訳ã§ãããçµè«ããè¨ãã¨ç¢ºèªããç¯å²ã§ä»¥ä¸ã®æµãã§å¦çãããããã ã£ãã
- droppable å®è¡
- 対象ã®è¦ç´ æ å ±ãå é¨é åã«push
- drop ã¤ãã³ãçºç
- å é¨é åãã«ã¼ããã㦠drop ä½ç½®ãè¦ç´ ã®é åå ã§ããããå¤å®
- æåã«ããããããã®ã drop 対象ã¨ãã
ã£ããããªï¼ï¼ï¼
大åãªäºãªã®ã§ããä¸åº¦ãã£ããããªï¼ï¼ï¼
ã¤ã¾ããè¤æ°ã®ã¬ã¤ã¤ãç»é¢ä¸ã®åãé åãå«ãã§ãã¦ãããã« drop ããå ´åãdroppable ã§ããããé ååããã®ãæ©ãæ¹ã®ã¬ã¤ã¤ã« drop ãæã£ã¦ãããã£ã¦äºã¿ãããè¨è¨æã®èæ ®æ¼ãï¼ããã¨ãå¥ã®ããæ¹ããã£ã¦èªåã®èªèä¸è¶³ï¼çµæ§èª¿ã¹ããã©ãããããæ å ±ã¯è¦ã¤ããããªãã£ãã
対å¿ç
jQuery UI 㮠該å½ç®æãä¿®æ£ããã
custom çã使ã£ã¦ããã®ã§ãããå
ã«æ¸ããã©ãä¿®æ£å ´æã¯ $.ui.ddmanager ã ãã§ãããããdroppables.default ã droppable ãªãã¸ã§ã¯ãã®æ ¼ç´é
åã§ã対象è¦ç´ ã®æ
å ±ãå«ã¾ãã¦ãããã§ãããã«ä¿®æ£ãã¤ã³ããçµãã¨ã$.ui.ddmanager._drop ã®é¢æ°ã
drop: function(draggable, event) { var dropped = false; $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() { if(!this.options) return; if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) dropped = dropped || this._drop.call(this, event); if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { this.isout = 1; this.isover = 0; this._deactivate.call(this, event); } }); return dropped;
ããã以ä¸ã®æ§ã«ä¿®æ£ããã
drop: function(draggable, event) { var dropped = false ,max_z = -1 ,_that, z, trgt, pos ; $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() { if (!this.options) return; if ( !this.options.disabled && this.visible ) { // get z-index trgt = this.element; z = ( ( trgt.css('zIndex') == 'auto' ) ? 0 : trgt.css('zIndex') ) || 0; // æå¤§z-indexã®ãã®ãå¦ç対象ã«ãã if ( z > max_z ){ // 対象è¦ç´ ã®ä½ç½® pos = trgt.offset(); // ããããä½ç½®ã«è¦ç´ ãéãªã£ã¦ããå ´åå¦ç if ( pos.left <= event.pageX && event.pageX <= parseInt(pos.left) + parseInt(trgt.width()) && pos.top <= event.pageY && event.pageY <= parseInt(pos.top) + parseInt(trgt.height()) ) { _that = this; max_z = z; } } } if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { this.isout = 1; this.isover = 0; this._deactivate.call(this, event); } }); return (_that) ? _that._drop.call(_that, event) : false; }
æ±ãã³ã¼ãã ãã©ããåºæ¬çã« ui ã®ã³ã¼ãã«ç´æ¥ä¿®æ£ã¯ãããªãæ¹ãè¯ãã®ã§ãèªåã®ã³ã¼ãã§ãªã¼ãã¼ã©ã¤ãããæ¹ãè¯ãã§ããä¿®æ£ãã¤ã³ãã¨ãã¦ã¯ãé åã«å ¥ã£ãè¦ç´ ã®ä¸ã§æå¤§ã®z-indexãæã£ã¦ãã¦ãdrop å ´æãè¦ç´ é åå ã«å«ãè¦ç´ ãå¦ç対象ã¨ãã¦ãã¾ãï¼$.ui.intersect ããã辺ã¨ãã䏿ã使ãã°ãã£ã¨è¯ãã£ãã®ããªï¼ã
ã¾ã¨ã
jQuery ã¨ãã®å¨è¾ºã©ã¤ãã©ãªã®å¨åã¯å¤§ããã¦ãããã¾ã§ç¬èªã«ä½ã£ã¦ãããã®ãæ¡éãã®ã³ã¹ãã§ç½®ãæããäºãåºæ¥ãã®ã¯å¨ç¥ã®äºå®ãã§ããã£ã±ãã©ã¤ãã©ãªãç´°ããäºãçªãè©°ããã¨çµå±èªåã§æãå ¥ããå¿ è¦ãçºçããäºããããã©ã¤ãã©ãªã«ä¾åããã£ã¦ãã¾ã£ã¦ãäººã¯æ²æ¨ã ãªã