äœããã®çç±ã§ãã¢ãã€ã«ïŒä»»æã®ããã€ã¹ïŒã§Panzoomã¢ããªã䜿çšããŠãããšãã«ããã³ããºãŒã ããããšãããšãç»åã¯ãºãŒã ã€ã³ãããšå³é ã«ç§»åãããºãŒã ã¢ãŠããããšå·Šäžã«ç§»åããŸãã å Žåã«ãã£ãŠã¯ãã¢ããªãèµ·åããã°ããã®ãšãã«ãç»åã移åããåã«ãºãŒã ã¢ãŠããæ£ããæ©èœãããã®åŸåé¡ãåçºããããšããããŸãã
ã¹ã¯ããŒã«ãã€ãŒã«ã䜿çšãããºãŒã ã€ã³ãšãºãŒã ã¢ãŠãã¯æ£åžžã«æ©èœããŸãããæ©èœããªãã®ã¯ãã³ããºãŒã ã ãã§ãã
ãºãŒã ã€ã³ããç»åã¯ããŠãŒã¶ãŒããºãŒã ã€ã³/ãºãŒã ã¢ãŠãããŠããå Žæã®äžå€®ã«é 眮ããå¿ èŠããããŸãã
ãºãŒã ãããç»åã¯ç§»åãããºãŒã ã€ã³ãããšç»åã®å³äžãç»é¢ã®äžå€®ã«é 眮ããããºãŒã ã¢ãŠããããšå·Šäžãäžå€®ã«é 眮ãããŸãã
åé¡ãéããŠããã ãããããšãããããŸãã iOSãšAndroidã§ãã¢ãè©ŠããŸããããåçŸã§ããŸããã§ããã ãã¹ã¯ããããã©ãŠã¶ããªã¹ãããŸãããããã³ããºãŒã ã¯äž»ã«ã¢ãã€ã«çšã§ãïŒãã ããäžéšã®ããã€ã¹ã«ã¯ããŠã¹ãšã¿ããã¹ã¯ãªãŒã³ã®äž¡æ¹ããããŸãïŒã ãã¹ãã§ããªãå¯èœæ§ããããŸããã䜿çšããŠããããã€ã¹ãç¥ã£ãŠãããšåœ¹ç«ã€å ŽåããããŸãã
åé¡ãåçŸã§ããã«ã§ããããšã¯ããŸããããŸããã ããã«æ·±ãæãäžããŠãPanzoomã®ã³ãŒãå€æŽã§ä¿®æ£ãããïŒãŸãã¯ãã¢ä»¥å€ã®å¥ã®ãã¹ãã±ãŒã¹ã§åé¡ãåçŸãããïŒå Žåã¯ãããã«ã³ã¡ã³ãããŠãã ãããããããæ€èšããŸãã
ããã«ã¡ã¯ãŠã£ãªãœã³ããã
ãè¿äºããããšãããããŸãã ãã¹ã¯ãããçãšã¢ãã€ã«çã®äž¡æ¹ã䜿çšããŸãã
ãã©ãŠã¶ã¯èšã£ãã ããããã¹ãããããã«ãRedmiNote8TãšGalaxy8ã䜿çšããŸããã
ãã®åé¡ã確èªããããã«ãç§ãéçºããŠãããã¢ãèŠãŠã¿ãŠãã ããã
ååãå
¥åããŠïŒäœãä¿åãããŸãããåäŸåãã®ã²ãŒã ã§ãïŒãã¯ãªãã¯ããã ãã§ãã
ãExploraciólliureããã¿ã³ã Panzoomedã«ãªãã€ã¬ã¯ããããŸã
ç»åã ã芧ã®ãšãããããŠã¹ãã€ãŒã«ãºãŒã ã¯æ£åžžã«æ©èœããŸããããã³ããºãŒã ïŒããã³
å®éã«ã¯ãpanzoom.zoomInïŒïŒãã¿ã³ãšpanzoom.zoomOutïŒïŒãã¿ã³ãïŒç§»åããŸã
ç»åã
http://bake250.isdeveloping.com/objectiuexplora/solsticidelspirineus/
æ¬åœã«ããããšãããããŸããããäžäŸ¿ããããããŠç³ãèš³ããããŸããã
ãããããé¡ãããŸã;
ãã«ãã»ãµã³ãã§ã¹ã»ãã©ã³ã³
El lunãã9æ21æ¥ 2020 a las 19:45ãTimmy WillisonïŒ<
[email protected]>ïŒescribióïŒ
åé¡ãéããŠããã ãããããšãããããŸãã ãã¢ãè©ŠããŸãã
https://timmywil.com/panzoom/demoïŒiOSããã³AndroidïŒã§ãã§ããŸããã§ãã
åçŸããŸãã ãã¹ã¯ããããã©ãŠã¶ããªã¹ãããŸãããããã³ããºãŒã ã¯äž»ã«
ã¢ãã€ã«ïŒäžéšã®ããã€ã¹ã«ã¯ããŠã¹ãšã¿ããã¹ã¯ãªãŒã³ã®äž¡æ¹ããããŸãïŒã ãããããªã
䜿çšããŠããããã€ã¹ãç¥ã£ãŠãããšåœ¹ã«ç«ã¡ãŸãã
ãã¹ãã§ããŸãããåé¡ãåçŸã§ããã«ã§ããããšã¯ããŸããããŸããã ããã
ããã«æ·±ãæãäžããŠã¿ããšãPanzoomã®ã³ãŒãå€æŽã§ä¿®æ£ãããŠããããšãããããŸãïŒãŸãã¯
ãã¢ä»¥å€ã®å¥ã®ãã¹ãã±ãŒã¹ã§åé¡ãåçŸãããŸãïŒããé¡ãããŸã
ããã«ã³ã¡ã³ãããŠãããããæ€èšããŸããâ
ã¹ã¬ãããäœæããããããããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/timmywil/panzoom/issues/512#issuecomment-696267620 ã
ãŸãã¯è³Œèªã解é€ãã
https://github.com/notifications/unsubscribe-auth/AOF4EAOK6YQVAHINOAQ3JZTSG6GMRANCNFSM4RUT4P7A
ã
ç§ã¯åãåé¡ãæ±ããŠããŸãã çŠç¹ãé©åã«èšç®ãããŠããããäžçªäžã«ããããã§ãã
@jsblancoãªãã»ã©ã Panzoomã¯transform-origin: 50% 50%
ã«äŸåããŠããŸããããã¯ãã¢ãã¡ãŒã·ã§ã³ãç»åã®äžå€®ã§ã¯ãªããã¥ãŒããŒãã®äžå€®ã«é
眮ããŸãããã®å Žåã¯ç»åã®äžå€®ã«é
眮ãããŸãã contain: outside
ã®èšå®ã«ãããç»åãäžã«ç§»åããããªãããã«ç»åã移åããŸãã ããã¯ã zoomToPoint
ãåŒã³åºããã代ããã«focal
ãªãã·ã§ã³ãæå®ããŠzoom
ã䜿çšããå®éã«ç»åã®äžå¿ã§ãããã¥ãŒããŒãå
ã®ãã€ã³ããèŠã€ããããšã§ä¿®æ£ã§ãããšæããŸãã ããã¯çã«ããªã£ãŠããŸããïŒ
contain: outside
ãèšå®ãããŠããå Žåãããã©ã«ãã§ãã®ãããªããšãè¡ãããšãã§ããŸãã
@rmatec contain: outside
ã䜿çšããŠããŸããïŒ
å«ããªãã·ã§ã³ã䜿çšããŠããŸããã ç§ã®å ŽåãçŠç¹ã¯äžå€®äžã«ããããã«èŠããŸãã ãã³ãã€ã³ãŸãã¯ãã³ãã¢ãŠãã¯ããã®ãã€ã³ããåºæºã«ããŠè¡ãããŸãã
@rmatecãã¢ã§ã¯ãã®åäœãèŠãããªãã®ã§ãäœããã®ãªãã·ã§ã³ãå¿ èŠã ãšæããŸãã èšå®ããŠããå¥ã®ãªãã·ã§ã³ã¯ãããŸããïŒ
Panzoomãåæåããããã«ä»¥äžã䜿çšããŠããŸãã
const panzoomConfig = {
minScale: 1,
maxScale: 2,
step: 0.5,
duration: 200
};
ãã¹ã¯ãããã§ã¯å®å šã«æ©èœããŸãããäœããã®çç±ã§ã¢ãã€ã«ã§ã¯æ©èœããŸããã
ããããŸãããããªãã®ã±ãŒã¹ã¯ãããç°ãªããããããªãããã«èãããŸãã https://jsbin.comãŸãã¯https://codepen.ioã§è€è£œããŠãæ°ãããã±ãããäœæã§ããŸããïŒ ã¯ããŒã³ãäœæã§ãããã³ãã¬ãŒãã¯æ¬¡ã®ãšããã§ãhttps://jsbin.com/dibofogini/1/edit?htmlãjsãoutput ã
ããŸãããã ããããšãã
äœããã®çç±ã§ããã©ãŒã«ã«ãªãã·ã§ã³ã䜿çšããŠãããšãã«ãç»åã
å³äžããã以äžã®ãºãŒã ã¯ãã€ã³ã§ãã¢ãŠãã§ãçºçããŸããã
å€åç§ã¯äœãééã£ãããšãããŠããŸããïŒ ç¹å®ã®ãã©ã¡ãŒã¿ãæž¡ãå¿
èŠããããŸãã
panzoom.zoomInïŒïŒããã³.zoomOutïŒïŒã«ç§»åããŠãçŠç¹ã瀺ããããŸãã¯åã«
ãã³ãºãŒã ã®æåã®å®£èšã«ãããå«ããã ãã§ååã§ããïŒ
ãã®äŸ¡å€ã«ã€ããŠãç§ã¯çŠç¹ãååŸããããã«æ¬¡ã®æ¹æ³ãè©ŠããŸãã
ç¹ã çã®æ°åãå
¥ããŠã¿ãŸããã
clientX: window.innerWidth /2,
clientY: window.innerHeight/2
clientX: document.documentElement.clientWidth/2,
clientY: document.documentElement.clientHeight/2
containsïŒoutsideãåé€ãããšãé»ãç»åãã¬ã³ããªã³ã°ãããŸãã
ãšã«ããŒã«ã9æ22æ¥ 2020 a las 15:59ãTimmy WillisonïŒ<
[email protected]>ïŒescribióïŒ
@jsblancohttps ://github.com/jsblancoãªãã»ã©ã Panzoomã¯transform-originã«äŸåããŠããŸãïŒ
50ïŒ 50ïŒ ãã¢ãã¡ãŒã·ã§ã³ããã¥ãŒããŒãã®äžå€®ã«é 眮ããŸã
ç»åã®äžå€®ãããäœããªããŸãããã®å Žåã¯äœããªããŸãã ãã
å«ãããã«ç»åã移åããŸãïŒå€éšèšå®ãé²æ¢ããããã«
ããŸãã«ãäžã«è¡ãããšããã®ç»åã ããã¯é»è©±ããããšã§ä¿®æ£ã§ãããšæããŸã
ZoomToPointã䜿çšãããã代ããã«ãã©ãŒã«ã¹ãªãã·ã§ã³ãæå®ããŠãºãŒã ã䜿çšããŠæ€çŽ¢ããŸã
å®éã«ã¯ç»åã®äžå¿ã§ãããã¥ãŒããŒãå ã®ãã€ã³ãã ããŸãã
æå³ãããïŒå«ãŸããŠããå Žåãããã©ã«ãã§ãã®ãããªããšãè¡ãããšãã§ããŸãïŒå€éš
ãèšå®ãããŸãã@rmatec https://github.com/rmatecãŸããcontainïŒoutsideã䜿çšããŠããŸããïŒ
â
ããªããèšåãããã®ã§ãããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/timmywil/panzoom/issues/512#issuecomment-696740708 ã
ãŸãã¯è³Œèªã解é€ãã
https://github.com/notifications/unsubscribe-auth/AOF4EANBQXE5TDJOZNTBN6LSHCUVXANCNFSM4RUT4P7A
ã
@jsblancoç³ãèš³ãããŸãããããããããè€éã§ãã ãããè¡ãæ¹æ³ã¯ãç»åã®äžå¿ãèŠã€ããŠãããããã³ãºãŒã ã®èŠªãã¥ãŒããŒãã®ãã®ãã€ã³ãã«å€æããããšã§ãã 次ã«ãããããã©ãŒã«ã«ãªãã·ã§ã³ãšããŠæž¡ãããºãŒã ãåŒã³åºããã³ã«èšç®ããå¿
èŠããããŸãã ããããç§ãããªãã®ããã«äŸãäœãããšãã§ãããã©ããèŠãŠã¿ãŸãããã ããzoomIn
/ zoomOut
ãä¿®æ£ãããŸãã
ãšã¯ãããããã«ãã£ãŠãã³ããºãŒã ã®åäœãå€ããããšã¯ãããŸããã ééããªããç¹å®ã®ãã€ã³ãããºãŒã ãããšcontain: outside
ã«ã¶ã€ããã®ã§ãããã¯æ£ããããšã§ãã ãã¥ãŒããŒãã«é©åã«ä¿æããããã«ç»åã移åããå¿
èŠãããå Žåã«ãºãŒã ãèš±å¯ããªãããšãé€ããŠãããã§ã®ä¿®æ£ã¯ããããŸããã
ããããŸãããããªãã®ã±ãŒã¹ã¯ãããç°ãªããããããªãããã«èãããŸãã https://jsbin.comãŸãã¯https://codepen.ioã§è€è£œããŠãæ°ãããã±ãããäœæã§ããŸããïŒ ã¯ããŒã³ãäœæã§ãããã³ãã¬ãŒãã¯æ¬¡ã®ãšããã§ãhttps://jsbin.com/dibofogini/1/edit?htmlãjsãoutput ã
ç¹å®ã®ã±ãŒã¹çšã«https://github.com/timmywil/panzoom/issues/513ãäœæããŸããã åé¡ã瀺ãJSBinãžã®ãªã³ã¯ããããŸãã
ãanimateïŒtrueãããªã³ã®ãŸãŸã«ãããšããã®åé¡ãåçŸã§ããŸãã
ãã®åé¡ã¯ãanimateïŒfalseãã«ã¯è¡šç€ºãããŸãã-ãã®åé¡ãåçŸããããã«ãã³ãã¬ãŒã@timmywilã®ã¯ããŒã³ãäœæããŸããïŒ
https://jsbin.com/pemoveyeri/1/editïŒ
ïŒçŽæ¥ãºãŒã ãããã€ãŒã«ã€ãã³ããªã¹ããŒãå®è£ ããŸãã-ååã«éãã¹ã¯ããŒã«ãããšãäœçœ®ãã·ããããŸããïŒ
åé¡ã¯åãã§ãããæ§æãç°ãªããããåé¡ãïŒ515ã«ç§»åããŸããã
ãã;
åçã«æéãããã£ãŠãã¿ãŸããã contains="outside"ãšã¯é¢ä¿ãªããšæããŸãã ç§ã¯ãããåãé€ãããšãããããã»ã©æ¿ããã¯ãããŸããããããã§ãåãåäœã瀺ããŸããã ãã ããpanzoom divãšç»åã®ãµã€ãºã¯ãéãã®ãµã€ãºãšã¯é¢ä¿ãªãèšå®ãããŠããŸãã ããã¯åé¡ã®äžéšã§ããããïŒ
ããããšã
@jsblancoä¿®æ£ã¯åãã§ããå¿ èŠããããŸãã
ããã«ã¡ã¯ãç§ã¯ãã€ãŒã«ãºãŒã ãäžå¿ããé¢ãããšããæ°ããåé¡ãéãã€ããã§ãããããããèŠãŠãããã¯ååã«é¢é£ããŠãããšæããŸããã 以äžã¯ç§ã®çºèŠãšåé¿çã§ãã ç§ã¯ãã©ãã¯ãããã䜿çšããŠMacBookã®ãã©ãŠã¶ã§ã®ã¿ãã¹ãããããšã«æ³šæããŠãã ããã
çŠç¹ãºãŒã ã®ãã¢ã§ã¯ãSafariãFirefoxã§ãºãŒã ãããšãäžå€®ãå·Šäžã«åãã£ãŠæµ®ããã§ããããšã«æ°ä»ããŸããã Chromeã§ãåãåäœãåŸãããŸãããWebã€ã³ã¹ãã¯ã¿ãŒãéããŠããå Žåã®ã¿ã§ãã
ããã§ç§ã¯ããã調ã¹å§ããŸããããããŠç§ã®çãã¯ããŠã¹ãã€ãŒã«ã€ãã³ããããŸãã«ãé »ç¹ã«ããªã¬ãŒãããŠãããPanzoomã®éåææ§ã®ããã«ç©äºãæ£ããæŽæ°ãããŠããªããšããããšã§ãã ãºãŒã ã®é »åºŠã調æŽããããšãããšãããã圹ç«ã€å¯èœæ§ããããååã«ãæ©èœãããããã«èŠãããšæããŸããã ããã§å®éã®åäœã確èªã§ããŸãïŒ https ïŒ//jsbin.com/joliduwulo/1/editïŒhtmlãjsãoutputã
泚æç¹ã¯ããºãŒã ãã¹ã ãŒãºã«è¡šç€ºãããªãããšã§ãã ãã®äŸã§ã¯ã20ããªç§ããšã«æ倧ãºãŒã ã1ã€ã«å¶éããŠããŸãããç¹ã«Firefoxã§å€§ããªSVGã䜿çšããŠãã¹ãããå ŽåãçŠç¹ã倱ããªãããã«ããºãŒã ãçŽ50ããªç§ã«èšå®ããå¿ èŠããããŸããã
@timmywilãšã«ããæ°ããåé¡ãéããŠã»ããå Žåã¯ãç§ã«ç¥ãããŠãã ããã ããã¯ããã¯ã®ããã«èŠããŸãããç§ã«ãšã£ãŠã¯åé¡ã解決ããŸãã 解決çãæ€èšãã䟡å€ããããšæãããå Žåã¯ãè²¢ç®ããããšæããŸãã
ãã¥ãŒããŒãã§ã¯ãªããã³ãºãŒã èŠçŽ ãäžå¿ã«é 眮ããæ©èœã«+1
panzoom.tsïŒ426ã®ç§»åæ©èœã眮ãæããŸã
é¢æ°moveïŒeventïŒPointerEventïŒ{
ããã ïŒ
ïŒisPanning ||
origX===æªå®çŸ©||
origY===æªå®çŸ©||
startClientX===æªå®çŸ©||
startClientY===æªå®çŸ©
ïŒ{
æ»ã
}
addPointerïŒãã€ã³ã¿ãã€ãã³ãïŒ
const current = getMiddleïŒpointersïŒ
ifïŒpointers.length> 1ïŒ{
//æåã®2ã€ã®ãã€ã³ã¿éã®è·é¢ã䜿çšããŸã
//çŸåšã®ã¹ã±ãŒã«ã決å®ãã
//ã¢ãã€ã«ã§ã®ãºãŒã ã®åé¡ãé²ã
ifïŒstartDistance === 0ïŒ{
startDistance = getDistanceïŒpointersïŒ;
}
const diff = getDistanceïŒpointersïŒ-startDistance
const toScale = contrampScaleïŒïŒdiff * options.stepïŒ/ 80 + startScaleïŒ.scale
ZoomToPointïŒtoScaleãcurrentïŒ
} ããããªããš {
//ã¢ãã€ã«ãºãŒã ã®çŠç¹ãšã©ãŒãé²ãããã«elseæ¡ä»¶ãè¿œå ããŸãã
ãã³ïŒ
origX +ïŒcurrent.clientX --startClientXïŒ/ scaleã
origY +ïŒcurrent.clientY --startClientYïŒ/ scaleã
{{
ã¢ãã¡ãŒãïŒfalse
}
ïŒ;
}
}
æãåèã«ãªãã³ã¡ã³ã
panzoom.tsïŒ426ã®ç§»åæ©èœã眮ãæããŸã
é¢æ°moveïŒeventïŒPointerEventïŒ{
ããã ïŒ
ïŒisPanning ||
origX===æªå®çŸ©||
origY===æªå®çŸ©||
startClientX===æªå®çŸ©||
startClientY===æªå®çŸ©
ïŒ{
æ»ã
}
addPointerïŒãã€ã³ã¿ãã€ãã³ãïŒ
const current = getMiddleïŒpointersïŒ
ifïŒpointers.length> 1ïŒ{
//æåã®2ã€ã®ãã€ã³ã¿éã®è·é¢ã䜿çšããŸã
//çŸåšã®ã¹ã±ãŒã«ã決å®ãã
//ã¢ãã€ã«ã§ã®ãºãŒã ã®åé¡ãé²ã
ifïŒstartDistance === 0ïŒ{
startDistance = getDistanceïŒpointersïŒ;
}
const diff = getDistanceïŒpointersïŒ-startDistance
const toScale = contrampScaleïŒïŒdiff * options.stepïŒ/ 80 + startScaleïŒ.scale
ZoomToPointïŒtoScaleãcurrentïŒ
} ããããªããš {
//ã¢ãã€ã«ãºãŒã ã®çŠç¹ãšã©ãŒãé²ãããã«elseæ¡ä»¶ãè¿œå ããŸãã
ãã³ïŒ
origX +ïŒcurrent.clientX --startClientXïŒ/ scaleã
origY +ïŒcurrent.clientY --startClientYïŒ/ scaleã
{{
ã¢ãã¡ãŒãïŒfalse
}
ïŒ;
}
}