携帯電話の携帯性、知能の向上、モバイル ネットワーク速度の高速化により、携帯電話は人々の生活に浸透しました。携帯電話の普及に伴い、マイクロ モール、モバイル Web ページ、モバイル APP などの
モバイル アプリケーションも急速に普及しました。モバイル アプリケーションは非常に人気があるため、今日はモバイル Web ページにデータを動的に読み込む方法について説明します。これは、前のページと次のページを備えた PC の Web ページのようなものでしょうか、それとも他の方法でしょうか。 。
実際には、携帯電話の画面は非常に小さく、クリックしにくく、ユーザーエクスペリエンスが非常に悪いため、PCのWebページのように前のページや次のページに移動することはできません。
spring mvc + HTML5 を使用してモバイル端末で下部スライドを実現する方法。ページネーション効果を使用してより多くのコンテンツを非同期で読み込む方法。
仕組み
ページが下にスライドし、ユーザーが上にスライドすると、zepto はイベントをリッスンして、さらにコンテンツを読み込むメソッドを実行します。このメソッドでは、jQuery の
$.ajax を使用して Web サーバーへの非同期リクエストを開始し、Web サーバーはデータをクエリして処理し、結果を
$.ajax に返します。ページ側 返されたデータを受信した後、データが分析および処理され、前のページのデータに追加されます。これが全体の仕組みです。
コードの実装
1) フロントエンド コード:
フロントエンド コードはオンラインでダウンロードできます:
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ page pageEncoding="UTF-8"%> <% String path = request.getContextPath(); %> <!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0"> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>滑动到底部加载下一页内容</title> <script src="<c:url value="/js/JQuery/jquery-1.10.0.min.js"/>"></script> <script src="<c:url value="/js/scroll/zepto.min.js"/>"></script> <style> table { width:100%; padding:0 15px; background:#fff; border-collapse: collapse; } table td { padding: 6px 0; width:33%; border-bottom:1px solid #e1e1e1; } tr td:nth-child(2) { text-align: center; } tr td img { width: 24px; vertical-align: middle; } tr td:last-child { text-align: right; } td>div:first-child { /*margin-bottom: -6px;*/ } td>div:last-child { color: #9C9C9C; } </style> </head> <body > <input type="hidden" name="pageNo" id="pageNo" value="1" /> <div class="white" > <table id="wrapper"> </table> </div> </body> <script> $(function(){ query('01');//第一次加载 }); function query(type) { alert(type); $.ajax({ url : "<%=path%>/query", data : { pageNo : $("#pageNo").val() }, cache : false, success : function(data) { loading=true; if(data==null) { $("#pageNo").val(parseInt($("#pageNo").val())-1); }else { var content=""; if(type=="00") { if(data.length==0) { $("#pageNo").val(parseInt($("#pageNo").val())-1); return ""; } for(var i=0;i<data.length;i++) { content=content + '<tr>' + '<td><div>'+data[i].id+'</div><div>'+data[i].time+'</div></td>' + '<td>¥'+data[i].amount+'</td>' + '</tr>'; } $("#wrapper").append(content); }else{ for(var i=0;i<data.length;i++) { content=content + '<tr>' + '<td><div>'+data[i].id+'</div><div>'+data[i].time+'</div></td>' + '<td>¥'+data[i].amount+'</td>' + '</tr>'; } $("#wrapper").html(content); } } }, error : function(){ loading=true; $("#pageNo").val(parseInt($("#pageNo").val())-1); _alert("查询数据出错啦,请刷新再试"); } }); } var loading=false; Zepto(function($){ $(window).scroll(function(){ if(($(window).scrollTop()+$(window).height()>$(document).height()-10)&&loading){ loading=false; $("#pageNo").val(parseInt($("#pageNo").val())+1); query("00"); } }); }) var ua = navigator.userAgent.toLowerCase(); if (/android/.test(ua)) { $('.date>div>img:last').css({"margin-left":"-25px"}); } </script> </html>
2)。
バックエンドコードポイント ページに入る初期化メソッドインデックスと非同期データクエリメソッドクエリの具体的なコードは次のとおりです:
Webコントローラーコード:
package com.test.web.controller; import java.util.ArrayList; import java.util.List; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.test.web.dto.DataDto; /** * 测试控制器 * * @author smile2014 * */ @Controller public class TestController { /** * * @return */ @RequestMapping("/") public String index() { return "test"; } /** * 查询订单列表 * * @param model * @param openId * 用户授权Id * @return * @throws Exception */ @RequestMapping(value = { "/query" }) @ResponseBody public Object query(Model model, Integer pageNo) throws Exception { System.out.println("pageNo="+pageNo); if (pageNo == null) { pageNo = 1; } List<DataDto> datas = new ArrayList<DataDto>(); for (int i = pageNo * 15; i < (pageNo + 1) * 15; i++) { DataDto data = new DataDto("10000" + i, "10:" + i, "17." + i); datas.add(data); } System.out.println("datas="+datas); return datas; } }
data dtoコード:
package com.test.web.dto; /** * 数据dto * * @author smile2014 * */ public class DataDto { private String id; private String time; private String amount; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getTime() { return time; } public void setTime(String time) { this.time = time; } public DataDto(String id, String time, String amount) { super(); this.id = id; this.time = time; this.amount = amount; } public String getAmount() { return amount; } public void setAmount(String amount) { this.amount = amount; } }
ページエフェクト
最初にページに入ったときのコンテンツ:
初めてスライドアップして読み込まれるコンテンツ:
によってロードされたコンテンツ上にスライドして 2 回目 最後にスライド:
上記は、モバイル端末の下部にあるさらに多くのコンテンツのスライドアップと非同期読み込みを実現する Spring MVC + HTML5 のコンテンツです。 、PHP 中国語 Web サイト (www.php.cn) に注意してください。