iOS๊ฐ 13 ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธ๋ ํ ๊ธธ๊ฒ ๋๋ฅด๊ธฐ๊ฐ ์๋ํ์ง ์๊ณ ์ปจํ ์คํธ ๋ฉ๋ด ์ด๋ฒคํธ๊ฐ ํธ๋ฆฌ๊ฑฐ๋์ง ์์ต๋๋ค.
๋ ๋ฒ ํญํ์ฌ doubleClickZoom์ ์คํํ๋ ๊ฒ์ iOS 13์์๋ ์๋ํ์ง ์์ต๋๋ค. ์ปจํ ์คํธ ๋ฉ๋ด์ ๋ํ ์์ ์ ํด๊ฒฐํ๋ ๊ฒ์ด ํจ์ฌ ๋ ์ค์ํฉ๋๋ค.
๋์ผํ ๋ฌธ์ ๋ฅผ ํ์ธํฉ๋๋ค. ์ด๊ธฐ ๊ฒ์ฌ ํ iOS 13 Safari๊ฐ ํฐ์น ์ด๋ฒคํธ๋ฅผ ์ ๋๋ก ์คํํ์ง ์๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.
iOS Safari์ ๊ธด ํญ์ ์ด๋ค ์ด๋ฒคํธ๋ Leaflet ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ณด๋ด์ง ์์ผ๋ฉฐ iOS ์์ฒด์์ ์ฒ๋ฆฌ๋ฉ๋๋ค.
๋ ๋ฒ ํด๋ฆญํ๋ฉด mouseover, mousemove, mousedown, mouseup, click ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ฌ ์ ๋จ์ง์ ์ด๋ฒคํธ ํด๋ฆญ์ด ๋ฐ์ํฉ๋๋ค.
๋ชจ๋ฐ์ผ ์ฌํ๋ฆฌ iOS 13์ ์ฌ๊ฐํ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ๊ณ ๋ชจ๋ฐ์ผ ์ฌํ๋ฆฌ๋ฅผ ๋ฐ์คํฌํ ์ฌํ๋ฆฌ์ ๋งค์ฐ ์ ์ฌํ๊ฒ ๋ง๋๋ ๊ฒ๊ณผ ๊ด๋ จ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ํฐ์น ์ด๋ฒคํธ๊ฐ Leaflet์ ์ ๋๋ก ์ ์ก๋์ง ์์ผ๋ฉด ์์ ํด์ผ ํ ์ฌํญ์ด ๋ง์ง ์์ต๋๋ค.
Apple์ ์ด๊ฒ์ ๋ณด๊ณ ํ ์ฌ๋์ด ์์ต๋๊น?
์ง๋ ์ฃผ์ Apple ์ง์์ ๋ณด๊ณ ์๋ฅผ ๋ณด๋ ๋๋ค. ์์ง ๋ต์ด ์์ต๋๋ค.
์ ๋ณด๊ฐ ์กฐ๊ธ ๋ ์์ต๋๋ค. ์ง๋ div์ ํด๋ฆญ ํธ๋ค๋ฌ๋ฅผ ์ถ๊ฐํ๊ณ ํ๋/์ถ์ ์ ์ด๊ฐ ํ์ฑํ๋ ๊ฒฝ์ฐ ๊ธธ๊ฒ ๋๋ฅด๊ธฐ ์์์ด ์ปจํ
์คํธ ๋ฉ๋ด ๋ณต์ฌ/๋ถ์ฌ๋ฃ๊ธฐ๋ก ์๋ํฉ๋๋ค.
๊ทธ๋ฐ
<div id="mapid" onclick="javascript:void(0)"/>
-webkit-user-select: none;
-webkit-touch-callout: none;
๋ํ ๋์์ด๋์ง ์์ต๋๋ค. ๋ณต์ฌ/๋ถ์ฌ ๋ฃ๊ธฐ ๋ฉ๋ด ๋ง ๋นํ์ฑํํ์ญ์์ค.
๋๊ตฐ๊ฐ์๊ฒ ์ ์ฉํ ์๋ ์์ต๋๋ค.
๊ธธ๊ฒ ๋๋ฅด๊ธฐ์ ๋ํ ์์ ์๋ฃจ์
:
์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ
https://www.cssscript.com/handle-long-press-tap-event-in-javascript-long-press-js/
๊ทธ๋ฆฌ๊ณ CSS์์
-webkit-user-select: none;
-webkit-touch-callout: none;
๊ธธ๊ฒ ๋๋ฅด๊ธฐ ์ด๋ฒคํธ์ ๋ํ ๋ฆฌ์ค๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๋ณด๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ ์ด๋ฒคํธ ํธ๋ค๋ฌ์์ ์ขํ๋ฅผ ์ ๋จ์ง ์ขํ๋ก ๋ณํํฉ๋๋ค.
๋์๊ด์ด ์๋ํฉ๋๊น? ์ง๊ธ๊น์ง ์์ค ์ฝ๋๋ฅผ ํ์ธํ๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด์จ๋ Safari๋ก ์ ์ก๋์ง ์์ ํฐ์น ์ด๋ฒคํธ๋ฅผ ์์ ํฉ๋๋ค. ๊ทธ๋ฅ ๊ถ๊ธํฉ๋๋ค.
์, ์๋ํฉ๋๋ค. ์ ์ด๋ ๊ธธ๊ฒ ๋๋ฅด์ญ์์ค.
iOS13๊ณผ iPadOS13์์ ํ์ธํ์ต๋๋ค
์ข์ ํ thx
์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ์ต์ข ์๋ฃจ์ ์ ๋๋ค. ๊ธด ํญ์ ๊ฐ์งํ๊ณ 'contextmenu' MenuEvent๋ฅผ ์๋ฎฌ๋ ์ดํธํฉ๋๋ค. JS ์ฝ๋์ ๋ฃ์ผ๋ฉด ๋ฉ๋๋ค.
์ฐธ๊ณ : ๋ฆฌ์ค๋๊ฐ ๋๋ฌด ๋ง์ง ์๋๋ก iOS 13 ์ฌ์ฉ์์ ๋ํด์๋ง ์คํ์ ์ ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
// Copied and modified from https://github.com/john-doherty/long-press-event/
import rs from 'rootScope'
import $ from '$'
if( rs.platform === 'ios' && / OS 13_/.test( navigator.userAgent ) ) {
// This is our main map el
const mapEl = $('#map-container')
// This class adds -webkit-user-select: none; -webkit-touch-callout: none;
// to the BODY el
document.body.classList.add('ios13')
let timer = null;
const fireLongPressEvent = originalEvent => {
clearLongPressTimer();
const el = originalEvent.target
, x = originalEvent.touches[0].clientX
, y = originalEvent.touches[0].clientY
// This will emulate contextmenu mouse event
const event = new MouseEvent('contextmenu', {
bubbles: true,
cancelable: true,
clientX: x,
clientY: y
})
// fire the long-press event
const suppressClickEvent = el.dispatchEvent.call(el,event);
if (suppressClickEvent) {
// temporarily intercept and clear the next click
mapEl.addEventListener('touchend', function clearMouseUp(e) {
mapEl.removeEventListener('touchend', clearMouseUp, true);
cancelEvent(e);
}, true);
}
}
const startLongPressTimer = e => {
clearLongPressTimer(e);
timer = setTimeout( fireLongPressEvent.bind(null,e), 1000 );
}
const clearLongPressTimer = () => {
if(timer) {
clearTimeout(timer);
timer = null;
}
}
const cancelEvent = e => {
e.stopImmediatePropagation();
e.preventDefault();
e.stopPropagation();
}
// hook events that clear a pending long press event
mapEl.addEventListener('touchcancel', clearLongPressTimer, true);
mapEl.addEventListener('touchend', clearLongPressTimer, true);
mapEl.addEventListener('touchmove', clearLongPressTimer, true);
// hook events that can trigger a long press event
mapEl.addEventListener('touchstart', startLongPressTimer, true); // <- start
}
๋น์ทํ ๋ฌธ์ ๋ฅผ ์กฐ์ฌํ๋ ๋์ ์ด ์ค๋ ๋๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค. ๋ด๊ฐ ๋ฐ๊ฒฌ ํธ์ถ preventDefault
์ touchstart
ํ์์ ๊ฐ์ ํฐ์น ์ด๋ฒคํธ๋ฅผ ์์ ํ๊ณ , ๋ฐ๋ผ์ ์ด์ ๊ณผ ๋๋ธ ํญ์ ํ์ธ ํ ์ ์์ต๋๋ค.
๋๋ ์ด๊ฒ์ด ๋ชจ๋ฐ์ผ Safari๊ฐ ํธ๋ฒ ์ด๋ฒคํธ๋ฅผ ์๋ฎฌ๋ ์ด์ ํ๋ ๋ฐฉ์์ ๋ณ๊ฒฝํ๋ค๋ ์ฌ์ค์ ๊ธฐ์ธํ๋ค๊ณ ์๊ฐํฉ๋๋ค(๋ฉ๋ด ๋ฑ์ ์ด๊ธฐ ์ํด ํธ๋ฒ ์ด๋ฒคํธ์๋ง ์์กดํ๋ ์น์ฌ์ดํธ๋ฅผ ๋ง๋ค๊ธฐ ์ํด)
๋น์ทํ ๋ฌธ์ ๋ฅผ ์กฐ์ฌํ๋ ๋์ ์ด ์ค๋ ๋๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค. ๋ด๊ฐ ๋ฐ๊ฒฌ ํธ์ถ
preventDefault
์touchstart
ํ์์ ๊ฐ์ ํฐ์น ์ด๋ฒคํธ๋ฅผ ์์ ํ๊ณ , ๋ฐ๋ผ์ ์ด์ ๊ณผ ๋๋ธ ํญ์ ํ์ธ ํ ์ ์์ต๋๋ค.๋๋ ์ด๊ฒ์ด ๋ชจ๋ฐ์ผ Safari๊ฐ ํธ๋ฒ ์ด๋ฒคํธ๋ฅผ ์๋ฎฌ๋ ์ด์ ํ๋ ๋ฐฉ์์ ๋ณ๊ฒฝํ๋ค๋ ์ฌ์ค์ ๊ธฐ์ธํ๋ค๊ณ ์๊ฐํฉ๋๋ค(๋ฉ๋ด ๋ฑ์ ์ด๊ธฐ ์ํด ํธ๋ฒ ์ด๋ฒคํธ์๋ง ์์กดํ๋ ์น์ฌ์ดํธ๋ฅผ ๋ง๋ค๊ธฐ ์ํด)
์ง๊ธ๊น์ง๋ ์ ์ ๋ฐ๋๋ก ์๋ํฉ๋๋ค. ๊ธด ํญ์ ์ ์ธํ ๋ชจ๋ ํด๋ฆญ์ ์ต์ ํ๋ฉด ๋ฉ๋๋ค. ๋น์ ์๊ฒ ์ ํฉํ ์ฝ๋๋ฅผ ๊ณต์ ํ ์ ์์ต๋๊น?
์ฃ์กํฉ๋๋ค. ์ด์ค ํญ์ ๊ฐ์งํ๊ธฐ ์ํด ์์ ํฐ์น ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๊ณ ๊ฐ์ ํ์ต๋๋ค. ํด๋ฆญ/๋ง์ฐ์ค ์ด๋ฒคํธ์ ์์กดํ๋ ๊ฒฝ์ฐ touchstart์ preventDefault
๊ฐ ์ด๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
์ด๋ ์ชฝ์ด๋ 13.1์์ ์์ ๋ iOS์ ๋ฒ๊ทธ์ธ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.
@felixhageloh ๋ฐฉ๊ธ ์ด ๋ฐ๋ชจ๋ฅผ ์คํํ๋ iOS 13.1์์ ํ
์คํธํ์ต๋๋ค.
http://aratcliffe.github.io/Leaflet.contextmenu/examples/index.html
ํ์ง๋ง ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค! ๋ด๊ฐ ๋์น๊ณ ์๋ ๊ฒ์ด ์์ต๋๊น?
์ฐ๋ฆฌ๋ ๊ธด ์ธ๋ก ํ์ฌ์ ํฌ๊ฒ ์์กดํ๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ์๊ฒ ์ ๋ง ์ค์ํ ๋ฌธ์ ์
๋๋ค. ๋์์ ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
์ด ๋ฌธ์ ๋ WebKit ๋ฒ๊ทธ #202143 ์์ ์ฐธ์กฐ๋์์ต๋๋ค. WebKit ํ(์ด ๊ฒฝ์ฐ์๋ ๋)์ด ์กฐ์ฌ ์ค์ ๋๋ค.
์ด ๋ฌธ์ ๋ WebKit ๋ฒ๊ทธ #202143 ์์ ์ฐธ์กฐ๋์์ต๋๋ค. WebKit ํ(์ด ๊ฒฝ์ฐ์๋ ๋)์ด ์กฐ์ฌ ์ค์ ๋๋ค.
์ด ๋ฌธ์ ์ ๋ํด ๊ด์ฌ์ ๊ฐ๊ฒ ๋์ด ๋งค์ฐ ๊ธฐ์ฉ๋๋ค. ์น ๊ฐ๋ฐ์๋ก์ ์ฐ๋ฆฌ๋ ํฐ์น ์ด๋ฒคํธ์ ๊ฒฝ์ฐ iOS 13.x์ Safari๊ฐ iOS 12.x ๋๋ Android์ Chrome๊ณผ ๋์ผํ ๋ฐฉ์์ผ๋ก ์๋ํ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค.
๋น์ ์ด ์ฌ๊ธฐ์์ด ํ๋ณตํฉ๋๋ค.
@majid701 ํผ๋์ ๋๋ ค ์ฃ์กํฉ๋๋ค. 13.0์์ ๋ด๊ฐ ๋ณธ ๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ ๋ฒ ํญ(๋น ๋ฅด๊ฒ) -> ๋จ์ผ ํฐ์น์คํํธ ๋ฐ ํฐ์น์๋๊ฐ ์คํ๋์์ต๋๋ค.
13.1 ์ดํ๋ก ๋ ๊ฐ์ touchstart ๋ฐ touchend ์ด๋ฒคํธ๋ฅผ ๋ค์ ์ฌ๋ฐ๋ฅด๊ฒ ์์ ํ๊ณ ์์ต๋๋ค. ๋ด๊ฐ ์ ์ง ๊ด๋ฆฌํ๊ณ ์๋ ์ฑ์ ์์ ํฐ์น ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๋ฒ ํญ์ ๊ฐ์งํ๋ฏ๋ก ์ด ๊ณ ์ ๋ ๋ ๋ฒ ํญ ํ๋/์ถ์๊ฐ ์์ต๋๋ค. ๋๋ ์ด๊ฒ์ด ๋น์ ์๊ฒ๋ ํด๋น๋ ๊ฒ์ด๋ผ๊ณ ์๋ชป ์ถ์ธกํ๊ณ ์์์ต๋๋ค.
if( rs.platform === 'ios' && / OS 13_/.test( navigator.userAgent ) )
@ilblog ์ ์ฌ์ฉ์ ์์ด์ ํธ ๋ฌธ์์ด์ด ๋ฐ์คํฌํฑ์ Safari์ ๋์ผํ๊ณ iOS๋ฅผ ๊ด๊ณ ํ์ง ์๋ iPadOS์์๋ ์๋ํ์ง ์์ต๋๋ค.
_(WebKit ๋ฒ๊ทธ์์ ๋ค์ ๊ฒ์ํ์ฌ ์ด ๋ฒ๊ทธ๋ฅผ ์ฐธ์กฐํ ์ฌ๋๋ค๋ง ๋ณผ ์ ์์ต๋๋ค.)_
contextmenu
Leaflet ์ฝ๋๋ pointerdown
๋ฐ touchstart
์ด๋ฒคํธ๋ฅผ ์๋ก ๋ฐ๊ฟ์ ์ฌ์ฉํ๊ณ ์ ์์ ๊ฐ์ฉ์ฑ์ ๋ค๋ฅธ ํ๋๋ฅผ ์ ์ธํ๋ฏ๋ก Leaflet ์ด๋ฒคํธ๊ฐ ํธ๋ฆฌ๊ฑฐ๋์ง ์์ต๋๋ค. Map.Tap.js์์ _onDown
๋ฉ์๋์๋ PointerEvent
์ด๋ฒคํธ๊ฐ TouchEvent
์ ๋์ผํ์ง ์๊ธฐ ๋๋ฌธ์ ํญ์ ์กฐ๊ธฐ ๋ฐํ์ผ๋ก ์ด์ด์ง๋ if (!e.touches) { return; }
์ฒดํฌ๊ฐ ์์ต๋๋ค. TouchEvent
์ด๋ฉฐ touches
์์ฑ์ด ์์ต๋๋ค.
๋ฐ๋ผ์ Leaflet contextmenu
์ด๋ฒคํธ๊ฐ ํธ๋ฆฌ๊ฑฐ๋์ง ์๋ ๊ฒ์ ํนํ Leaflet ๋ฌธ์ ์
๋๋ค.
์ค์ ๋ก ์ด ์ฝ๋๋ ๋ค์ ์ฝ๋ ๋๋ฌธ์ ํฌ์ธํฐ ์ด๋ฒคํธ์ ํจ๊ป ์คํ๋์ง๋ ์์ต๋๋ค.
if (Browser.touch && !Browser.pointer) {
Map.addInitHook('addHandler', 'tap', Tap);
}
iOS 13์์๋ Browser.touch
์ Browser.pointer
๊ฐ ๋ชจ๋ true์ด๋ฏ๋ก ์ ์ฒด ํจํค์ง๊ฐ ์ด๊ธฐํ๋์ง ์์ต๋๋ค.
์ง๋ ์ฃผ์ Apple ์ง์์ ๋ณด๊ณ ์๋ฅผ ๋ณด๋ ๋๋ค. ์์ง ๋ต์ด ์์ต๋๋ค.
@ginger-777 ๋ฒ๊ทธ ๋ฒํธ/ํผ๋๋ฐฑ ID๊ฐ ์์ต๋๊น? ์ผ๋ฐ์ ์ผ๋ก WebKit ๊ฐ๋ฐ์์ ๊ด์ฌ์ ๋ ์ ์๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ bugs.webkit.org์์ ์ง์ ๋ฒ๊ทธ๋ฅผ ์ ๊ณ ํ๋ ๊ฒ์ ๋๋ค.
@graouts ์, ๊ทํ์ ๋ง์ง๋ง ๋๊ธ์ ์ฝ์ ํ์๋ ๊ทธ ์ฌ์ค์ ์์์ต๋๋ค. ํ์ง๋ง Settings -> General -> Experimental Features
์์ ํฌ์ธํฐ ์ด๋ฒคํธ ๋นํ์ฑํ๋ฅผ ํ
์คํธํ์ผ๋ฉฐ ์ด ๋ฐ๋ชจ ์น ์ฌ์ดํธ์์ ์๋ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์์ต๋๋ค.
http://aratcliffe.github.io/Leaflet.contextmenu/examples/index.html
ํ์ง๋ง ๋ด ์ฑ์์๋ ์๋ํ์ง ์์ต๋๋ค. Webview ๋ด๋ถ์ ์ ๋จ์ง๋ฅผ ๋ก๋ํ๊ณ ์์ต๋๋ค.
๋ ๋ฒ ํญํ์ฌ ํ๋/์ถ์ํ๋ ๊ฒฝ์ฐ์๋ ์ด๋ Leaflet์ ๋ฌธ์ ์
๋๋ค. DomEvent.DoubleTap
์์ ์ด ์ฝ๋๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
function onTouchStart(e) {
var count;
if (Browser.pointer) {
if ((!Browser.edge) || e.pointerType === 'mouse') { return; }
count = _pointersCount;
} else {
count = e.touches.length;
}
if (count > 1) { return; }
var now = Date.now(),
delta = now - (last || now);
touch = e.touches ? e.touches[0] : e;
doubleTap = (delta > 0 && delta <= delay);
last = now;
}
๋ธ๋ผ์ฐ์ ๊ฐ ํฌ์ธํฐ ์ด๋ฒคํธ๋ฅผ ์ง์ํ๊ณ Edge๊ฐ ์๋ ๊ฒฝ์ฐ ํจ์๊ฐ ์ผ์ฐ ์ข ๋ฃ๋ฉ๋๋ค. ์ด๊ฒ์ iOS 13์ Safari ๋๋ WebKit ๊ธฐ๋ฐ ๋ธ๋ผ์ฐ์ ์ ๊ฒฝ์ฐ์ ๋๋ค.
๋ด๊ฐ ๋งํ ์ ์๋ ํ, ์ฌ๊ธฐ์ ๋ณด๊ณ ๋ ๋ ๋ฌธ์ ๋ ๋ชจ๋ ํฐ์น ์ด๋ฒคํธ์ ํฌ์ธํฐ ์ด๋ฒคํธ(๊ธธ๊ฒ ๋๋ฅด๊ธฐ ๋ฐ contextmenu
์ด๋ฒคํธ)๋ฅผ ๋ชจ๋ ์ง์ํ๊ฑฐ๋ ํฌ์ธํฐ ์ด๋ฒคํธ๋ฅผ ์ง์ํ์ง๋ง Microsoft Edge๊ฐ ์๋ ๋ธ๋ผ์ฐ์ ์ ๋ํด Leaflet์ด ์ค๋น๋์ง ์์ ๊ฒ์
๋๋ค. (๋ ๋ฒ ํญํ๊ณ dblclick
์ด๋ฒคํธ).
์ด ๋จ๊ณ์์ ์์ ํ ๊ฒ์ด ์๊ธฐ ๋๋ฌธ์ WebKit ๋ฒ๊ทธ๋ฅผ ๋ซ์์ต๋๋ค.
@graouts ์, ๊ทํ์ ๋ง์ง๋ง ๋๊ธ์ ์ฝ์ ํ์๋ ๊ทธ ์ฌ์ค์ ์์์ต๋๋ค. ํ์ง๋ง
Settings -> General -> Experimental Features
์์ ํฌ์ธํฐ ์ด๋ฒคํธ ๋นํ์ฑํ๋ฅผ ํ ์คํธํ์ผ๋ฉฐ ์ด ๋ฐ๋ชจ ์น ์ฌ์ดํธ์์ ์๋ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์์ต๋๋ค.
http://aratcliffe.github.io/Leaflet.contextmenu/examples/index.htmlํ์ง๋ง ๋ด ์ฑ์์๋ ์๋ํ์ง ์์ต๋๋ค. Webview ๋ด๋ถ์ ์ ๋จ์ง๋ฅผ ๋ก๋ํ๊ณ ์์ต๋๋ค.
์ @majid701 , ์ด ์ค์ ์ WKWebView
๋๋ iOS์ WebKit์ ํฌํจํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์๋ Safari์๋ง ์ ์ฉ๋๋ ๊ฒ ๊ฐ์ต๋๋ค. Safari ์ฑ ์ธ๋ถ์์ ํฌ์ธํฐ ์ด๋ฒคํธ๋ฅผ ๋นํ์ฑํํ๋ ๋ฐฉ๋ฒ์ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
ํด๊ฒฐ์ฑ ์ iOS 13 Safari๋ฅผ "pinterType" ๋ธ๋ผ์ฐ์ ๋ก ๊ฐ์งํ์ฌ Touch ์ด๋ฒคํธ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ์ง ์๋ Leaflet ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ ํ๋ ๊ฒ์ ๋๋ค.
์ด ๋ฌธ์ ์ ๋ํ ๊ทํ์ ๋ ธ๋ ฅ๊ณผ ๋ง์ ๋์์ ๋ํด @graouts ์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
https://github.com/Leaflet/Leaflet/pull/6815 ๋ชจ๋ฐ์ผ ์ฅ์น์์ ๋ ๋ฒ ํญํ๊ณ ๋์ผํ ์ฝ๋ ์ค์ ํจ์นํ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ PR์ด ์งํ ์ค์ด๋ฏ๋ก ์ด ๋ฌธ์ ๋ ๋ค๋ฃจ๋๋ก ์์ฒญํ์ต๋๋ค.
if( rs.platform === 'ios' && / OS 13_/.test( navigator.userAgent ) )
@ilblog ์ ์ฌ์ฉ์ ์์ด์ ํธ ๋ฌธ์์ด์ด ๋ฐ์คํฌํฑ์ Safari์ ๋์ผํ๊ณ iOS๋ฅผ ๊ด๊ณ ํ์ง ์๋ iPadOS์์๋ ์๋ํ์ง ์์ต๋๋ค.
๊ฐ๋ฐ์๊ฐ macOS์ iPad๋ฅผ ๊ตฌ๋ณํ ์ ์์ ๋ ๋ค๋ฅธ ์ผ๋ จ์ ๋ฌธ์ ๋ฅผ ์ ๋ฐํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ํฅ๋ฏธ๋กญ์ต๋๋ค. ์ด๊ฒ์ ์ด ์ ๋จ์ง ๋ฒ๊ทธ์ ๊ด๋ จ์ด ์์ง๋ง Apple์์๋ ํด๊ฒฐํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
ํด๊ฒฐ
Apple์ ์์คํ ์๊ฒฌ ๋๋ถ์ ์ ์ด๋ iPhone์์ iOS 13 ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์์ต๋๋ค. iOS13์ iPad์๋ macOS์ ๋์ผํ ์ฌ์ฉ์ ์์ด์ ํธ ๋ฌธ์์ด์ด ์์ผ๋ฏ๋ก iPad์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
src/core/Browser.js
๊ณผ ๊ฐ์ด ์์ ํฉ๋๋ค.
// 'false' for all iOS devices, that (as of version iOS13 support both, touch and pointer events)
// Unfortunately as of iOS13 it is not possible to distinguish iPad from OS X by user agent string
export var pointer = !!(window.PointerEvent || msPointer) && !userAgentContains('iphone');
์์ ์ฌํญ์ด ํฌํจ๋ pull ์์ฒญ์ด ์ฌ๊ธฐ์ ์์ต๋๋ค.
if( rs.platform === 'ios' && / OS 13_/.test( navigator.userAgent ) )
@ilblog ์ ์ฌ์ฉ์ ์์ด์ ํธ ๋ฌธ์์ด์ด ๋ฐ์คํฌํฑ์ Safari์ ๋์ผํ๊ณ iOS๋ฅผ ๊ด๊ณ ํ์ง ์๋ iPadOS์์๋ ์๋ํ์ง ์์ต๋๋ค.
๊ฐ๋ฐ์๊ฐ macOS์ iPad๋ฅผ ๊ตฌ๋ณํ ์ ์์ ๋ ๋ค๋ฅธ ์ผ๋ จ์ ๋ฌธ์ ๋ฅผ ์ ๋ฐํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ํฅ๋ฏธ๋กญ์ต๋๋ค. ์ด๊ฒ์ ์ด ์ ๋จ์ง ๋ฒ๊ทธ์ ๊ด๋ จ์ด ์์ง๋ง Apple์์๋ ํด๊ฒฐํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์ ์์ด์ ํธ ๋ฌธ์์ด์ ๊ธฐ๋ฐ์ผ๋ก ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๊ฒ์ ์ต์ ์ ์ ๊ทผ ๋ฐฉ์์ด ์๋๋๋ค. ์ฌ๋ก๋ณ ๊ธฐ๋ฅ ๊ฐ์ง๋ ๋๋ถ๋ถ์ ์ฌ์ฉ ์ฌ๋ก์ ์ ํฉํฉ๋๋ค. ๋ํ iPadOS์ Safari๋ ์ฅ์น ํด๋์ค(iPad mini์ ๋ค๋ฅธ ๋ํ ํ๋ฉด iPad ๋ชจ๋ธ)์ ๋ฐ๋ผ ๋๋ Safari๊ฐ ๋๋ ์ฌ์ฉ์ ์ ํธ๋(๋ชจ๋ฐ์ผ/๋ฐ์คํฌํฑ ์น์ฌ์ดํธ ์์ฒญ)์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
๊ธฐ๋ฅ ๊ฐ์ง๊ฐ ์ ํฉํ์ง ์์ ๊ฒฝ์ฐ bugs.webkit.org์ ๋ฒ๊ทธ๋ฅผ ์ ๊ธฐํ๋ฉด WebKit ํ์ด ์ต์์ ์๋ฃจ์ ์ ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
iPadOS 13์์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์
๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
mousedown/mouseup ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ,
๋ ์์ ์ ์ด์ด์ผ ํ๋ฏ๋ก UA๋ฅผ ์ค๋ํํ๊ณ ํผ์งํ๋ ๊ฒ๋ณด๋ค ๋ ๋์ ์๋ฃจ์
์ ์๋ํ์ต๋๋ค.
https://github.com/Leaflet/Leaflet/pull/6855
์ฌ์ ํ UA๋ฅผ ์ค๋ํํ๊ณ ์์ง๋ง ํ
์คํธํ ์ ์๋ ํ๋ซํผ์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ธฐ ์ํด์์
๋๋ค. edge
์กฐ๊ฑด์ด dblclick
์ด๋ฒคํธ๊ฐ ํธ๋ฆฌ๊ฑฐ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๊ตฌ์ ๊ธ์ต์ ๋ฐ๊ธฐ ์ํ ๊ฒ ๊ฐ์ต๋๋ค. (์ ๋ JS์ ์ ํตํ์ง ์์ง๋ง) Pointer Events์ ๋ํ Browser.pointer
๊ธฐ๋ฅ ํ
์คํธ๋ ์ฐ๋ฆฌ๊ฐ ํ์ํ ์ ์ผํ ํ
์คํธ์ฌ์ผ ํ๊ณ ๋ค๋ฅธ ํ
์คํธ๋ ์ข๊ณ ๋งค์ฐ ๊ตฌ์ฒด์ ์ด์ด์ผ ํฉ๋๋ค. "Edge๊ฐ ์๋๋ฉด ๊ตฌ์ ๊ธ์ต"("์?" ๋๋ฝ) ๋์ "Edge, ๋ค๋ฅธ ์กฐ์น๋ฅผ ์ทจํ์ธ์"(์ค๋ช
์ ์ด์ ์์)๋ก ํ์๋์ด์ผ ํฉ๋๋ค.
ํ์ง๋ง ์ฌ์ ํ iPad์ iOS13์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
@graouts : Re: https://github.com/Leaflet/Leaflet/issues/6817#issuecomment -536581361 ๋ฐ https://github.com/Leaflet/Leaflet/issues/6817#issuecomment -536587962 :
iPad์์ ์ด ์์
์ ์ํํ๋ ค๊ณ ํฉ๋๋ค(์์ PR๋ก iPhone์์ ์์ ํจ). ํ์ง๋ง ๋ ๋ฒ ํญํ๋ฉด ๋ ๋ฒ์งธ pointerdown
๊ฐ ํธ๋ฆฌ๊ฑฐ๋์ง ์์ต๋๋ค. ์ค๋จ์ ์ ๋ณด๋ด๊ณ log()
ํธ์ถ์ ์ถ๊ฐํ๋๋ฐ ํธ๋ฆฌ๊ฑฐ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ์ด๋ค ์ํฉ์์๋ iPad๊ฐ ๋ ๋ฒ์งธ ํญ์ ์๋ตํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
"์ผ์ค/์ฌ์ค ํด๋ฆญ"์ผ๋ก ํ๋/์ถ์ํ ์ ์์ง๋ง ๋ ๋ฒ ํด๋ฆญ์ผ๋ก๋ ํ๋ํ ์ ์์ต๋๋ค. touchstart
/ touchend
์์ฒญํ๋ ํญ๋ชฉ์ ๋ํ ํธํ์ฑ ๊ณ์ธต์ธ ์ ์ญ ์ฒ๋ฆฌ๊ธฐ์ ๋ก๊ทธ๋ ๋ ๋ฒ ํญํ ๋ ํธ๋ฆฌ๊ฑฐ๋์ง ์์ต๋๋ค.
๋ ๋ฒ์งธ ํญ์ ์๋ตํ๊ธฐ ์ํด iPad(iOS13 ํฌํจ)๊ฐ ๋ฌด์์ ํ ์ ์๋์ง์ ๋ํ ์์ด๋์ด๊ฐ ์์ต๋๊น? ์๊ณ ๊ฐ์ 250ms์ด์ง๋ง ~ 320ms๋ณด๋ค ๋น ๋ฅด๋ฉด ๋ ๋ฒ์งธ ํญ์ ๋ฑ๋กํ ์ ์์ต๋๋ค.
"๋ชจ๋ฐ์ผ์ฉ ์ ๋จ์ง" ํ์ด์ง์์ ์ธ๊ธํ ๊ฒ์ฒ๋ผ ์ ํค๋์ <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
๊ฐ ์์ต๋๋ค.
@graouts (์ฃ์กํฉ๋๋ค. ์ ํํ์ง ์๊ณ WebKit ํ์์
๋ค์ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ํ
์คํธ ํ์ด์ง๋ฅผ ์๋ํ๋ฉด:
https://patrickhlauke.github.io/touch/tests/event-listener.html
iPhone๊ณผ iPad์์ iOS13์ ์ฐจ์ด์ ์ ํ์ธํ ์ ์์ต๋๋ค. iPhone์์ ๋ฒํผ์ ๋ ๋ฒ ํญํ๋ฉด pointerdown+pointerup
์ ๋ ์ํ์ค๋ฅผ ๋ณผ ์ ์์ต๋๋ค. iPad์์๋ ๋ ๋ฒ ํญํ์ฌ ์ด ์ํ์ค๋ฅผ ์คํํ ์ ์์ต๋๋ค. ์ ์ ์ด๋ฒคํธ๋ฅผ ์งํํฉ๋๋ค.
๊ฐ์ฌํฉ๋๋ค,
ํ๋ฆฌํ
@filcab bugs.webkit.org ์ ๋ฒ๊ทธ๋ฅผ ์ ๊ณ ํด ์ฃผ์๋ฉด ์ดํด๋ณด๊ฒ ์ต๋๋ค! ์ฆ, ๊ฐ๋ฐ์ ์๋ ๋น๋๊ฐ ์ด๋ฏธ developer.apple.com์์ ์ ๊ณต๋๋ iOS 13.2์์ ์ด ๋ฌธ์ ๊ฐ ์์ ๋์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ํ์ด ์ดํด๋ณผ ์ ์๋๋ก ํญ์ webkit.org ๋ฒ๊ทธ๋ฅผ ์ ์ถํ์ญ์์ค.
@filcab bugs.webkit.org ์ ๋ฒ๊ทธ๋ฅผ ์ ๊ณ ํด ์ฃผ์๋ฉด ์ดํด๋ณด๊ฒ ์ต๋๋ค! ์ฆ, ๊ฐ๋ฐ์ ์๋ ๋น๋๊ฐ ์ด๋ฏธ developer.apple.com์์ ์ ๊ณต๋๋ iOS 13.2์์ ์ด ๋ฌธ์ ๊ฐ ์์ ๋์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ํ์ด ์ดํด๋ณผ ์ ์๋๋ก ํญ์ webkit.org ๋ฒ๊ทธ๋ฅผ ์ ์ถํ์ญ์์ค.
https://bugs.webkit.org/show_bug.cgi?id=203031์ ์ ์ถํ์ต๋๋ค.
์ฌ๋ฌ๋ถ, ์์คํ ์๊ฒฌ์ ๋ณด๋ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ต๋ํ ๋นจ๋ฆฌ ์ด ๋ฌธ์ ๋ฅผ ์กฐ์ฌํ๊ณ ์์ต๋๋ค. ์ ๋ ํด๊ฐ ์ค์ด์ด์ ์ฝ๋ฉ์ ํ ์ ์์ง๋ง ์ฐ์ ์์๋ฅผ ์ ํ๊ธฐ ์ํด ๋ค๋ฅธ ์ ์ง ๊ด๋ฆฌ์์๊ฒ ํ์ ๋ดค์ต๋๋ค.
ํ ๋ก ์ ๋น ๋ฅด๊ฒ ํ์ด๋ณด๋ iOS13์ด ํฌ์ธํฐ ์ด๋ฒคํธ ์ฌ์์ ์ง์ํ๋ ๊ฒ์ด ๋ฌธ์ ์ ์์ธ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฐ๋ผ์ Leaflet์ ์ผ๋ฐ์ ์ธ ํฐ์น ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ ์ ์์๋ ๋ ๊ฑฐ์ IE ๋ชจ๋ฐ์ผ ๋ธ๋ผ์ฐ์ ์ ํน๋ณํ ์ต์ ํ๋ ์ฝ๋ ๊ฒฝ๋ก๋ฅผ ๋ถ๋ถ์ ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
#6827๊ณผ ๊ฐ์ ์์ด์ ํธ ๋ฌธ์์ด ์ค๋ํ์ ๋งค์ฐ ์์ ์ ์ด์ง ์์ต๋๋ค(์ธ์ ๋ ์ง ์ค๋จ๋ ์ ์์). #6855์ ๊ฐ์ ํฌ์ธํฐ ์ด๋ฒคํธ๋ฅผ ์์ ํ๋ ๊ฒ์ด ๋ ๋์ ์ ์์ง๋ง ์ฐ๋ฆฌ๊ฐ ํด๋น ์ฝ๋๋ฅผ ์์ฑํ ๋ ํฌ์ธํฐ ์ฝ๋ ๊ฒฝ๋ก๊ฐ ์ต์ ๋ธ๋ผ์ฐ์ ์์ ์๋ํ๋๋ก ์๋ํ์ง ์์๋ค๋ ์ ์ ๊ณ ๋ คํ๋ฉด ์ฌ์ ํ ๋งค์ฐ ์ํํฉ๋๋ค. ์ผ๋ฐ ํฐ์น ์ด๋ฒคํธ๊ฐ ์ ๋๋ก ์๋ํ๋ค๋ ๊ฒ์ ๋ ์ผ์ฐ ๊ฐ์งํ๋ค๋ฉด(์ export var pointer = !webkit && !!(window.PointerEvent || msPointer)
) ํฌ์ธํฐ ์ด๋ฒคํธ๋ฅผ ์์ ํ ๋นํ์ฑํํด์ผ ํ ๊น์?
์ฌ๋ฌ๋ถ, ์์คํ ์๊ฒฌ์ ๋ณด๋ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ต๋ํ ๋นจ๋ฆฌ ์ด ๋ฌธ์ ๋ฅผ ์กฐ์ฌํ๊ณ ์์ต๋๋ค. ์ ๋ ํด๊ฐ ์ค์ด์ด์ ์ฝ๋ฉ์ ํ ์ ์์ง๋ง ์ฐ์ ์์๋ฅผ ์ ํ๊ธฐ ์ํด ๋ค๋ฅธ ์ ์ง ๊ด๋ฆฌ์์๊ฒ ํ์ ๋ดค์ต๋๋ค.
ํ ๋ก ์ ๋น ๋ฅด๊ฒ ํ์ด๋ณด๋ iOS13์ด ํฌ์ธํฐ ์ด๋ฒคํธ ์ฌ์์ ์ง์ํ๋ ๊ฒ์ด ๋ฌธ์ ์ ์์ธ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฐ๋ผ์ Leaflet์ ์ผ๋ฐ์ ์ธ ํฐ์น ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ ์ ์์๋ ๋ ๊ฑฐ์ IE ๋ชจ๋ฐ์ผ ๋ธ๋ผ์ฐ์ ์ ํน๋ณํ ์ต์ ํ๋ ์ฝ๋ ๊ฒฝ๋ก๋ฅผ ๋ถ๋ถ์ ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
#6827๊ณผ ๊ฐ์ ์์ด์ ํธ ๋ฌธ์์ด ์ค๋ํ์ ๋งค์ฐ ์์ ์ ์ด์ง ์์ต๋๋ค(์ธ์ ๋ ์ง ์ค๋จ๋ ์ ์์). #6855์ ๊ฐ์ ํฌ์ธํฐ ์ด๋ฒคํธ๋ฅผ ์์ ํ๋ ๊ฒ์ด ๋ ๋์ ์ ์์ง๋ง ์ฐ๋ฆฌ๊ฐ ํด๋น ์ฝ๋๋ฅผ ์์ฑํ ๋ ํฌ์ธํฐ ์ฝ๋ ๊ฒฝ๋ก๊ฐ ์ต์ ๋ธ๋ผ์ฐ์ ์์ ์๋ํ๋๋ก ์๋ํ์ง ์์๋ค๋ ์ ์ ๊ณ ๋ คํ๋ฉด ์ฌ์ ํ ๋งค์ฐ ์ํํฉ๋๋ค. ์ผ๋ฐ ํฐ์น ์ด๋ฒคํธ๊ฐ ์ ๋๋ก ์๋ํ๋ค๋ ๊ฒ์ ๋ ์ผ์ฐ ๊ฐ์งํ๋ค๋ฉด(์
export var pointer = !webkit && !!(window.PointerEvent || msPointer)
) ํฌ์ธํฐ ์ด๋ฒคํธ๋ฅผ ์์ ํ ๋นํ์ฑํํด์ผ ํ ๊น์?
ํนํ ํฌ์ธํฐ ์ด๋ฒคํธ์ ์ฝ๋๊ฐ ๋ด๊ฐ ์์ํ ๊ฒ๋งํผ ์ต์ ์ด ์๋ ๊ฒฝ์ฐ์ ์ข์ต๋๋ค. ์ ์๋ ํจ์น๋ก PR์ ์ ๋ฐ์ดํธํ๊ฒ ์ต๋๋ค(iPad์ iOS 13์ด ์ค์น๋ iPhone์์ ํ ์คํธํ์ผ๋ฉฐ ๋ ๋ค์์ ์๋ํจ).
๊ฐ์ฌํฉ๋๋ค,
ํ๋ฆฌํ
ํ์ค ๊ด์ ์์ ๋ณด๋ฉด ํฐ์น ์ด๋ฒคํธ๋ณด๋ค ํฌ์ธํฐ ์ด๋ฒคํธ(์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ณต๊ธ์ ์ฒด๋ณ ๊ธฐ์ ์ด ์๋ W3C ํ์ค์ด๊ธฐ ๋๋ฌธ์ ์ ํธ๋ฉ๋๋ค.
๊ธฐ์ ์ ์ธ ๊ด์ ์์ ๋ณผ ๋ ์ ์ด๋ iOS ๊ตฌํ์ ๊ฒฝ์ฐ ์ฑ๋ฅ์ ์ํฅ์ด ์์ต๋๋ค. ํฐ์น ์ด๋ฒคํธ๋ ํญ์ ๋๊ธฐ์ ์ผ๋ก ์ ๋ฌ๋๋ฏ๋ก ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ก ์ํ๋๋ ๋ชจ๋ JS ์์ ์ ์ฐจ๋จ๋๊ณ ์๋ต์ฑ์ด ๋จ์ด์ง ์ ์์ต๋๋ค. ํฌ์ธํฐ ์ด๋ฒคํธ๋ ๋น๋๊ธฐ์์ผ๋ก ๊ตฌํ๋ ์ ์๋๋ก ์ค๊ณ๋์์ผ๋ฉฐ iOS์์๋ ๊ทธ๋ ์ต๋๋ค.
๊ณ ๋ คํ ๊ฐ์น๊ฐ ์๋ ๋ ๊ฐ์ง, ์ด ํน์ ๋ฌธ์ ์ ๋ํด์๋ ์๋ ์๋ ์์ง๋ง ๋ฏธ๋๋ฅผ ์ํด ์ผ๋์ ๋ ๊ฐ์น๊ฐ ์์ต๋๋ค.
์์ #6855๊ฐ ๋ง์ปค์์ ์๋ํ์ง ์์ ์ ์์ต๋๊น? ๋ง์ปค๋ฅผ ๊ธธ๊ฒ ํญํด๋ ์ปจํ ์คํธ ๋ฉ๋ด๊ฐ ํธ๋ฆฌ๊ฑฐ๋์ง ์์ง๋ง OS ๊ณต์ /๋ณต์ฌ ๋ฉ๋ด๊ฐ ํ์๋๋ค๋ ๋ณด๊ณ ๋ฅผ ๋ฐ๊ณ ์์ต๋๋ค...
์๋
ํ์ธ์ @eliboni ์
๋๋ค .
์์์ -webkit-touch-callout: none;
(๋๋ ์ด์ ์ ์ฌํ ... ๋๋ ์ด๊ฒ์ ์ ๋ชปํฉ๋๋ค ๐
)๋ฅผ ์ฌ์ฉํด์ผํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ ํ์คํ์ง ์์ต๋๋ค. * { -webkit-touch-callout: none; }
์ถ๊ฐํ๋ฉด ๋ด ํ
์คํธ์์ ์๋ํ์ต๋๋ค(iPhone์ ์ฌ์ฉํ์ฌ ๋ง์ปค์์ ํธ๋ฆฌ๊ฑฐ๋ contextmenu
์ด๋ฒคํธ).
ํ์์ ๋ฐ๋ผ ์กฐ์ ํฉ๋๋ค.
์๋
ํ์ธ์,
Leaflet.js๋ก ๋๋ธ ํญ ์ค์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฐฉ๊ธ ์ด ๊ฒ์๋ฌผ์ ์ฝ์์ง๋ง ํด๊ฒฐ์ฑ
์ ์ฐพ์ง ๋ชปํ์ต๋๋ค.
์๋ฌด๋ ๋์์ฃผ์ธ์?
Kandy์๊ฒ ์๋ถ ์ธ์ฌ๋ฅผ ์ ํฉ๋๋ค.
๋ง์นจ๋ด ๋๋ ํด๊ฒฐ์ฑ ์ ์ฐพ์์ต๋๋ค.
์ ๋จ์ง 1.5๋ก ์ ๋ฐ์ดํธํ๊ณ ๋ค์ ํญ๋ชฉ์์ ํญ์ ํ์ฑํํด์ผ ํฉ๋๋ค.
new L.map("mapid",{ attributionControl: false, zoomControl: false, tap: true });
์ ์๋ํฉ๋๋ค.
์น์ ํ๋
@bitxenio ,
1.5.1์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ์๋ํ์ง ์์ต๋๋ค.
IOS 13.2๋ ์๋ํ์ง ์๋ ๊ฒ ๊ฐ๊ธฐ ๋๋ฌธ์ ์ง๊ธ์ ๋ด ์์ ์ ํธ๋ค๋ฌ๋ฅผ ์์ฑํ๋ ๊ฒ์ผ๋ก ๋์๊ฐ์ต๋๋ค.
@rwillett , @Bitxenio : ์ด๋ค ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๊น? ๋ ๋ค ํน์ ๋ฒ์ ์ ์ ๋จ์ง๋ฅผ ์ธ๊ธํฉ๋๋ค.
10์์ ์ปค๋ฐ๋ PR#6855์ ๋ํ ์์ ์ฌํญ์ 5์์ ๋์จ ์ต์ ๋ฆด๋ฆฌ์ค์ ์์ต๋๋ค.
master
์์ต๋๊น?
๊ฐ์ฌํฉ๋๋ค,
ํ๋ฆฌํ
์! ์ฐ๋ฆฌ๋ ๊ณต์ ๋ฆด๋ฆฌ์ค๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ์ฐ๋ฆฌ๋ PR#6855๊ฐ ํฌํจ๋์ง ์์๋ค๋ ๊ฒ์ ๊นจ๋ซ์ง ๋ชปํ์ต๋๋ค. ์ฐ๋ฆฌ ์๋ชป.
์ฐ๋ฆฌ๋ dev ๋ธ๋์น๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ๊ทธ๊ฒ์ ์๋ํ ๊ฒ์ ๋๋ค.
๊ฐ์ฌ ํด์
๋กญ
์ฐ๋ฆฌ๋ 1.6-dev๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ์ ์๋ํฉ๋๋ค. ios 13.2์ ๋๋ธ ํญ๊ณผ ์ปจํ ์คํธ ๋ฉ๋ด ๋ชจ๋.
๋์์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
๋กญ
1.6.0์์ ์ถ์๋จ
์ผ๋ฐ ํฐ์น ์ด๋ฒคํธ๊ฐ ์ ๋๋ก ์๋ํ๋ค๋ ๊ฒ์ ๋ ์ผ์ฐ ๊ฐ์งํ๋ค๋ฉด(์
export var pointer = !webkit && !!(window.PointerEvent || msPointer)
) ํฌ์ธํฐ ์ด๋ฒคํธ๋ฅผ ์์ ํ ๋นํ์ฑํํด์ผ ํ ๊น์?
@์์
๊ทธ๊ฒ์ ์ค์ ๋ก ์ํํ๊ณ #6896๊ณผ ๊ฐ์ ๋ฌธ์ ๋ฅผ ์ผ์ผ์ผฐ์ต๋๋ค.
https://github.com/Leaflet/Leaflet/issues/6977#issuecomment -577638632์์ ํ ๋ก ์ ์ฐธ์ฌ
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด ๋ฌธ์ ๋ WebKit ๋ฒ๊ทธ #202143 ์์ ์ฐธ์กฐ๋์์ต๋๋ค. WebKit ํ(์ด ๊ฒฝ์ฐ์๋ ๋)์ด ์กฐ์ฌ ์ค์ ๋๋ค.