๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ชฉ๋ก์ด ์—†์Šต๋‹ˆ๋‹ค.

[Javascript] ๋ชจ๋“  ๋งˆ์šฐ์Šค ํด๋ฆญ ์ด๋ฒคํŠธ ๋ง‰๋Š”๋ฐฉ๋ฒ•

๐Ÿ—ฃ Language/JavaScript

     

    ํด๋ฆญ ์ด๋ฒคํŠธ ์ „์ฒด block

    ํ˜น์‹œ๋‚˜ ๋˜ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ์‚ฌ๋žŒ์ด ์ฐพ์•„๋ณผ๊นŒ๋ด ์ •๋ฆฌํ•ด๋ด…๋‹ˆ๋‹ค. ์ด๊ฑธ ๋งŽ์ด ์“ฐ์ง€๋Š” ์•Š๊ฒ ์ง€๋งŒ ํ˜น์‹œ๋‚˜! ์“ฐ์‹ค๋ถ„์€ ์“ฐ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

     


     

    ๋ชจ๋“  ํด๋ฆญ ์ด๋ฒคํŠธ๋ฅผ ๋ง‰์•„์ค„ ์ด๋ฒคํŠธ ์„ค์ • (mouse click event blocking)
    var stopFunc = function(e) { e.preventDefault(); e.stopPropagation(); return false; };
    var all = document.querySelectorAll('*');
    for (var idx in all) {
    	var el = all[idx];
    	if (el.addEventListener) {
    		el.addEventListener('click', stopFunc, true); // have to true
    	}
    }

     

    ๋ชจ๋“  ์—˜๋ฆฌ๋จผํŠธ์— click์ด๋ฒคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ addEventListener ํ•จ์ˆ˜์˜ ๋งจ ๋’ค์— true๋ฅผ ์ „๋‹ฌํ•˜๋Š”๋ฐ ๋ฌด์กฐ๊ฑด true๋ฅผ ์ „๋‹ฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ € true๊ฐ’์œผ๋กœ ์ธํ•ด click ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ˜„์žฌ ์ถ”๊ฐ€ํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์ œ์ผ ๋จผ์ € ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ œ์ผ ์•ž์—์„œ ๋ฐ›์€ ์ด๋ฒคํŠธ๋ฅผ ๋ง‰์•„๋ฒ„๋ฆฌ๋ฉด ๋ชจ๋“  ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ๋ง‰ํžˆ๋Š”์…ˆ์ด์ฃ .

    โ€ป ํ•˜์ง€๋งŒ hoverํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด์„œ ์–ด๋–ค DOM(Document Object Model)์ด ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ฒฝ์šฐ์—๋Š” ๋‹ค์‹œ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๊ฑฐ๋‚˜ ํ•˜์ง€ ์•Š์œผ๋ฉด ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ๋ง‰ํžˆ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

     

     

    ๋ชจ๋“  ํด๋ฆญ ์ด๋ฒคํŠธ๋ฅผ ๋ง‰๋Š” ์ด๋ฒคํŠธ ํ•ด์ œ(์ œ๊ฑฐ)
    var all = document.querySelectorAll('*');
    for (var idx in all) {
    	var el = all[idx];
    	if (el.removeEventListener) {
    		el.removeEventListener('click', stopFunc, true); // stopFunc์ด ๋™์ผํ•˜๊ฒŒ ๊ตฌํ˜„๋˜์–ด์žˆ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์—
    	}
    }

     

    ๋ง‰ํžŒ click ์ด๋ฒคํŠธ๋ฅผ ๋‹ค์‹œ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ๋ง‰๋Š” ์ด๋ฒคํŠธ๋ฅผ ์ œ๊ฑฐํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด์— ๋ฐ”์ธ๋”ฉ๋˜์–ด์žˆ๋Š” ์ด๋ฒคํŠธ๋“ค์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ ๋ง์ด์ฃ .