Upgrade to Pro — share decks privately, control downloads, hide ads and more …

서비스 UX는 내가 직접 지킨다: 웹 이미지 뷰어 '포커스' 개발 및 적용기

kakao
November 01, 2024

서비스 UX는 내가 직접 지킨다: 웹 이미지 뷰어 '포커스' 개발 및 적용기

#FE #UX #일하는 방식

관심과 우선순위를 받기 어려운 처지에 놓인 UX 관련 과제를 시작시키기부터 성공적으로 적용하는 데까지 직면했던 여러 문제들과 이를 극복해오면서 배운 경험들을 공유하고자 합니다.

발표자 : jordan.song, leah.han
카카오 FE플랫폼팀에서 티스토리 서비스를 담당하고 있는 조단입니다.
카카오 FE플랫폼팀에서 카페 서비스를 담당하고 있는 리아입니다.

kakao

November 01, 2024
Tweet

More Decks by kakao

Other Decks in Programming

Transcript

  1. ౭झషܻ ࠳۠஖झషܻ ஠஠য়ݗ ↟ ೠ੿੸੉ҊࠛӐഋೠӝמ ӝמ ౭झషܻ ࠳۠஖ ׮਺஠ಕ ஠஠য়ݗ

    ठۄ੉٘ 9 9 9 0 ഛ؀୷ࣗ 9 0 9 0 ੉޷૑ݾ۾ 9 9 0 0 ࣁࠗ੿ࠁ 9 9 9 0 ӝઓ੉޷૑࠭যޙઁ࠙ࢳ
  2.          

      -PPQUSVF 4MJEF4J[F 7JSUVBM4J[F "DUJWF*OEFYUP о࢚ठۄ੉٘ز੘    
  3. function scaleByPinch (prevPinch, currentPinch) { const nextScale = getNextScale(prevPinch.distance, nextPinch.distance);

    const scaleChange = nextScale / state.scale - 1; const imageRect = imageEl.getBoundingClientRect(); const imageCenter = getCenterPoint2D(imageRect); const offsetX = (imageCenter.x - currentPinch.center.x) * scaleChange; const offsetY = (imageCenter.y - currentPinch.center.y) * scaleChange; state.translateX += (currentPinch.center.x - prevPinch.center.x) + offsetX; state.translateY += (currentPinch.center.y - prevPinch.center.y) + offsetY; state.scale = nextScale; } ੉޷૑झாੌ݂೘஖ 1 2 3 4 5 6 7 8 9 10 11 12 12 14
  4. const phocus = createApp({ options: { loop: true, theme: 'dark'

    } }); phocus.slideTo(index); phocus.slideNext(); phocus.open(); phocus.close(); phocus.on('open', callback); phocus.on('slideChange', callback); ѐߊ੗҃೷ਃࣗ"1* ২࣌ 0QUJPOT ‣ ۄ੉࠳۞ܻ੄ز੘ߑधਸࢸ੿ೡࣻ੓ب۾೧઱חч ‣ ೧׼чਸ૑੿ೞৈѐߊ੗оౠ੿ਃҳࢎ೦ীݏחӝמ ਸҳഅоמೞب۾ೣ
  5. const phocus = createApp({ options: { loop: true, theme: 'dark'

    } }); phocus.slideTo(index); phocus.slideNext(); phocus.open(); phocus.close(); phocus.on('open', callback); phocus.on('slideChange', callback); ݫࢲ٘ .FUIPET ‣ ѐߊ੗оۄ੉࠳۞ܻ੄ӝמਸप೯ೡࣻ੓ب۾ 
 ઁҕೞחೣࣻ ‣ জप೯ ठۄ੉٘߸҃١ਸࢲ࠺झ੄ജ҃ীݏѱप೯ оמೞب۾ೣ const phocus = createApp({ options: { loop: true, theme: 'dark' } }); phocus.slideTo(index); phocus.slideNext(); phocus.open(); phocus.close(); phocus.on('open', callback); phocus.on('slideChange', callback); ѐߊ੗҃೷ਃࣗ"1*
  6. ੉߮౟ &WFOUT ‣ ۄ੉࠳۞ܻীࢲߊࢤೞח࢚క੄߸ചܳх૑ ‣ ੉߮౟೩ٜ۞ܳ١۾ೞৈۄ੉࠳۞ܻ৬ࢲ࠺झ੄ 
 ࢚ഐ੘ਊਸоמೞѱೣ const phocus

    = createApp({ options: { loop: true, theme: 'dark' } }); phocus.slideTo(index); phocus.slideNext(); phocus.open(); phocus.close(); phocus.on('open', callback); phocus.on('slideChange', callback); const phocus = createApp({ options: { loop: true, theme: 'dark' } }); phocus.slideTo(index); phocus.slideNext(); phocus.open(); phocus.close(); phocus.on('open', callback); phocus.on('slideChange', callback); ѐߊ੗҃೷ਃࣗ"1*
  7. ѐߊ੗҃೷ਃࣗ$44 $44߸ࣻ $447BSJBCMF ↟ $44߸ࣻܳয়ߡۄ੉٬ೞৈۄ੉࠳۞ܻ੄ӝࠄ੸ੋ ٣੗ੋਸऔѱழझథоמೞب۾୊ܻ ‣ ߓ҃ ҷҋ పفܻ١

    ↟ пࢲ࠺झ੄ਃҳࢎ೦ীݏѱрױೠழझథоמ ↟ ׮਺஠ಕীࢲߓ҃ పفܻ࢚࢝١߸҃ --pcs-z-root: 940109; --pcs-h-ctrl-top: 80px; --pcs-h-ctrl-bottom: 80px; --pcs-round-handlebar: 100px; --pcs-round-grid-layer: 20px 20px 0 0; --pcs-bg-image-viewer: #ffffff; --pcs-bg-controller: #fffffff5; --pcs-bg-grid: #ffffff; --pcs-bg-handlebar: #dddddd;
  8. ֙ਘ  ֙ ✓ ߡӒࣻ੿ ✓ ࠳۠஖੸ਊ   

     ֙ਘ ֙ਘ ֙ਘ ֙ਘ ✓ ѐߊ৮ܐ ✓ ࢎղߓನ ✓ ߡӒࣻ੿ ✓ ২࣌୶о ✓ ౭झషܻ੸ਊ ✓ ߡӒࣻ੿ ✓ ২࣌୶о ✓ ׮਺஠ಕ੸ਊ ✓ ప੉࠶੸ਊ ✓ ߡӒࣻ੿ ✓ ୭੸ച ✓ ஠஠য়ݗ੸ਊ ✓ 4WFMUF ✓ ٣੗ੋѐࢶ ✓ ௏٘ҳઑѐࢶ  ѐߊ੗҃೷ਃࣗߡ੹ҙܻ