<link href="js/laypage/1.3/skin/laypage.css" rel="stylesheet"/>
<script type="text/javascript" src="js/laypage/1.3/laypage.js"></script>
<script type="text/javascript" src="js/layer/2.1/layer.js"></script>
2、定义分页需要显示的地方,id为doctorDiv是分页要显示的地方
1 <div class="doctor_list">
2 <ul id="doctorUL">
3 <div style="clear: both"></div>
4 </ul>
5 <div style="clear: both"></div>
6 <div class="pages" id="doctorDiv">
7
8 </div>
9 </div>
3、使用ajax异步请求查询数据,并分页显示
1 <script type="text/javascript">
2
3 //定义全局变量记录页码信息
4 var globalDate = {}
5 //1页显示两条数据
6 globalDate.pageSize=2
7
8 $(function () {
9 //查询数据
10 search()
11
12 })
13
14
15 //查询数据
16 function search(date) {
17 var str = ""
18 $.ajax({
19 type: "post",
20 url: "<%=basePath%>mytlist.html",
21 dataType: "json",
22 async: true,
23 data: date,
24 success: function (data) {
25 if (data.result) {
26 var mydata = data.obj.list
27 for (var i = 0i <mydata.lengthi++) {
28 var info = mydata[i]
29 str += "<li>"
30 str += "<a onclick=" + "doctorDetail('" + info.id + "')" + ">"
31 //str+="<a href='mytdoctor_xq.html?id='"+info.id+">"
32 str += "<img src=" + info.photo + ">"
33 str += "<div class='yi_text'>"
34 str += "<h2>" + info.name
35 str += "<span>" + info.title + "</span>"
36 str += "</h2>"
37 str += "<h3>科室:" + info.department_one + "</h3>"
38 str += "<h3>"
39 str += "<em>评分:</em>"
40 str += "<span>"
41 if (info.total_score != null &&info.total_score != "" &&info.total_evaluate_num != null &&info.total_evaluate_num != "") {
42 var pingfen = info.total_score / info.total_evaluate_num //评分
43 var j
44 for (j=0j <pingfenj++) {
45 str += "<img src='images/pc/icon_031.png'>"
46 }
47 if(j<5){
48 for(var k=0k<5-jk++){
49 str += "<img src='images/pc/icon_032.png'>"
50 }
51 }
52 }
53 str += "</span>"
54 str += "</h3>"
55 str += "<h3>所在医院:" + info.hospital + "</h3>"
56 str += "<p>疾病擅长:" + info.skilful + "</p>"
57 str += "</div>"
58 str += "</a>"
59 str += "</li>"
60 }
61 $("#doctorUL").empty()
62 $("#doctorUL").append(str)
63 var page = data.obj.pages //总页数
64 var curr = data.obj.pageNum //当前页
65 laypage({
66 cont: 'doctorDiv', //分页需要显示的地方
67 pages: page,//总页数
68 curr: curr, //当前页
69 groups: 3,//连续显示分页数
70 skip: true, //是否开启跳页
71 first: '首页',
72 last: '尾页',
73 skin: 'molv', //加载内置皮肤,也可以直接赋值16进制颜色值,如:#c00
74 prev: '<', //若不显示,设置false即可
75 next: '>', //若不显示,设置false即可
76 jump: function (e, first) { //触发分页后的回调
77 if (!first) { //一定要加此判断,否则初始时会无限刷新
78 globalDate.pageNum = e.curr
79 search(globalDate)
80 }
81 }
82 })
83
84
85 } else {
86 //错误
87 console.log("错误")
88 }
89 }
90 })
91 }
92 </script>
4、最终效果
5、感觉laypage显示出来的页码有点扁,高度不够,所以稍微修改了一点css
1 <%--修改laypage的样式--%>
2 <style>
3 .laypage_main a, .laypage_main input, .laypage_main span {
4 height: 40px
5 line-height: 40px
6 }
7
8 .laypage_main button {
9 height: 40px
10 line-height: 40px
11 margin-left: 5px
12 padding: 0 10px
13 color: #666
14 }
15 </style>
实现一个可交互的动画大概有这么几种思路:在响应 GestureRecognizer 的方法中实时更新 view 的状态, 在 GestureRecognizer 结束的时候创建动画完成后续的部分.
在 GestureRecognizer 开始的时候创建显式动画, 随着 Gesture 变化, 改变动画的 progress, 在 GestureRecognizer 结束之后完成动画.
在 GestureRecognizer 开始的时候创建隐式动画, 随着 Gesture 变化, 改变动画的 progress, 在 GestureRecognizer 结束之后完成动画.
注意 2 和 3 只有显式和隐式的区别.
对于简单的 view, 单一的动画 (比如 demo 中的这种, 线性移动一个简单的 view), 三种方法差别不大. 而对于复杂的 view (view 中嵌套多个 subView), 多个动画 (view 和 subview 都有各自的动画), 如果在不考虑可交互的前提下, 隐式的动画已经可以满足需求, 那么方法 3 可能会比方法 1 和 2 简洁得多, 本文将对方法 3 进行讲解.
要实现方法 3, 首先要了解 CALayer 的几个属性: speed, timeOffset, beginTime. 对于这几个属性, Controlling Animation Timing 这篇教程图文并茂地给出了直观的解释, 必读, 这里只做简单介绍:
speed: 控制动画的速度, 比如设置为 1 (默认), 动画正常运行, 设置为 0 动画暂停, 设置为 -1 动画反向运行.
timeOffset: 控制动画在整个动画时间轴上的位置, 比如一个 3 秒的动画, timeOffset 为 1.5, layer 就会处于整个动画过程中间的那个状态.
beginTime: 动画的开始时间.
有了这些基础, 我们就可以着手实现了, 首先我们需要建立一个 CALayer 的 Category, 添加一些动画辅助代码:
- (void)gs_pauseAnimation {
self.speed = 0
self.timeOffset = 0
}
- (void)gs_recoverToDefaultState {
self.speed = 1
self.timeOffset = 0
self.beginTime = 0
}
- (void)gs_setTimeProgress:(CFTimeInterval)timeProgress {
self.timeOffset = timeProgress
}
- (void)gs_continueAnimationWithTimeProgress:(CFTimeInterval)timeProgress {
[self gs_recoverToDefaultState]
self.beginTime = [self convertTime:CACurrentMediaTime() fromLayer:nil] - timeProgress
}
- (void)gs_continueReverseAnimationWithTimeProgress:(CFTimeInterval)timeProgress animationDuration:(CFTimeInterval)duration {
[self gs_recoverToDefaultState]
self.beginTime = [self convertTime:CACurrentMediaTime() fromLayer:nil] - (duration - timeProgress)
self.timeOffset = duration
self.speed = -1
}
gs_pauseAnimation: 通过将 speed 设置为 0, 来暂停动画.
gs_recoverToDefaultState: 将 layer 的各个属性恢复到默认状态
gs_setTimeProgress: 在 gs_pauseAnimation 的基础上, 设置动画的时间进度.
gs_continueAnimationWithTimeProgress: 从 timeProgress 时间进度开始, 继续播放之前暂停了的动画
这里首先调用了 gs_recoverToDefaultState, 是为了让 convertTime:fromLayer: 得出正确的时间.
[self convertTime:CACurrentMediaTime() fromLayer:nil] 将当前系统时间转换到 layer 的时间上, 减去 timeProgress, 假设这是一个 3 秒的动画, timeProgress 为 1 秒, 则这条代码就表示 layer 的动画在一秒之前就已经开始, 所以动画将从运行到第 1 秒的状态开始继续播放.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)