1. 程式人生 > >Swiper外掛 loop:true時引發繫結dom的click事件無效及解決方案

Swiper外掛 loop:true時引發繫結dom的click事件無效及解決方案

現象

在使用 swiper 這個庫的時候,一旦設定 loop:true 的時候,有時會遇到 dom 繫結事件無法觸發的問題。

原因

當loop模式下slides前後會clone若干個slide,從而形成一個環路,但是卻不會複製繫結在dom上的click事件。

解決

不要將click事件繫結在dom上,而是在new Swiper()中的on回撥函式中統一呼叫。

 

梨子

 let _this = this;    // 注意 new Swiper中的this指向的是swiper物件,因此要現在外面聲明當前元件的this

 new Swiper('.gameList-swiper-container', {

            loop: true,   // 引發問題的根源

            autoplay:{   disableOnInteraction: false  },

            on:{

                click(e){

                     if(!e.target.id) return;   // e.target.id 主要起傳參的作用

                     // console.log(e.target.id)

                     _this.props.changeGameData(e.target.id);

                }

            },

            slidesPerView: 4,

            spaceBetween: 20,

 });

 

<div className="swiper-container gameList-swiper-container">

              <div className="swiper-wrapper">

                            {gameList.map((item,index)=>(

                                <div key={index} className="swiper-slide clearfix">

                                        <h2>{item.gameTitle}</h2>

                                        <div className='slideItemBtn' id={[item.gameClass,item.type,item.gameId]}>進入遊戲</div>

                                </div>

                            ))}

                </div>

  </div>