IE9下Swiper控件不能准确定位到指定页面问题的解决

来源:互联网 发布:淘宝上怎么换货流程 编辑:程序博客网 时间:2024/05/21 09:38

应用场景:

采用轮播控件对表格中的图片文件进行展示,当点击表格中的图片文件时,使用轮播控件(Swiper)显示指定的图片,同时,可以左右翻页,前后浏览所有的图片。

实现思路:

(1)使用JS创建Swiper的躯干(Swiper相当于灵魂,灵魂必须依附肉体才能起作用)。

    __createPreviewHtml: function(){    if($('#__sc1').length>0) return;    var html =     '<div id="__sc1" class="swiper-container" style="z-index:9999;">'     + '<a href="javascript:void(0);" id="__sc_closeBtn" class="closeBtn" title="close"> X </a>'    + '<div class="swiper-wrapper">   '    + '</div> '    + '<div class="swiper-pagination"></div>'    + '<div class="swiper-button-prev"></div>'    + '<div class="swiper-button-next"></div>'            + '</div>';    $(document.body).append(html);    $('#__sc_closeBtn').on('click',this.__hidePreviewBox);    }

(2)遍历表格中的图片文件,并塞入Swiper的躯干,获取点击图片文件的索引号(index),URL(通过文件ID唯一标识)。

        var index = 0;        var i = 0;        me._grid.findRow(function(row){                     var fileId2 = row.fileId;                var fileName2 = row.fileName.toLowerCase();                                if(fileName2 && imgReg.test(fileName2)==true){                              if(fileId == fileId2){                index = i;                }                                var picParam = me.fileService + "/preview?fileId=" + encodeURIComponent(fileId2);                var imgHtml = '<img src="' + picParam + '"/>';                 var $slide = $('<div class="swiper-slide">' + imgHtml + '</div>');                 $('.swiper-wrapper').append($slide);                 i++;                }        });                 if(typeof(mySwiper) != 'undefined'){        mySwiper.removeAllSlides();        }  

(3)创建Swiper控件,同时使用Swiper的slideTo(index)方法定位到指定的位置,显示图片。

        $(document).ready(function () {                 mySwiper = new Swiper ('#__sc1', {            paginationClickable: true,            initialSlide: 0,            observer: true,            observeParents: true,            direction: 'horizontal',            slidesPerView: 1,            loop: false,                        // 如果需要分页器            pagination: '.swiper-pagination',                        // 如果需要前进后退按钮            nextButton: '.swiper-button-next',            prevButton: '.swiper-button-prev',                        // 如果需要滚动条            scrollbar: null,            });   
           $('#__sc1').show();                                    mySwiper.slideTo(index); 
//$('.swiper-pagination span').eq(index).trigger('click'); });

问题:

在IE10和Firefox下工作正常,在IE9下不能正常定位,总是定位到第1页(图)。

分析:

通过调查,发现,IE9在处理隐藏DOM元素时和IE10有较大的区别。现有代码是先初始化Swiper,然后再显示Swiper的躯干。

试着将Swiper的躯干(DOM元素)先显示,然后再实例化。测试结果表明能正常定位到指定页面。可见,在IE9下,对隐藏DOM元素进行操作可能会存在一些问题,导致Swiper未能正常初始化。

解决:

先显示Swiper的躯干(DOM元素) ,然后再实例化Swiper。即第3段代码,show()方法在 new Swiper()方法之前。

注:

要兼容IE7,8,一定要使用Swiper版本2.x,3.x会有N多的问题,3.x版本主要兼容高版本浏览器和移动应用。

阅读全文
0 0
原创粉丝点击