解決 swiper插件 嵌入 iframe 不能滑動問題

iframe裏是另外一個網頁,因此swiper檢測不到內頁的事件。css

方法一:直接設置樣式  pointer-events: none; 但iframe裏面全部事件將不能點擊包括 a連接數組

 

方法二:本身動手寫內頁事件檢測,而後改變swiper,這個必定是在js的同源策略下才能進行。直接上代碼...app

var self = this;
            var isMove,pageX,poor,moveArr;
            var iframe = document.querySelector('#myiframe');
            var wrap = $('#shebao').closest('.swiper-wrapper');
            var num ;

            iframe.onload = function(){
                var doc = iframe.contentWindow.document;
                self.height = $('#shebao').parent().height();

                doc.addEventListener("touchstart",function(e){
                    isMove = true;
                    moveArr = [];
                    pageX = e.targetTouches[0].pageX;
                    moveArr.unshift(pageX);
                    //獲取的transform值,matrix(1, 0, 0, 1, -1280, 0)
                    num = wrap.css('transform').split(',')[4]; 
                });
                doc.addEventListener("touchmove",function(e){
                    if(!isMove) return;
                    e.preventDefault();
                    
                    /*大概是iframe的緣由,touch事件在移動的時候會產生兩條不同的數據,從而致使在滑動的時候產生抖動現象。
                      從而添加一個數組moveArr進行當前值和歷史值進行對比,去掉多餘數據
                    */
                    //當往左滑的時候,
                    if(pageX > e.targetTouches[0].pageX){
                        //歷史值應該大於當前值,不然return
                        if(moveArr[0] < e.targetTouches[0].pageX){
                            return;
                        }
                    }
                    //當右滑的時候,
                    if(pageX < e.targetTouches[0].pageX){
                        //歷史值應該小於當前值,不然return
                        if(moveArr[0] > e.targetTouches[0].pageX){
                            return;
                        }
                    }
                    //往數組頭部插入數據
                    moveArr.unshift(e.targetTouches[0].pageX);
                    poor = pageX - e.targetTouches[0].pageX;
                    wrap.css('transform','translate3d('+(num-poor)+'px,0px,0px)');
                })

                doc.addEventListener("touchend",function(e){
                    isMove = false;
                    poor = pageX - e.changedTouches[0].pageX;

                    //當移動超過設定值後進行swiper的上一頁下一頁操做
                    if(Math.abs(poor)>50){
                        if(poor < 0 ){
                            window.pages.slidePrev();
                        }else{
                            window.pages.slideNext();
                        }
                    }else{
                        //復原當前位置
                        wrap.css('transform','translate3d('+num+'px,0px,0px)');
                    }
                    
                });
            }
        }
相關文章
相關標籤/搜索