January 22, 2022
μ΅κ·Ό μ΄λ€ νλ‘μ νΈλ₯Ό μ§ννλ©΄μ νκ°μ§ λ°μνλ μ΄μμ ν΄κ²°κ³Όμ , ν΄κ²°λ°©λ²μ λν νμ μ λ€λ£¬ ν¬μ€νΈ μ΄λ€.
μ’μ° μ€ν¬λ‘€κ³Ό κ°μ μμμ ꡬνν λ, μλ μ μλ €μ Έμκ³ λμ μ¬μ©μ μλνλ swiper
λͺ¨λ λμ μ’μ° μ€ν¬λ‘€μ ν΅ν΄ ꡬνν΄λ³΄κ³ μ νμλ€.
ꡬνκ³Όμ μ체μλ ν° λ¬Έμ κ° μμλλ° νκ°μ§ λ¬Έμ κ° λ°μνμλ€.
click
μ΄λ²€νΈμ κ²½μ°, λμΌν μμ λ΄μ mousedown
- mouseup
μ΄ λ°μνλ©΄ click
μ΄ νΈμΆλλκ² κ°μλ€.
κ·Έ μμλν λμΌνκ² mousedown
- mouseup
- click
μ΄ νΈμΆλμλ€.
κ·Έλμ κ·Έκ² μ?
μμμ μ κΉ μΈκΈλμλλ°, μλ‘ λ€λ₯Έ μμμμ mousedown
, mouseup
μ΄ μ΄μ΄μ§κ²λλ€λ©΄ click
μ΄ νΈμΆλμ§ μμ§λ§ λμΌν μμμμ μμ, λ§λ¬΄λ¦¬ λλ€λ©΄ click
μ΄ νΈμΆλμ΄ μνμ§ μλ μν©μ ν΄λΉ μ΄λ²€νΈκ° λ°μνμλ€.
μ¦, μ¬μ©μμ μ
μ₯μμ λ¨μ μ’μ° μ€ν¬λ‘€μ μνλ κ²μ΄ μμνμ§ λͺ»ν ν΄λ¦μ΄λ²€νΈκ° λ°μνμ¬ μμμ ν λΉλ route
λ‘ μ΄λνλ λ±μ μ¬μ΄λμ΄ννΈκ° λ°μνμλ€.
νκ°μ§ ν΄κ²°λ°©λ²μ ν΄λ¦μ΄λ²€νΈκ° μλ mouseup
μ΄λ²€νΈλ‘ λ체νκ³ λλκ·Έμ€μΈ μνλ₯Ό ꡬλΆνμ¬ μ΄λ²€νΈ μ νλ₯Ό λ§λκ²μ΄μλ€.
μ΄λ²€νΈκ° μ λ¬λλ μμλ μ΄λ²€νΈ μ νμ체λ₯Ό λ§μμ μλ μλ°μ€ν¬λ¦½νΈμ νΉμ§μ μ μ΄λ¦° ν΄κ²°λ°©λ²μΌ μ μλ€.
λ€λ§ μμ¬μ΄μ μ mouseup
μ΄λΌλ νμλ μκ°λ³΄λ€ λ§μ λ°©λ²μ 곡μ νκ²λλλ°,
λ§μ°μ€ ν μ ν΄λ¦νλ€κ±°λ, λ€λ₯Έ μμμμ μμνκ³ λλκ·Ένμ¬ ν΄λΉμμμμ λ§μ°μ€μ μ ν κ²½μ°μλ λ°μν μ μλ€λ μ μ΄λ€.
κ²°κ΅, λμΌνκ² μ¬μ©μκ° μνμ§ μλ μν©μμλ ν΄λΉ μ΄λ²€νΈκ° λ°μν μ μλ€λμ μ ν΄κ²°λμ§ μμλ€.
μ‘°κΈ λ€λ₯΄κ² μ κ·Όμ ν΄λ³΄μ.
κ²°κ΅ mousedown
- mouseup
- click
κ³Ό κ°μ΄ λμΌ μμ λ΄μμ λ°μνλ μ΄λ²€νΈμ νΈμΆμμλ λ°κΏ μ κ° μλ€.
μ¦ mouseup
μ ν΅ν΄ λλκ·Έμ€μ΄ μλ μνλ₯Ό μ΄κΈ°ν νκ² λλ€λ©΄ λΉμ°ν μ΄νμ νΈμΆλλ click
μ΄λ²€νΈμμλ λλκ·Έμ€μΈ μνλ₯Ό ꡬλΆν μ μλ€.
μλ°μ€ν¬λ¦½νΈκ° μ€νλλ νκ²½μ νλμ μ½μ€νμΌλ‘ μ²λ¦¬λμ΄ νμμ λΉλκΈ°λ‘ μ λ¬νμ¬ μ€νλλ μμ, μκ°μ κ°λ°μκ° μ΄λμ λ 컨νΈλ‘€ ν μ μλ€.
μ΄λ¬ν μ μ΄ μ λ§ λ§€λ ₯μλ€κ³ μκ°νλλ°, μμ λ¬Έμ λ μ΄μκ°μ΄ μ κ·Όνμ¬ ν΄κ²°ν μ μμλ€.
setTimeout(() => {
isDragging = false
})
μ λ§ λ¨μν ν μ€ μ΄μ§λ§ λ§μκ²μ μλ―Ένκ³ μλ€.
μ ν¨μλ mouseup
λΌλ μ΄λ²€νΈκ° μ€νλ λ μ½λ°±ν¨μλ‘ μ λ¬λμ΄ μ€νλλ μ€νν¨μμ΄λ€.
νμ§λ§, setTimout
μ ν΅ν΄ λΉλκΈ°μ²λ¦¬νμκΈ° λλ¬Έμ λ³λμ μκ°μ μ§μ ν΄μ£Όμ§ μμλλΌλ μ¦μμ€νλλκ²μ΄ μλ νμ€ν¬νμ μ μ₯μ΄ λλ€.
μ¬μ©μμ μ΄λ²€νΈλ κ°κ°μ μ΄λ²€νΈ νΈλ€λ¬μ ν λΉλμ΄μλ μ€νν¨μλ€μ΄ λΉλκΈ°λ‘ μ²λ¦¬λλ νΉμ§μΈλ°, μ setTimeout
μ ν΅ν΄ μ λ¬λλ λλκ·Έμν μ΄κΈ°ν λΌλ μ€νν¨μλ click
μ΄λ²€νΈμ μ€νν¨μλ³΄λ€ λ·μμμΈ μνλ‘ νμ€ν¬νμ μ μ₯λλ€.
μ μ
μ μΆμ νΉμ§μ κ°κ³ μλ νμ μλ£κ·μ‘° νΉμ±μ click
μ΄λ²€νΈμ νΈμΆμ΄ λ¨Όμ μ§νμ΄ λμ§λ§, μμ§ isDragging
μ μνκ° μ΄κΈ°νλμ§ μμκΈ° λλ¬Έμ route
μ΄λκ³Ό κ°μ΄ ν λΉλ ν΄λ¦μ΄λ²€νΈκ° νΈμΆλμ§ μλλ€.
λ€λ§, μμ click
μ΄λ²€νΈμ μ€νν¨μκ° μ’
λ£λλ©΄ μ½μ€νμ΄ λΉμ΄μμμ κ°μ§νκ³ setTimeout
μ isDragging
μνλ₯Ό μ΄κΈ°ννλ μ€νν¨μκ° νΈμΆλλ μ μ΄λ€.
μ΄λ₯Ό ν΅ν΄, λλκ·Έμ€μΈ μν μ΄κΈ°νλ mouseup
μ ν λΉνμλλΌλ μ€μ κ·Έ λ‘μ§ μ체λ click
μ΄λ²€νΈ νΈμΆ μ΄νμ μλλκΈ° λλ¬Έμ click
μ μ€νν¨μ λ΄λΆμμλ isDragging
μ true
, false
λκ°μ§ μνλ₯Ό μ μ μκ² λλ€.
λ΄κ° ν΄κ²°νλ λ°©λ²μ΄ μ λλ‘ μ λ΅μ΄λΌκ³ μκ°νμ§ μκ³ , νλ¦° μ λ΅μΌ μ λ μλ€.
λ°λΌμ λ€λ₯Έ λμ€μ μΌλ‘ μ¬μ©λκ³ μλ λΉμ·ν μν©μ΄ μκΈΈμ μλ μ€νμμ€λ₯Ό ν΅ν΄ μ΄λ€ λ°©λ²μ΄ μλμ§ νμΈν΄λ³΄κ³ μ νλ€.
ν μμΌ κΈ°μ€ μ£Όκ° λ€μ΄νμκ° 70λ§ν μ΄μμΈ μ΄λ§μ΄λ§ν λͺ¨λμ΄λ€.
onClick?: (swiper: SwiperClass, event: MouseEvent | TouchEvent | PointerEvent) => void;
onTouchStart?: (swiper: SwiperClass, event: MouseEvent | TouchEvent | PointerEvent) => void;
onTouchMove?: (swiper: SwiperClass, event: MouseEvent | TouchEvent | PointerEvent) => void;
onTouchEnd?: (swiper: SwiperClass, event: MouseEvent | TouchEvent | PointerEvent) => void;
λ¨Όμ ν΄λΉ λͺ¨λμ Swiper
μμλ μμ±ν 컀μ€ν
μ΄λ²€νΈκ° mouse
, touch
, pointer
3κ°μ§ μΌλ° μ΄λ²€νΈλ€μ νΈλ€λ§ν΄μ£Όλκ² κ°λ€.
pointer
λmouse
λ₯Ό ν¬ν¨ν μ‘°κΈ λ λμ κ°λ μ μ΄λ²€νΈλΌκ³ νλ€.
core.js
μμ Swiper
λΌλ ν΄λμ€κ° μμ±λ λ κ°κ³ μλ λͺκ°μ§ μμ±μ΄ ν΅μ¬μΌλ‘ 보μΈλ€.
// Clicks
allowClick: true,
preventClicks: true,
preventClicksPropagation: true,
λν, 컀μ€ν
νκ² μμ±λλ click
μ΄λ²€νΈλ μλμ κ°μ μ€κ°λ¨κ³λ₯Ό κ±°μΉκ² λλλ°,
export default function onClick(e) {
const swiper = this
if (!swiper.enabled) return
if (!swiper.allowClick) {
if (swiper.params.preventClicks) e.preventDefault()
if (swiper.params.preventClicksPropagation && swiper.animating) {
e.stopPropagation()
e.stopImmediatePropagation()
}
}
}
swiper.allowClick
μμ±μ΄ false
λΌλ©΄ μ΄λ²€νΈ μ νμ체λ₯Ό λ§μλ²λ¦°λ€.
μ΄ κ΅¬λΆ λ‘μ§μ΄ λ§€μ° ν΅μ¬μ΄λ€.
Swiper
λͺ¨λμμ 컀μ€ν
νκ² μμ±ν onTouchMove
μ΄λ²€νΈμ λ΄λΆ μ½λλ₯Ό 보λ€λ³΄λ©΄ λͺ¨λ μ’
λ£μν© μ μ κ°μ΄ ν λΉλλκ²μ΄ μλ€.
swiper.allowClick = false
μ¦, λλκ·Έμ€μΈ μν©μλ λ΄λΆμ μΌλ‘ ν΄λ¦μ΄ κ°λ₯ν μνλ₯Ό λΆμ ν νλ ꡬ문μ΄λ€.
κ·Έλ¦¬κ³ onTouchEnd
μ 컀μ€ν
μ΄λ²€νΈ λ΄λΆμ λμλλ νκ°μ§ λ‘μ§μ΄ μλ€.
nextTick(() => {
if (!swiper.destroyed) swiper.allowClick = true
})
μ’
λ£λ λ, swiper
λͺ¨λμ΄ μ‘΄μ¬νλ€λ©΄ swiper.allowClick
μμ±μ λ€μ ν΄λ¦ κ°λ₯ν μνλ‘ λ³κ²½μ ν΄μ£Όλλ°,
λλκ²λ μ nextTick
λ©μλμ μν μ
function nextTick(callback, delay = 0) {
return setTimeout(callback, delay)
}
λκ°λ€.
μ΄κΈ°ν λ‘μ§μ λΉλκΈ°λ‘ μ λ¬νμ¬ click
μ΄λ²€νΈ μ΄νμ μ€νλλλ‘ ν΄μ£Όμλ€.
μμλ₯Ό μ ννλ€λ νμμ mouseup
μ΄λ²€νΈλ₯Ό μ¬μ©νλκ²μ΄ κΆμ₯λμ§ μκ³ , λμΌν μμ λ΄μ mousedown
κ³Ό mouseup
μ΄ ν¨κ» μλλμΌνλ click
μ΄λ²€νΈλ₯Ό μ κ·Ή κΆμ₯νκ³ μμκ³ κ·Έλ¬ν μ΄μ κ° μ¬μ©μμ μ
μ₯μμ μμ μΈμ μν©μ λ°μμν¬μ μλ€λμ μ΄ μ΄μ μκΈ° λλ¬Έμ κ·Έλ¬ν λ°©λ²μ μ μ§ν μ±λ‘ ν΄κ²°μ μ κ·Όνλ€λκ²μ ν° μλ―Έκ° μμλκ² κ°λ€.
λ, λμ€μ μΈ λͺ¨λμ΄ μ ννλ λ°©μκ³Ό λμΌν λ°©μμ μ κ·Όμ΄λΌ λλ¦μ κ°μΉμλ λ°©λ²μΈκ² κ°μ λΏλ―νκΈ°λ νλ€.