在上一个案例中用的ajax加载html片段实现导航的切换,这次的这个案例用同样的方法却不是很好实现。
案例:在一个导航栏中,实现点击导航出现不同的选择区域,而且每个页面都有下拉分页异步刷新的效果。如图:
图1
图2
图3 图4
上图中,图2和图4都有下拉分页异步刷新的效果,也就是只要有数据,我们可以一直下拉一直加载数据出来,在前面的《jquery.lazyload.min和jquery-jtemplates在Ajax加载页面的应用》这篇博客里面讲到了下拉分页异步刷新的实现方法。
如果我们这次还是使用ajax异步加载html片段的方法,会发现当我们切换导航的时候,图2上半部分可以加载出来,图4是图2下拉分页的下半部分却加载不出来而显示的是空白的,即使在图2的html片段里面引用了下拉分页的JS同样还是显示不出来。然后我觉得,可能是ajax异步加载html片段只能加载静态的数据而不好加载动态刷新的数据,不然也不是只加载出来了一部分。后来用了另外一种方法实现了html片段的加载。
主页面HTML的部分代码:
<body> <div class="teBuyNav"> <ul> <li class="cur" onclick="temp(0);$(this).addClass('cur');">特卖</li> <li class="" onclick="temp(1);$(this).addClass('cur');">用品</li> <li class="" onclick="temp(2);$(this).addClass('cur');">玩具</li> <li class="" onclick="temp(3);$(this).addClass('cur');">居家</li> <li class="" onclick="temp(4);$(this).addClass('cur');">食品</li> </ul> </div> <div class="main" id="temp"> //需要替换的Div <div class="promotion"> <div class="flashBuy"> <div class="box" onclick="window.location='teBuyList.html'"> <h3>限时秒杀</h3> <p>多梅西宽口PP奶瓶</p> <div class="price"> <h1><b>¥</b>88.8</h1> <p>抢购中</p> </div> <div class="showTime"><span>距离结束</span><input type="text" id="time_h">:<input type="text" id="time_m">:<input type="text" id="time_s"></div> <img src="../images/tebuy/ms.png" alt="" /> </div> </div> <div class="marketing"> <div class="w50" onclick="window.location='teBuyListTwo.html'"> <div class="box btLine"> <h3 style="color:#f18c1a">新品首发</h3> <p>育儿推荐爆款</p> <img src="../images/tebuy/p1.png" alt="" /> </div> </div> <div class="w50" onclick="window.location='teBuyListTwo.html'"> <div class="box btLine"> <h3 style="color:#ec6b42">最热门</h3> <p>多款遥控卡通车</p> <img src="../images/tebuy/p2.png" alt="" /> </div> </div> <div class="w50" onclick="window.location='teBuyListTwo.html'"> <div class="box"> <h3 style="color:#e95072">超值限量</h3> <p>精品乳制品</p> <img src="../images/tebuy/p3.png" alt="" /> </div> </div> <div class="w50" onclick="window.location='teBuyListTwo.html'"> <div class="box"> <h3 style="color:#4a64ae">海外优品</h3> <p>营养又好吃</p> <img src="../images/tebuy/p4.png" alt="" /> </div> </div> </div> <br style="clear:both;" /> </div> <!-- goodShow end --> <div class="swiper-pagination2"></div> </div>
<div class="tebuyTit"><h1><span></span>精品特卖</h1></div> <p style="display:none"> <textarea id="Template-Items" rows="0" cols="0" > <!-- // jquery.lazyload.min和jquery-jtemplates里面的语法,实现图2的下拉分页 {#foreach $T.Items as apple} <div class="saleBar"> <div class="pic"><img class="lazy" src="{$T.apple.Img}" alt="" /></div> <div class="txt"><h2 class="nam">{$T.apple.Name}</h2> <span class="dat">剩<b>{$T.apple.days}</b>天</span><br style="clear:both;"></div> </div> {#/for} --> </textarea> </p> <!-- Output elements --> <div id="Items" class="Content"> </div> <div class="loading"><img src="../images/preloader.gif" alt="" /></div> </div> <!--}}main--> </body>
JS代码如下:
<script> function temp(a){ if(a==0){ $("#temp").load('tempIndex.html'); $(".teBuyNav li").removeClass("cur"); } if(a==1){ $("#temp").load('tempClass.html'); $(".teBuyNav li").removeClass("cur"); } if(a==2){ $("#temp").load('tempClass.html'); $(".teBuyNav li").removeClass("cur"); } if(a==3){ $("#temp").load('tempClass.html'); $(".teBuyNav li").removeClass("cur"); } if(a==4){ $("#temp").load('tempClass.html'); $(".teBuyNav li").removeClass("cur"); } }
</script>
运用load()方法将id=temp的Div里面的内容换成html片段,即tempIndex.html和tempClass.html片段。
tempIndex.html代码如下:
<meta charset="utf-8">
<script> $(function() { //set template and process $("#Items").setTemplateElement("Template-Items").processTemplateURL("index.json"); }); //next page load $(function(){ $(window).scroll(function(){ // 当滚动到最底部以上100像素时, 加载新内容 if ($(document).height() - $(this).scrollTop() - $(this).height()<10){ loadMore(); } }); }); $(function() { $("img").lazyload({ placeholder : "../images/preloader.gif", event : "click" }); }); function loadMore(){ $.ajax({ type: "post", contentType: "application/json", url: "index.json", beforeSend: function () { $(".loading").show(); }, success: function (data) { $("#Items").append("<div class='more'></div>"); var lastDiv = $(".more:last")//chose last div has class more $(lastDiv).setTemplateElement("Template-Items").processTemplateURL("index.json"); }, complete: function () { $(".loading").hide(); }, error: function (data) { console.info("error: " + data.responseText); } }); } $(function() { $("img.lazy").lazyload({ effect : "fadeIn" }); }); </script><div class="promotion"> <div class="flashBuy"> <div class="box" onclick="window.location='teBuyList.html'"> <h3>限时秒杀</h3> <p>多梅西宽口PP奶瓶</p> <div class="price"> <h1><b>¥</b>88.8</h1> <p>抢购中</p> </div> <div class="showTime"><span>距离结束</span><input type="text" id="time_h">:<input type="text" id="time_m">:<input type="text" id="time_s"></div> <img src="../images/tebuy/ms.png" alt="" /> </div> </div> <div class="marketing"> <div class="w50" onclick="window.location='teBuyListTwo.html'"> <div class="box btLine"> <h3 style="color:#f18c1a">新品首发</h3> <p>育儿推荐爆款</p> <img src="../images/tebuy/p1.png" alt="" /> </div> </div> <div class="w50" onclick="window.location='teBuyListTwo.html'"> <div class="box btLine"> <h3 style="color:#ec6b42">最热门</h3> <p>多款遥控卡通车</p> <img src="../images/tebuy/p2.png" alt="" /> </div> </div> <div class="w50" onclick="window.location='teBuyListTwo.html'"> <div class="box"> <h3 style="color:#e95072">超值限量</h3> <p>精品乳制品</p> <img src="../images/tebuy/p3.png" alt="" /> </div> </div> <div class="w50" onclick="window.location='teBuyListTwo.html'"> <div class="box"> <h3 style="color:#4a64ae">海外优品</h3> <p>营养又好吃</p> <img src="../images/tebuy/p4.png" alt="" /> </div> </div> </div> <br style="clear:both;" /> </div> <!-- goodShow end --> <div class="tebuyTit"><h1><span></span>精品特卖</h1></div> <p style="display:none"> <textarea id="Template-Items" rows="0" cols="0" > <!--// jquery.lazyload.min和jquery-jtemplates里面的语法,实现图2的下拉分页
{#foreach $T.Items as apple} <div class="saleBar"> <div class="pic"><img class="lazy" src="{$T.apple.Img}" alt="" /></div> <div class="txt"><h2 class="nam">{$T.apple.Name}</h2> <span class="dat">剩<b>{$T.apple.days}</b>天</span><br style="clear:both;"></div> </div> {#/for} --> </textarea> </p> <!-- Output elements --> <div id="Items" class="Content"> </div> <div class="loading"><img src="../images/preloader.gif" alt="" /></div>
tempClass.html代码如下:
<script> $(function() { //set template and process $("#Items").setTemplateElement("Template-Items").processTemplateURL("teBuyListTwo.json"); }); //format SalesPrice function formatSalesPrice(date) { return date.replace('.','.<i>'); } //next page load $(function(){ $(window).scroll(function(){ // 当滚动到最底部以上100像素时, 加载新内容 if ($(document).height() - $(this).scrollTop() - $(this).height()<10){ loadMore(); } }); }); $(function() { $("img").lazyload({ placeholder : "../images/preloader.gif", event : "click" }); }); function loadMore(){ $.ajax({ type: "post", contentType: "application/json", url: "teBuyListTwo.json", beforeSend: function () { $(".loading").show(); }, success: function (data) { $("#Items").append("<div class='more'></div>"); var lastDiv = $(".more:last")//chose last div has class more $(lastDiv).setTemplateElement("Template-Items").processTemplateURL("teBuyListTwo.json"); }, complete: function () { $(".loading").hide(); }, error: function (data) { console.info("error: " + data.responseText); } }); } $(function() { $("img.lazy").lazyload({ effect : "fadeIn" }); }); </script> <div class="classBanner"> <img src="../images/tebuy/food.jpg" alt="" /> </div> <div class="teBuyBar"> <ul> <li><div class="line"><div class="txt"><h1>休闲零食休闲零食休闲零食休</h1><p>好吃不贵</p></div><div class="pic"><img src="../images/tebuy/food1.jpg" alt="" /></div></div></li> <li><div class="line"><div class="txt"><h1>营养品</h1><p>呵护宝宝健康成长</p></div><div class="pic"><img src="../images/tebuy/food2.jpg" alt="" /></div></div></li> <li><div class="line"><div class="txt"><h1>辅食</h1><p>环保健康</p></div><div class="pic"><img src="../images/tebuy/food3.jpg" alt="" /></div></div></li> <li><div class="line"><div class="txt"><h1>进口美食</h1><p>不知是鲜美</p></div><div class="pic"><img src="../images/tebuy/food4.jpg" alt="" /></div></div></li> <li style="clear:both"></li> </ul> </div> <!-- Templates --> <p style="display:none"> <textarea id="Template-Items" rows="0" cols="0" > <!--// jquery.lazyload.min和jquery-jtemplates里面的语法,实现图4的下拉分页 {#foreach $T.Items as apple} <div class="goodsList"> <ul> <li> <a href="#"><img class="lazy" src="{$T.apple.Img}" alt=""></a> <p><a href="#">{$T.apple.Name}</a></p> <p><span class="red"><i>¥</i>{formatSalesPrice($T.apple.SalesPrice)}</i></span><span class="oldPrice"><i>¥</i>{$T.apple.OldPrice}</span></p> </li> <li> <a href="#"><img class="lazy" src="{$T.apple.Img2}" alt=""></a> <p><a href="#">{$T.apple.Name2}</a></p> <p><span class="red"><i>¥</i>{formatSalesPrice($T.apple.SalesPrice)}</i></span><span class="oldPrice"><i>¥</i>{$T.apple.OldPrice}</span></p> </li> </ul> </div> {#/for} --> </textarea> </p> <!-- Output elements --> <div id="Items" class="Content"> </div> <div class="loading"><img src="../images/preloader.gif" alt="" /></div>
通过load()方法也能加载html片段而且能加载出图4的下拉分页效果,ajax的方法却不能加载出图4的下拉分页效果,这其中的原因也不是很清楚,姑且先拿load()方法用着吧。