JS通过push方法动态添加swiper组件的slider

由于项目是从基于谷歌浏览器改版成基于IE浏览器,所以项目中基本上是以jQuery来控制DOM,其中遇到了使用数组的push和jQuery的html方法来动态生成页面(主要是一个个运单),页面中引用了swiper,再通过循环生成后台数据所反的相对应个数的slider,但是发现在页面载入后,组件并没有生效,后来终于通过一系列搜索找到了解决的方法,也是痴呆了TAT。

首先需要在页面引入swiper的js文件和css文件
<link rel="stylesheet" href="../../lib/css/swiper-3.4.2.min.css"/>
<script type="text/javascript" src="../../lib/jquery-2.0.1.min.js"></script>
<script type="text/javascript" src="../../lib/swiper-3.4.2.min.js"></script>
在HTML中为动态生成的内容准备一个div容器

<section>标签中就是装的动态生成的内容。

<section class="scene-content">
</section>
接着在自己的js代码中开始数组的push方法

这里是生成所有订单的方法,其中涉及到swiper的push方法在相关图片注释处。

var isCheck //标记用户是否点击了安检按钮
function fullOrder(data) {// 填充内容的方法
    isCheck = sessionStorage.getItem('isCheck')//点击了安检按钮后会存入session
    if(isCheck == undefined) {
        for(var k = 0; k < data.length; k++) {
            if(data[k].status == 2) { //后台数据2代表运单正在安检
                isCheck = "true"
                break;
            } else {
                isCheck = 'false'
            }
        }
    } else {}
    var html = []; //定义一个存内容的数组变量
    for(var i = 0; i < data.length; i++) {//循环后台数据返回的单子个数
        //0说明运单在等待安检 2说明正在安检 3说明运单暂停中
        //五花八门的样式真的是害死人啊!!!!!当时写这个写的我都快哭了
        if(data[i].status == 0 && isCheck == "false" || data[i].status == 3 && isCheck == "false") {
            html.push('<div class="waybill waybill-wait">')
        } else if(data[i].status == 0 && isCheck == "true") {
            html.push('<div class="waybill waybill-gray">')
        } else if(data[i].status == 2 && isCheck == "true") {
            html.push('<div class="waybill waybill-proceed">')
        } else if(data[i].status == 3 && isCheck == "true") {
            html.push('<div class="waybill waybill-gray">')
        }
        html.push('<div class="way-head">')
        if((data[i].status == 0 && isCheck == "false") || (data[i].status == 3 && isCheck == "false")) {
            html.push('<i class="circle cir-blue"></i>')
        } else if(data[i].status == 0 && isCheck == "true") {
            html.push('<i class="circle cir-gray"></i>')
        } else if(data[i].status == 3 && isCheck == "true") {
            html.push('<i class="circle cir-gray"></i>')
        } else if(data[i].status == 2) {
            html.push('<i class="circle cir-orange"></i>')
        }
        html.push('<div class="one-tier">')
        html.push('<h4 class="way-tit black-tit">运单号 ' + data[i].orderId + '</h4>')
        html.push('<span class="label green">件数: ' + data[i].num + '</span>')
        html.push('</div>')
        html.push('<p class="two-tier">')
        if(data[i].status == 0 || data[i].status == 3) {
            html.push('<span class="status wait-gray">等待安检...</span>')
        } else if(data[i].status == 2) {
            html.push('<span class="status wait-gray">安检进行中...</span>')
        }
        html.push('<span class="gray-tit creat-time">创建时间:')
        html.push('<i class="black time-font">' + compareNull(data[i].createTime, 2).substring(0, 11) + '</i>')
        html.push('</span>')
        html.push('</p>')
        html.push('</div>')
        // 内容
        html.push('<div class="way-content">')
        html.push('<div class="way-list">')
        html.push('<ul>')
        html.push('<li><p class="gray-tit">航班号 <span class="black gap"> ' + data[i].flightId + '</span></p>')
        html.push('</li>')
        html.push('<li><p class="gray-tit">承运人 <span class="black gap">' + data[i].carryPerson + '</span></p>')
        html.push('</li>')
        html.push('<li><p class="gray-tit">通道号 <span class="black gap">' + compareNull(data[i].channelId, 1) + '</span></p>')
        html.push('</li>')
        html.push('<li><p class="gray-tit">代理人 <span class="black gap">' + compareNull(data[i].proxyPerson, 1) + '</span></p>')
        html.push('</li>')
        html.push('</ul>')
        html.push('<div class="way-plan">')
        html.push('<div class="plan-part">')
        html.push('<p class="plan-node">')
        html.push('<i class="spot green-spot"></i>')
        html.push('<span class="gray-tit" style="margin-right: 16px;">运单开始时间</span>')
        html.push('<span class="black">' + compareNull(data[i].startTime, 2) + '</span>')
        html.push('</p>')
        html.push('<p class="plan-node">')
        html.push('<i class="spot red-spot"></i>')
        html.push('<span class="gray-tit" style="margin-right: 16px;">最近暂停时间</span>')
        html.push('<span class="black">' + compareNull(data[i].lastPauseTime, 2) + '</span>')
        html.push('</p>')
        html.push('</div>')
        html.push('</div>')
        html.push('</div>')
        //相关图片
        html.push('<div class="relation-img">')
        html.push('<p class="gray-tit">相关图片</p>')
        html.push('<div class="img-list">')
        html.push('<div class="swiper-container">')
        html.push('<div class="swiper-wrapper" style="height: 100px;">')
        //这里是根据后台不同单子对应的不同图片个数进行slider个数的push
        for(var j = 0; j < data[i].photos.length; j++) {
            html.push(
                '<div class="swiper-slide" style="width: 150px">' +
                '<img src="' + data[i].photos[j].photoPath + '" width="90%" style="border-radius: 5px;height: 100px;"  onclick="preImg(this)">' +
                '</div>'
            )
        }
        html.push('</div>')
        //swiper按钮
        html.push('<div class="swiper-button-next"></div>')
        html.push('<div class="swiper-button-prev"></div>')
        html.push('</div>')
        html.push('</div>')
        html.push('</div>')
        html.push('</div>')

        html.push('<div class="hint">')
        if(data[i].status == 2 && isCheck == "true") {
            html.push('<div class="hint-content">')
            html.push(' <p class="hint-tit"><i class="hint-icon"></i>提示</p>')
            html.push('<p class="hint-txt">将货物按照规范搬到传送带上,并开启传送带开关必须结束当前正在安检的运单后,才可以开始下一单')
            html.push('</p>')
            html.push('</div>')
        }
        html.push('</div>')
        html.push('<div class="way-footer">')
        if(data[i].status == 0 && isCheck == "false") {
            html.push('<div class="start-btn fot-blue" onclick="checkSecurity(this)" data-orderId="' + data[i].orderId + '">开始安检</div>')
        } else if(data[i].status == 2 && isCheck == "true") {
            html.push('<div class="switch" onclick="stopSeurity(this)"  data-orderId="' + data[i].orderId + '"><span>暂停</span></div>')
            html.push('<div class="footer-btn fot-orange" onclick="showAlert(this)" data-orderId="' + data[i].orderId + '">结束安检</div>')
        } else if(data[i].status == 3 && isCheck == "true") {
            html.push('<div class="orange-switch" onclick="showDialogAlertGo()"><span>开始</span></div>')
            html.push('<div class="footer-btn fot-gray">结束安检</div>')
        } else if(data[i].status == 3 && isCheck == "false") {
            html.push('<div class="orange-switch" onclick="checkSecurity(this)" data-orderId="' + data[i].orderId + '"><span>开始</span></div>')
            html.push('<div class="footer-btn fot-gray">结束安检</div>')
        } else if(data[i].status == 0 && isCheck == "true") {
            html.push('<div class="start-btn fot-gray" onclick="showDialogAlertGo()">开始安检</div>')
        }
        html.push('</div>')
        html.push('</div>')
        html.push('</div>')
    }
    //填充内容
    $('.scene-content').html(html.join(''))

接下来初始化swiper,然后在请求后台数据成功后的回调函数调用fullOrder方法

//初始化swiper
$(function() {
 var mySwiper = new Swiper('.swiper-container', {
            slidesPerView: 3,
            prevButton: '.swiper-button-prev',
            nextButton: '.swiper-button-next',
            })
})

// 初始化订单
function loadOrder() {
    $.ajax({
        type: "GET",
        url: Utils.url + "/order/getOrder_site" + '?timestamp=' + new Date().getTime(),
        contentType: "application/json;charset=UTF-8",
        dataType: 'json',
        success: function(data) {
            $('el-loading-mask').hide()
            fullOrder(data)         
        }
    })
}

结果发现swiper根本没有被调用到,默默的mark一下,在图片多的情况下判断swiper是否成功初始化看左右按钮的颜色是否一深一浅就知道了。
正确初始化swiper的方法应该是在fullOrder方法之后或者是在fullOrder里的element.html()之后。由于swiper是需要先初始化再执行,但这里是先生成swiper,所以需要在生成swiper之后再初始化

$('.scene-content').html(html.join('')) //填充之后初始化swiper
    var mySwiper = new Swiper('.swiper-container', {
        slidesPerView: 3,
        prevButton: '.swiper-button-prev',
        nextButton: '.swiper-button-next',
        observer: true, //修改swiper自己或子元素时,自动初始化swiper
        observeParents: true, //修改swiper的父元素时,自动初始化swiper
        onSlideChangeEnd: function(swiper) {
            swiper.update();
            // mySwiper.startAutoplay();
            // mySwiper.reLoop();
        }
    })

只有这样在页面加载完后swiper才会被调用成功哒。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,914评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,935评论 2 383
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,531评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,309评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,381评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,730评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,882评论 3 404
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,643评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,095评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,448评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,566评论 1 339
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,253评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,829评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,715评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,945评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,248评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,440评论 2 348

推荐阅读更多精彩内容