Skip to content

μŠ€μ™€μ΄ν”„ λ°± μ• λ‹ˆλ©”μ΄μ…˜ 덜μ»₯μž„ 이슈 #672

@jochongs

Description

@jochongs

μ•ˆλ…•ν•˜μ„Έμš”.

react-ui-core의 swipe back μ• λ‹ˆλ©”μ΄μ…˜ (curpertino theme)μ—μ„œ 덜μ»₯μž„μ΄ λŠκ»΄μ§€λŠ” ν˜„μƒμ΄ μžˆμ–΄ 이슈λ₯Ό κ³΅μœ λ“œλ¦½λ‹ˆλ‹€.

1. λ°°κ²½

useStyleEffectSwipeBack ν›…μ—μ„œ μŠ€μ™€μ΄ν”„λ°± 제슀처 쀑 touchend κ°€ λ°œμƒν•˜λ©΄, ν•΄λ‹Ή μ‹œμ μ˜ v(속도)λ₯Ό κΈ°μ€€μœΌλ‘œ μŠ€μ™€μ΄ν”„ λ°± μ—¬λΆ€λ₯Ό νŒλ‹¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

const onTouchEnd = () => {
if (!x0 || !t0 || !x) {
resetState();
return;
}
const t = Date.now();
const v = (x - x0) / (t - t0);
const swiped = v > 1 || x / $paper.clientWidth > 0.4;
onSwipeEnd?.({ swiped });
Promise.resolve()
.then(() => resetActivity({ swiped }))
.then(() => resetState());
};

μŠ€μ™€μ΄ν”„ λ˜μ—ˆλ‹€κ³  νŒλ‹¨λœ 경우 pop 이 μ‹€ν–‰λ˜κ³ , 이후 resetActivityλ₯Ό ν˜ΈμΆœν•˜μ—¬ swipe back μ• λ‹ˆλ©”μ΄μ…˜μ΄ μ§„ν–‰λ©λ‹ˆλ‹€.

requestAnimationFrame(() => {
$dim.style.opacity = `${1 - ratio}`;
$dim.style.transition = "0s";
$paper.style.overflowY = "hidden";
$paper.style.transform = `translate3d(${dx}px, 0, 0)`;
$paper.style.transition = "0s";

μŠ€μ™€μ΄ν”„ λ°± μ• λ‹ˆλ©”μ΄μ…˜μ€ translate3d + transition 기반으둜 처리되고 μžˆμŠ΅λ‹ˆλ‹€.

2. 문제점

ν˜„μž¬ κ΅¬ν˜„ λ°©μ‹μ—μ„œλŠ” touchend μ§μ „μ˜ μ‚¬μš©μž ν„°μΉ˜ 이동 속도가 μ• λ‹ˆλ©”μ΄μ…˜ μ‹œμž‘ ꡬ간에 반영되고 μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
이λ₯Ό 거리-μ‹œκ°„ κ·Έλž˜ν”„λ‘œ ν‘œν˜„ν•˜λ©΄ μ•„λž˜μ™€ 같은 ν˜•νƒœκ°€ λ©λ‹ˆλ‹€.

Image

λΉ¨κ°„ μ›μœΌλ‘œ ν‘œμ‹œν•œ μ§€μ μ²˜λŸΌ, μ• λ‹ˆλ©”μ΄μ…˜ μ‹œμž‘ μ‹œμ μ—μ„œ 속도가 λΆˆμ—°μ†μ μœΌλ‘œ λ³€ν™”ν•˜κ²Œ λ©λ‹ˆλ‹€.
즉, ν•΄λ‹Ή 지점은 λ―ΈλΆ„ λΆˆκ°€λŠ₯ν•œ μ§€μ μ΄λ˜λ©° κ·Έ κ²°κ³Ό μ‚¬μš©μž μž…μž₯μ—μ„œλŠ” 덜μ»₯μž„μ΄ μ²΄κ°λ©λ‹ˆλ‹€.
특히 λΉ λ₯΄κ²Œ μŠ€μ™€μ΄ν”„ ν•  수둝 이 덜μ»₯μž„μ€ μ‹¬ν•˜κ²Œ λŠκ»΄μ§‘λ‹ˆλ‹€.

default.mp4

λ…Ήν™” μ˜μƒ μ˜¬λ €λ“œλ¦½λ‹ˆλ‹€.
(λ…Ήν™”λ³ΈμœΌλ‘œλŠ” 잘 μ²΄κ°λ˜μ§€λŠ” μ•Šμ€ 것 κ°™μŠ΅λ‹ˆλ‹€.)


ν”„λ‘œμ νŠΈμ—μ„œ stackflow μ˜€ν”ˆμ†ŒμŠ€ 정말 잘 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
쒋은 μ˜€ν”ˆμ†ŒμŠ€ λ§Œλ“€μ–΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions