ããã«ã¡ã¯ãHabrïŒ
ç§ã®ååã¯Vyacheslav Grimalskyã§ããã©ã³ãã£ã³ã°ããŒãžãã¶ã€ããŒã«åãçµãã§ããŸãããã®ããŒãžã§ã¯ãããŒãžããã©ãã°ã¢ã³ãããããããŸãã
å
ã
ã¯ã³ã³ã¹ãã©ã¯ã¿ãŒã®äžéšã§ãã£ãã€ãã³ãããŒã«ã«ã€ããŠèª¬æããŸããããã®åŸãå¥ã®jQueryãã©ã°ã€ã³-jquery-behaviorã«ç§»åããŸããã
ãã©ã°ã€ã³ã¯jQueryæ©èœã䜿çšãã次ã®æ©èœã§è£å®ããŸãã
- ã€ãã³ããã³ãã©ãŒã®åå¥ã®ã°ã«ãŒããæäœããŸãã ãã®ããã«ãã€ãã³ãã³ã³ãããŒã©ãŒã䜿çšãããŸãã
- ãã¹ãŠã®ã³ã³ãããŒã©ãŒã€ãã³ããã³ãã©ãŒãäžèŠ§è¡šç€ºããã«äžåºŠã«ç¡å¹ã«ããããšãã§ããŸãã
- ã€ãã³ããã³ãã©ãŒã®ã€ãã³ãã®è¿œè·¡ã
- ããããã®åŒã³åºãã®æ£ç¢ºãªæ°ã調ã¹ãããšãã§ããŸãã
- åã
ã®ã€ãã³ããã³ãã©ãŒã®æäœããŸãã¯ã³ã³ãããŒã©ãŒå
šäœãäžåºŠã«äžæåæ¢ã§ããŸãã
- ç¹å®ã®èŠçŽ ã®ã€ãã³ããã³ãã©ãŒãç¹å®ã®åå空éãæã€ã€ãã³ããã³ãã©ãŒããŸãã¯ãã¹ãŠã®ã³ã³ãããŒã©ãŒã€ãã³ããã³ãã©ãŒã®å®å
šãªãªã¹ããååŸããæ©èœã
å±æ©ã«whatããŠãããã®ãããã«ç€ºããŸãã
ã€ãã³ãã³ã³ãããŒã©ãŒ
var behavior = $.Behavior();
ã€ãã³ãã³ã³ãããŒã©ãŒ-ã€ãã³ããã³ãã©ãŒãè¿œå ã§ãããããã«é¢ãããã¹ãŠã®æ
å ±ãä¿åãããªããžã§ã¯ãã
ã€ãã³ããã³ãã©ãŒã¯åé€ããã³äžæåæ¢ã§ããŸãããè¿œå ããããã®ã®ã¿ã§ãã
ããã«ããããããžã§ã¯ãã®ããŸããŸãªç¬ç«ããéšåã®ã€ãã³ããã³ãã©ãŒãåé¢ããåå¥ã«æäœã§ããŸãã
jQueryã¹ã¿ã€ã«ã®ã©ãããŒã®äœ¿çš
ãã©ã°ã€ã³ã䜿çšãããšããªããžã§ã¯ããæäœããã©ãããŒãäœæã§ããŸãã
jQueryïŒ
$('body').click(function () {}); $(window).on('resize', function () {});
ãã©ã°ã€ã³ïŒ
behavior('body').click(function () {}); behavior(window).on('resize', function () {});
ããã§ã¯ããã¹ãŠã®é¢æ°ãšãã®æ§æãjQueryããã³ããŒãããŸãããããã®å®å
šãªãªã¹ãã§ãã
1ã€ã®ããªã¬ãŒtriggerHandlerãªããã€ã³ãã¢ã³ãã€ã³ãããªã²ãŒãã¢ã³ãããŒãã©ãŒã«ã¹ãã©ãŒã«ã¹ãã©ãŒã«ã¹ã¢ãŠãããŒããµã€ãºå€æŽã¹ã¯ããŒã«ã¢ã³ããŒãã¯ãªãã¯dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleaveå€æŽéžæéä¿¡ããŒããŠã³ããŒæŒäžããŒã¢ãããšã©ãŒã³ã³ããã¹ãã¡ãã¥ãŒ
ã€ãã³ãã§åäœããjQueryã³ãŒããååŸãã$é¢æ°ãåäœã«çœ®ãæããããã€ãã³ãã³ã³ãããŒã©ãŒãåŒã³åºããããã®ã§ããã°äœã§ãå®è¡ã§ãããã¹ãŠãåäœããŸãã
jQueryïŒ
$('body').click(function () {}).one('mousemove', function () {}).trigger('click');
ãã©ã°ã€ã³ïŒ
behavior('body').click(function () {}).one('mousemove', function () {}).trigger('click');
åæã«ããã®æ¹æ³ã§äœæããããã¹ãŠã®æ©èœã¯äœ¿çšããã³ã³ãããŒã©ãŒã«å²ãåœãŠãããã³ã³ãããŒã©ãŒã®ä»ã®ãã¹ãŠã®æ©èœã䜿çšããŠããããæäœã§ããŸãã
ã€ãã³ããã³ãã©ãŒã®è¿œå -behavior.onïŒïŒããã³behavior.oneïŒïŒé¢æ°
jQueryé¢æ°ãšåæ§ã«ãonã¯ã€ãã³ããã³ãã©ãŒãè¿œå ãã1åã ãå®è¡ãããã€ãã³ããã³ãã©ãŒãè¿œå ããŸãã
æ§æã¯æ¬¡ã®ãšããã§ãã
behavior.on({
ããã€ãã®äŸã
behavior.on({ target: window, types: 'resize', handler: handlerFn });
behavior.on({ target: window, types: 'resize', handler: handlerFn, throttle: { wait: 200, leading: false } });
behavior.on({ target: 'body', types: 'click', selector: '.btn', handler: handlerFn, after: 2 });
afterããã³throttleãã©ã¡ãŒã¿ãŒã§ããã«ãã¬ã³ãŒãã䜿çšããå Žåããããã®é¢æ°ã¯ãã©ã°ã€ã³ã«çµã¿èŸŒãŸããŠãããããã¢ã³ããŒã¹ã³ã¢ãŸãã¯lodashã©ã€ãã©ãªãŒã¯äžèŠã§ãã
ã€ãã³ãã®ç¡å¹å-behavior.offïŒïŒé¢æ°
1åã®åŒã³åºãã§ã³ã³ãããŒã©ãŒã«ãã£ãŠäœæããããã¹ãŠã®ã€ãã³ããã³ãã©ãŒãç¡å¹ã«ã§ããŸãã
behavior.off();
ç¹å®ã®èŠçŽ ãŸãã¯èŠçŽ ã®ã°ã«ãŒãã®ãã¹ãŠã®ã€ãã³ããã³ãã©ãŒãç¡å¹ã«ã§ããŸãã
behavior.off({ target: window });
behavior.off({ target: $btns });
behavior.off({ target: 'body .btn' });
ç¹å®ã®ã¿ã€ããšåå空éã®ãã¹ãŠã®ã€ãã³ããã³ãã©ãŒãç¡å¹ã«ã§ããŸãã
behavior.off({ types: 'click' });
behavior.off({ types: 'click.namespace' });
behavior.off({ types: '.namespace1, .namespace2' });
behavior.off({ types: 'click.namespace1, .namespace2' });
å§ä»»ãããã€ãã³ããåé€ã§ããŸãã
behavior.off({ target: 'body', types: 'click', selector: '.btn' });
behavior.off({ target: 'body', types: '.namespace', selector: '**' });
ãŸãããã¹ãŠã®ãã³ãã©ãŒãåç
§ã«ãã£ãŠåé€ããŸãã
behavior.off({ handler: handlerFunction });
ãããŠãã¡ãããããããã¹ãŠãçµã¿åãããããšãã§ããŸãã
behavior.off({ target: 'body', types: '.namespace', handler: handlerFunction1 });
behavior.off({ target: 'body', handler: handlerFunction1 });
ãã³ãã©ãŒã®äžæãšåé-behavior.pauseïŒïŒããã³behavior.resumeïŒïŒé¢æ°
åŒæ°ã¯behavior.offïŒïŒé¢æ°ãšåãã§ãã
1åã®åŒã³åºãã§ã³ã³ãããŒã©ãŒã«ãã£ãŠäœæããããã¹ãŠã®ã€ãã³ããã³ãã©ãŒãäžæåæ¢ããŸãã
behavior.pause();
ãããŠãããããä»äºã«æ»ãïŒ
behavior.resume();
ãããŠããã¹ãŠã®äŸã¯behavior.offïŒïŒã«äŒŒãŠããŸãã
behavior.pause({ target: window });
behavior.pause({ types: 'click.namespace1, .namespace2' });
behavior.pause({ target: 'body', types: 'click', selector: '.btn' });
behavior.pause({ target: 'body', types: '.namespace', handler: handlerFunction1 });
ã³ã³ãããŒã©ãŒã®äžæåæ¢ãšåé-behavior.startïŒïŒããã³behavior.stopïŒïŒé¢æ°
ãããã®é¢æ°ã¯behavior.pauseïŒïŒããã³behavior.resumeïŒïŒã«äŒŒãŠããŸãããããã€ãã®éãããããŸãã
ç¹å®ã®ã€ãã³ããã³ãã©ãŒã®ã¬ãã«ã§ã¯ãªããã³ã³ãããŒã©ãŒã¬ãã«ã§åäœããŸããã€ãŸããã€ãã³ããã³ãã©ãŒã§ã¯ãªãã³ã³ãããŒã©ãŒèªäœãåæ¢ããŸãã ã³ã³ãããŒã©ãŒå
šäœãåæ¢ãããããbehavior.stopïŒïŒã®å®è¡åŸã«è¿œå ãããã€ãã³ããã³ãã©ãŒã¯ãbehavior.startïŒïŒé¢æ°ã§ã³ã³ãããŒã©ãŒãåéãããŸã§æ©èœããŸããã
ã³ã³ãããŒã©ãŒãäœæãããšãbehavior.startïŒïŒãåŒã³åºãããç Žæ£ããããšbehavior.stopïŒïŒãåŒã³åºãããŸãã
ã³ã³ãããŒã©ãŒã€ãã³ã
ã³ã³ãããŒã©ãŒãäœæãããšãã«ãonStartãonStopãããã³onFireãã©ã¡ãŒã¿ãŒãæå®ã§ããŸãã
var behavior = $.Behavior({ onStart: function (data) {}, onStop: function (data) {}, onFire: function (event) {} });
onFireé¢æ°ã¯ãã³ã³ãããŒã©ãŒã®ã€ãã³ããã³ãã©ãŒãèµ·åãããã³ã«åŒã³åºãããŸãã åŒæ°ãšã³ã³ããã¹ãã¯ãã€ãã³ããã³ãã©ãŒãšåãã«ãªããŸãã
onStarté¢æ°ã¯ãbehaviour.startïŒïŒãåŒã³åºããããšãã«å®è¡ãããŸãã æåã®åŒæ°ãåãå ŽåããããŸãã
è«ççãªonStopé¢æ°ã¯ãbehaviour.stopïŒïŒãåŒã³åºããããšãã«å®è¡ãããæåã®åŒæ°ãåãããšãã§ããŸãã
ã€ãã³ãã³ã³ãããŒã©ãŒãæåã«ãªãã«ãªããonStopãåŒã³åºããããbehaviour.startïŒïŒãåŒã³åºããŸã§ã€ãã³ããå®è¡ãããªãããã«ããã«ã¯ãã³ã³ãããŒã©ãŒã®äœææã«ã¢ã¯ãã£ããã©ã°ã«falseå€ãæå®ããå¿
èŠããããŸãã
var behavior = $.Behavior({ active: false });
ã³ã³ãããŒã©ãŒã®ç Žå£-behavior.destroyïŒïŒ
ã³ã³ãããŒã©ãäžèŠã«ãªã£ãå Žåãã€ãã³ãããªãã«ããŠããã¹ãŠã®ã¡ã¢ãªãã¯ãªã¢ããå¿
èŠããããŸãããã®æ©èœã䜿çšãã䟡å€ããããŸãã
è€æ°ã®ã³ã³ãããŒã©ãŒã䜿çšãã
ãããžã§ã¯ãå
šäœã§1ã€ã®ã³ã³ãããŒã©ãŒã䜿çšããããšããã€ãã³ããç°ãªãã³ã³ãããŒã©ãŒã«å¹æçã«åå²ããããšãã§ããŸãã
è¯ãäŸã¯ããã©ã°ã€ã³ã䜿çšããDrag'n'Dropã®å®è£
ã§ãã
1ã€ã®ã³ã³ãããŒã©ãŒã¯ãã¹ãªãŒããç¶æ
ã€ãã³ãã§ããããã1ã€ã¯ãã©ãã°ã¢ã³ãããããã€ãã³ãã§ãããåçŽã«åãæ¿ããŸãã

JSFiddleãã¢ïŒ
http ://jsfiddle.net/fm22ptxv/
倧ããªèµ€ããã¯ã»ã«ãããŠã¹ã§ãã©ãã°ãããŸãã
ãããã°ããŒã«
ãã©ã°ã€ã³ã«ã¯ããã³ãã©ãŒã«äœãèµ·ããããç解ããã®ã«åœ¹ç«ã€ãããã°ããŒã«ãçµã¿èŸŒãŸããŠããŸãã ã©ãããŸã ã¢ã¯ãã£ãã§ãã©ããåŒã³åºãããŠãããã©ããéã¢ã¯ãã£ãã§ãããã€ããŸã çããŠããŸããã
ã³ã³ãããŒã©ãŒæ
å ±ã®ååŸ-behavior.dataïŒïŒ
ã³ã³ãããŒã©ãŒã«é¢ãããã¹ãŠã®å¿
èŠãªæ
å ±ïŒçŸåšã®ç¶æ
ãã€ãã³ããã³ãã©ãŒã®ãªã¹ãïŒãè¿ããŸãã
{ log: false, namespace: "bhvr", onFire: null, onStart: null, onStop: null, records: Array }
ã¬ã³ãŒãé
åã®ãªããžã§ã¯ããã©ã®ãããªãã®ããç解ããããšãéèŠã§ãã
ã¯ã©ã¹.btn1ãš.btn2ã®2ã€ã®ãã¿ã³ãããããããã«2ã€ã®åäžã®ã€ãã³ããã³ãã©ãŒãå²ãåœãŠããšããŸãã
behavior('.btn1, .btn2').on('mousedown mouseup', handler);
å®éã次ã®ããã«èšè¿°ããããã«ã4ã€ã®ãäœã¬ãã«ãã€ãã³ããã³ãã©ãŒãè¿œå ãããŸãã
behavior('.btn1').on('mousedown', handler); behavior('.btn1').on('mouseup', handler); behavior('.btn2').on('mousedown', handler); behavior('.btn2').on('mouseup', handler);
ãããã£ãŠãrecordsãã£ãŒã«ãã«ã¯ã宣èšãããã©ãŒã ã®ãã³ãã©ãŒã«é¢ããæ
å ±ãå«ãŸããŸãã
ãã®äŸã§ã¯ãããã¯æ¬¡ã®ãšããã§ãã
{ targets: JQuery[],
ãããŠãã¬ã³ãŒãããã®ãã€ã³ãã£ã³ã°ã«ã¯ãã§ã«4ã€ã®é¡äŒŒãããªããžã§ã¯ãããããŸãã
{ target: JQuery[],
ã¬ã³ãŒãå
ã®ãªããžã§ã¯ãã®åŒã³åºãã®æ°ã¯ããã¹ãŠã®ãã€ã³ãã£ã³ã°ã®åŒã³åºãã®æ°ã®åèšã«åžžã«çãããªããŸãã
ãŸãããã€ã³ãã£ã³ã°ã§ã¯ãããã¯ç°ãªããå¥ã
ã«èæ
®ãããŸããããã¯ãã©ã®ç¹å®ã®ã€ãã³ããã³ãã©ãåŒã³åºãããã©ã®èŠçŽ ã§èµ·åããããã調ã¹ãå¿
èŠãããå Žåã«äŸ¿å©ã§ãã
ã€ãã³ããã³ãã©ãŒã®ãªã¹ã-behavior.filterïŒïŒé¢æ°
ãã¹ãŠã®ãäœã¬ãã«ããã³ãã©ãŒãæ€çŽ¢ãããããã®ãªã¹ããè¿ããŸãã
ãã®é¢æ°ã®æ§æã¯ãbehavior.offïŒïŒãbehavior.pauseïŒïŒãbehavior.resumeïŒïŒãšåãã§ãã
ãã³ãã©ãŒã®å®å
šãªãªã¹ããååŸããŸãã
behavior.filter();
ãªããžã§ã¯ãã®ã€ãã³ããã³ãã©ãŒã®ååŸïŒ
behavior.filter({ target: window });
ãªã©ãªã©ã
behavior.filter({ types: 'click.namespace1, .namespace2' });
behavior.filter({ target: 'body', types: 'click', selector: '.btn' });
behavior.filter({ target: 'body', types: '.namespace', handler: handlerFunction1 });
ã€ãã³ããã°
å®è¡äžã®ã€ãã³ãã远跡ããŠãããšäŸ¿å©ãªå ŽåããããŸãã
ã³ã³ãããŒã©ãŒã«ã¯çµã¿èŸŒã¿ã®ãã°ã¡ã«ããºã ããããã€ãã³ããã³ãã©ãŒã®åå®è¡ãããã³ã³ã³ãããŒã©ãŒèªäœã®åæ¢ãšç¶ç¶ã«é¢ããæ
å ±ïŒbehaviour.stopïŒïŒããã³behavior.startïŒïŒé¢æ°ïŒã衚瀺ããŸãã
ã€ãã³ãã³ã³ãããŒã©ãŒãã³ã³ãœãŒã«ã«çºçãããã¹ãŠã®æ
å ±ãåºåããã«ã¯ãã³ã³ãããŒã©ãŒã®äœææã«å€trueã§ãã°ãã©ã°ãæå®ããã ãã§ååã§ãã
var behavior = $.Behavior({ log: true });
ã³ã³ãããŒã©ã®äœæåŸã«ãã°ãæå¹ã«ããããšãã§ããŸãã
behavior.logOn();
次ã®ããã«ãã°ããªãã«ã§ããŸãã
behavior.logOff();
ç¬èªã®ãã°ãã³ãã©ãå²ãåœãŠãããšãã§ããŸããã³ã³ãœãŒã«ã«ã¡ãã»ãŒãžã衚瀺ãã代ããã«ãå¿
èŠãªåŠçãå®è¡ã§ããŸãã
ãããè¡ãã«ã¯ãã³ã³ãããŒã©ãŒãäœæãããšãã«ãlogFné¢æ°ãæå®ããå¿
èŠããããŸãã
var behavior = $.Behavior({ logFn: function (type, behavior, event, data) {} });
typeåŒæ°ã«ã¯ããã°ã®ã¿ã€ãïŒéå§ãåæ¢ãèµ·åïŒãå«ãŸããŸãã åäœåŒæ°ã«ã¯ãã³ã³ãããŒã©ãŒèªäœãžã®åç
§ãå«ãŸããŠããŸãã 次ã«ãã€ãã³ããã³ãã©ãŒã«æž¡ãããåŒæ°ããããŸãããããã¯ã€ãã³ããšããŒã¿ã§ãã ããŒã¿åŒæ°ãæ¬ èœããŠããå¯èœæ§ããããŸãã
ãã¹ãäž
ãã©ã°ã€ã³ããã¹ãããããã«ã
ãã€ãã£ãã®jQueryã€ãã³ããã¹ããå®æœããŸããã
åæã«ãåé€ãããŠããªããã¹ãã§ããã€ãã®ã€ãã³ããã³ãã©ãèŠã€ãããŸãããããã¹ãã§ãããç£èŠããããšããŸãã ãããä¿®æ£ããç§ã®ã³ããã
ã¯jQueryã§
åãå
¥ããããŸãã ã
ãã¹ãã¯ãæ©èœãããã³ãã€ãã£ããã¹ãã®åœ±é¿ãåããªãç¶æ³ã«ã€ããŠãäœæãããŸããã
ãããã«
ãã©ã°ã€ã³ã®æåã®ããŒãžã§ã³ã¯ãçŽ1幎ååã«äœæãããŸããã ãã以æ¥ããã©ã°ã€ã³ã¯çŸåšã®åœ¢ã«ãªããŸã§äœåºŠãæžãçŽãããä¿®æ£ãããŠããŸãã
ãã®éãã£ãšãç§ã¯éçºã«ç©æ¥µçã«äœ¿çšããŠããŸããããå®éã«ã¯éåžžã«äŸ¿å©ã§ãã
ã³ã¡ã³ããã³ã¡ã³ããææ¡ããåŸ
ã¡ããŠãããŸãã
githubãžã®ãªã³ã¯ïŒ
https :
//github.com/grimalschi/jquery-behaviorã©ããããããšãïŒ