Panzoom: Panzoom์€ ์ตœ์‹  Chrome์—์„œ ํ•˜์œ„ ํ•ญ๋ชฉ์˜ ๋งˆ์šฐ์Šค ๋‹ค์šด ์ด๋ฒคํŠธ๋ฅผ ์ˆจ๊น๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2016๋…„ 12์›” 07์ผ  ยท  12์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: timmywil/panzoom

๋“œ๋ž˜๊ทธ ๊ฐ€๋Šฅํ•œ ๋…ธ๋“œ๋กœ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ํŒฌ/์คŒํ•˜๊ธฐ ์œ„ํ•ด jquery.draggable๊ณผ ํ•จ๊ป˜ ์ด ๋ฉ‹์ง„ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ์ตœ์‹  Chrome ์—…๋ฐ์ดํŠธ ํ›„์— ๋…ธ๋“œ๋ฅผ ๋Œ ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์•ฝ๊ฐ„์˜ ์กฐ์‚ฌ์— ๋”ฐ๋ฅด๋ฉด Chrome์€ ํฌ์ธํ„ฐ ๋‹ค์šด ์ด๋ฒคํŠธ๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์ด์ œ panzoom ํ”Œ๋Ÿฌ๊ทธ์ธ์€ mousedown ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์ „์— ์ž์‹ ๋…ธ๋“œ์˜ pointerdown ์ด๋ฒคํŠธ์— ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.
Panzoom์€ pointerdown ์ด๋ฒคํŠธ๋ฅผ ์–ต์ œํ•˜๊ณ  ์–ด๋–ค ์ด์œ ๋กœ ๊ทธ ์ดํ›„์— mousedown ์ด๋ฒคํŠธ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋“œ๋ž˜๊ทธ๊ฐ€ ์‹œ์ž‘๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

jquery.panzoom.js v3.2.2
jQuery 3.1.0 ๋˜๋Š” v1.11.3
jqueryui 1.12.0 ๋˜๋Š” 1.10.3
ํฌ๋กฌ 55.0.2883.75(64๋น„ํŠธ) ์šฐ๋ถ„ํˆฌ 16.04

์—ฌ๊ธฐ ๋ฐ๋ชจ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค
http://codepen.io/yurigor/pen/yVjeGB

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด 'ignoreChildrensEvents' ์˜ต์…˜์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์œผ๋กœ pull ์š”์ฒญ์„ ํ•ด์•ผ ํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋„์™€ ์ค„ ์ˆ˜์žˆ์–ด์„œ ๊ธฐ๋ป!
ํ•„์š”ํ•˜์‹  ๋ถ„๋“ค์„ ์œ„ํ•ด ๋‹ค์Œ ๋งํฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
https://github.com/YuriGor/jquery.panzoom/tree/ignoreChildrensEvents/dist

@timmywil , ๋‚ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณ‘ํ•ฉํ•˜๋ ค๋ฉด grunt๋ฅผ ๋„์™€์ฃผ์„ธ์š”.
๋‚˜๋Š” livereload๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค
grunt watch:dev
ํ•˜์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
http://localhost :35711/์—์„œ
{"tinylr":"Welcome","version":"0.2.1"}
๊ทธ๋ฆฌ๊ณ  ์—
http://localhost :35711/test/index.html
๋˜๋Š”
http://localhost :35711/demo/index.html
๋‚˜๋Š” ๊ฐ€์ง€๊ณ ์žˆ๋‹ค
{"error":"not_found","reason":"no such route"}

๋ชจ๋“  12 ๋Œ“๊ธ€

ํฌ๋กฌ v55 ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋“œ๋ž˜๊ทธ ๊ฐ€๋Šฅํ•œ ์ฐฝ์ด ์žˆ๋Š”๋ฐ ์–ด๋ฆฐ์ด๋ฅผ ์œ„ํ•œ ๋งˆ์šฐ์Šค๋‹ค์šด ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฌด์—‡์„ ํ•˜์…จ์Šต๋‹ˆ๊นŒ? ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋Š” ์ง€์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ง€๊ธˆ์€ ๋ง‰ํ˜€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์˜ ์ง€์ ์„ ์ฐพ์•˜๊ณ  ๊ทธ๊ฒƒ์€ ๋‚ด ๋ฌธ์ œ๋ฅผ ์•„์ฃผ ํ›Œ๋ฅญํ•˜๊ฒŒ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. YuriGor ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ์ด๊ฒƒ์€ ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค

๋„์™€ ์ค„ ์ˆ˜์žˆ์–ด์„œ ๊ธฐ๋ป!
ํ•„์š”ํ•˜์‹  ๋ถ„๋“ค์„ ์œ„ํ•ด ๋‹ค์Œ ๋งํฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
https://github.com/YuriGor/jquery.panzoom/tree/ignoreChildrensEvents/dist

@timmywil , ๋‚ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณ‘ํ•ฉํ•˜๋ ค๋ฉด grunt๋ฅผ ๋„์™€์ฃผ์„ธ์š”.
๋‚˜๋Š” livereload๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค
grunt watch:dev
ํ•˜์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
http://localhost :35711/์—์„œ
{"tinylr":"Welcome","version":"0.2.1"}
๊ทธ๋ฆฌ๊ณ  ์—
http://localhost :35711/test/index.html
๋˜๋Š”
http://localhost :35711/demo/index.html
๋‚˜๋Š” ๊ฐ€์ง€๊ณ ์žˆ๋‹ค
{"error":"not_found","reason":"no such route"}

์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ์ˆ˜์ •์œผ๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๋‚ด ๊ฒฝ์šฐ์— ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. (๋‚˜๋Š” ์ค‘์ฒฉ๋œ ์ž์‹์ด ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ๋Š”๋ฐ ๊ทธ ์ค‘ ์ผ๋ถ€๋Š” ๋ฌด์‹œํ•ด์•ผ ํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ฌด์‹œํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.)

@timmywil ์ด ์˜ต์…˜์œผ๋กœ ์ƒˆ ๋ฒ„์ „์„ ์ถœ์‹œํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

ํŽธ์ง‘ : ์‹ค์ œ๋กœ romi45์™€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜ž

ํŽธ์ง‘ 2: ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฌด์‹œํ•  ์š”์†Œ๋ฅผ ๋‚˜์—ดํ•˜๋Š” ์˜ต์…˜์ด ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

ignoreChildEventsFrom: [".things-to-ignore1", ".things-to-ignore2"]

ํŽธ์ง‘ 3: FAQ "๋งํฌ๊ฐ€ Panzoom ์š”์†Œ ๋‚ด์— ์žˆ๋Š” ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๊นŒ?"์—์„œ ์†”๋ฃจ์…˜์„ ์ฐพ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ํ•˜๋Š” ์ผ์€ 969ํ–‰์—์„œ preventDefault๋ฅผ ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. preventDefault๋Š” ์ด๋ฒคํŠธ๊ฐ€ ์ž์‹์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.

@akhnaz ,

๋‚ด ์ดํ•ด์—์„œ preventDefault ๋Š” ์š”์†Œ(์ž์‹ ๋˜๋Š” panzoom ์š”์†Œ ์ž์ฒด)์™€ ๊ด€๋ จ๋œ ๊ธฐ๋ณธ ์ž‘์—…์„ ๋ฐฉ์ง€ํ•˜๊ณ  stopPropagation ๋Š” ์ด๋ฒคํŠธ๊ฐ€ ์ƒ์œ„ ์š”์†Œ๋กœ ๋ฒ„๋ธ”๋ง๋˜๋Š” ๊ฒƒ์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.

FAQ์—๋Š” ๊ฐ„๋‹จํ•˜๊ณ  ์šฐ์•„ํ•œ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.


  1. ๋งํฌ๊ฐ€ Panzoom ์š”์†Œ ๋‚ด์— ์žˆ๋Š” ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? ์˜ˆ์‹œ
  • Panzoom ์š”์†Œ ๋‚ด์—์„œ Panzoom ์š”์†Œ๋ฅผ ํ—ˆ์šฉํ•˜๊ธฐ ์œ„ํ•ด mousedown ๋ฐ touchstart ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์ด๋ฒคํŠธ ์ „ํŒŒ๊ฐ€ ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค. ๋งํฌ๋ฅผ ์ˆ˜์ •ํ•˜๋ ค๋ฉด ์ด๋ฒคํŠธ๊ฐ€ Panzoom ํ•ธ๋“ค๋Ÿฌ์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•˜๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋ฐ”์ธ๋”ฉํ•ฉ๋‹ˆ๋‹ค.
$('.panzoom a').on('mousedown touchstart', function( e ) {
  e.stopImmediatePropagation();
});

์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž์ฒด๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @glen-84

์˜ˆ, preventDefault๋Š” ๊ธฐ๋ณธ ์ž‘์—…์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ pointerDown์ด ์ „๋‹ฌ๋˜๊ณ  ์ˆ˜์‹ ๋  ๋•Œ ์ž์‹์˜ mouseDown๋„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

ํฌ๋กฌ 55์—์„œ๋Š” ์ด์ œ pointerDown์ด ๋””์ŠคํŒจ์น˜๋˜๊ณ  microsoft edge๋Š” ์ด๋ฏธ ์ฒ˜์Œ๋ถ€ํ„ฐ pointerDown์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ œ ๊ฒฝ์šฐ panzoom์€ pointerDown์„ ๋“ฃ๊ณ  ์•„์ด๋“ค์€ mouseDown์„ ๋“ฃ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ๋‚ด jsbin์ด ์žˆ์Šต๋‹ˆ๋‹ค.

https://jsbin.com/yozotuxina/edit?js

@akhnaz ,

์•„์ด์—๊ฒŒ pointerdown ๋ฅผ ๋“ฃ๊ณ  ์ฆ‰๊ฐ์ ์ธ ์ „ํŒŒ๋ฅผ ๋ฉˆ์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ...

https://jsbin.com/sicapuledo/edit?html,js ,์ฝ˜์†”,์ถœ๋ ฅ

์•ˆ๋…•ํ•˜์„ธ์š”,

๋‚˜๋Š” ๋‹น์‹ ์˜ ๊ธฐ๋Šฅ์„ ์•ฝ๊ฐ„ ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ํด๋ž˜์Šค ๋ฐฐ์—ด์— ๋Œ€ํ•œ ์˜ต์…˜์„ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ชฉํ‘œ๋Š” ์ž์‹์—๊ฒŒ ๋‚˜์—ด๋œ ํด๋ž˜์Šค ์ค‘ ํ•˜๋‚˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ด๋ฒคํŠธ๋ฅผ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๊ฐ’์„ true๋กœ ์„ค์ •ํ•˜๋ฉด ๊ตฌํ˜„ํ•œ ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ œ๋Œ€๋กœ ํฌํฌํ•˜๊ณ  ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ํ•  ์‹œ๊ฐ„์ด ์—†์Šต๋‹ˆ๋‹ค. ์ž‘์€ ๊ฐœ์„  ์‚ฌํ•ญ์„ ํฌํ•จํ•˜๊ณ  ๊ธฐ๋ณธ ์ €์žฅ์†Œ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ์š”์ฒญํ•˜์‹ญ์‹œ์˜ค.

๋‹ค์Œ์€ ํฌํฌ ๋ผ์ธ 959์—์„œ ์—…๋ฐ์ดํŠธ๋œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

if (!options.disablePan || !options.disableZoom) {
    events[ str_start ] = function(e) {
        if(options.ignoreChildrensEvents) {
            if($.isArray(options.ignoreChildrensEvents)) {
                if(options.ignoreChildrensEvents.find(function(c){return $(e.target).hasClass(c);})) {
                    return;
                }
            }
            else if(e.target !== this){
                return;
            }
        }

        var touches;
                /* rest of code */

ignoreChildrensEvents ์˜ต์…˜์€ true, false ๋˜๋Š” ['child-class1', 'child-class2']๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์•ˆ ์ธ์‚ฌ

ignoreChildrensEvents๊ฐ€ ํฌํ•จ๋œ ์ตœ์‹  ๋ฒ„์ „์„ ์ถœ์‹œํ•˜์‹ญ์‹œ์˜ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰