h5 轮播图的接入

不管是app端,还是web端,轮播图是永远少不了的,swiper是当前最流行的,使用最多的一个插件。
但是它有个问题,当我们请求完数据,直接在html中使用angularJs的for循环去创建轮播图,就会很卡,页面加载有问题,所有在这里我使用官方的appSlide来循环添加轮播图的图片。

首先就是导入js和css文件:

<link href="css/swiper-3.3.1.min.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="js/swiper-3.3.1.min.js"></script>

初始化swiper:

var swiper = new Swiper('.swiper-container-ad', {
        pagination: '.swiper-pagination',
        paginationClickable: true,
        loop: true
    });
有问题的方式(使用ng-repeat直接循环,swpier循环有问题):
<div id="swiperAd" class="swiper-container">
    <div class="swiper-wrapper" ng-repeat="row in lists">
        <li class="swiper-slide">
             <a href="#" target="_blank"><img class="picture" style="vertical-align:top;" src="{{row.imageUrl}}" width="100%"></a>
        </li>
    </div>
    <div style="text-align:center" class="swiper-pagination"></div>
</div>

解决方法一:

使用函数式编程的实体库Underscore.js,具体用法如下,先导入js文件

<script type="text/javascript" src="js/underscore-min.js"></script>

然后在html中写上你想要的UI样式,body后面写上你适配好的div控件,body及script内容如下:

<body>
    <div class="swiper-container swiper-container-new swiper-container-horizontal">
      <div id="swiperwrapper" class="swiper-wrapper">
      </div>
    </div>
</body>
<script type="text/template" id="templateSwiper">
    <li class="swiper-slide">
        <a href="http://detail.koudaitong.com/show/goods?alias=<%=alias%>"><img class="picture" style="width:100%;vertical-align:top;" src="<%=pic_url%>"/></a>
    </li>
</script>

在js中,我们将通过循环,将每一个model传进来

for(var i = 0; i < response.response.items.length; i++) {
    $scope.item = response.response.items[i];
    swiper.appendSlide(_.template($('#templateSwiper').html())($scope.item));
}

注:其中swiper是指初始化创建的对象,在html中,templateSwiper传入的是model,通过<%=属性%>来取值。

解决方法二:

这个方法适合不是很复杂的轮播图(我这里只轮播图片),通过html文本的循环添加到swiper中即可,代码如下:

// html中
<div id="images" class="swiper-container"></div>

// js中
$scope.images = [];
$scope.images.push("<div id=\"swiperimgs\" class=\"swiper-wrapper\">");
for(var i = 0; i < response.body.product_images.length; i++){
    $scope.images.push("<div class=\"swiper-slide\"><img src=\"" + response.body.product_images[i] + "\" style=\"vertical-align:top;max-height:400px;\" width=\"100%\"/></div>");
}                   
$scope.images.push("</div>");
if(response.body.product_images.length > 1)
    $scope.images.push("<div style=\"text-align:right\" class=\"swiper-pagination\"></div>");

$("images").innerHTML = $scope.images.join("");

解决方法三:

通过数值替换来达到创建轮播的目的:

// 定义好展示的轮播图位置
<div class="swiper-container" style="padding:2px;">
    <div id="swiperwrapper" class="swiper-wrapper"></div>
</div>
// 将我们需要展示的div写好,所有需要赋值的地方,使用#1#依次标记
<div id="swiperSlide" style="display: none;">
    <div class="swiper-slide">
        <div style="width:100%;background-color: white;">
            <img src="#1#" align="top" width="100%" height="90px" />
            <div style="position:relative;z-index: 3;margin-top:-10px;padding:2px;">
                <img style="border-radius:100%;float: left;" src="#2#" width="20px" height="20px" />
                <div onclick="angular.element(document.querySelector('[ng-controller=group]')).scope().addfavorite(this, #3#)"><img style="float: right;" src="img/5.png" width="21px" height="17px" /></div>
                <div style="color:#f7528c;float: right;"><span style="font-size: 9px;">#4#</span></div>
                <div style="clear: both;"></div>
            </div>
            <div style="color:#606060; font-size: 12px;padding:2px;height:35px;">#5#</div>
        </div>
    </div>
</div>

// 然后在js中,请求结束时,通过循环添加和替换
$("#swiperwrapper").html(""); // 先清空当前id中所有的html文本
for(var i = 0; i < response.body.array.length; i++){
    swiper.appendSlide($("#swiperSlide").html();.replace("#1#", response.body.array[i].post_image).replace("#2#", response.body.array[i].user_avatar).replace("#3#", response.body.array[i].post_guid).replace("#4#", response.body.array[i].post_favorite).replace("#5#", response.body.array[i].post_name));
}

注,这里使用到了jquery的一点语法,需要导入jquery的js文件,以上就是我所能使用的三种解决方法。

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

推荐阅读更多精彩内容