1 | <!DOCTYPE html> |
---|
2 | <html> |
---|
3 | <head> |
---|
4 | <meta http-equiv="Content-type" content="text/html; charset=utf-8"/> |
---|
5 | <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no"/> |
---|
6 | <meta name="apple-mobile-web-app-capable" content="yes"/> |
---|
7 | <title>Pull to refresh</title> |
---|
8 | |
---|
9 | <style type="text/css"> |
---|
10 | |
---|
11 | #pullToRefreshPanel { |
---|
12 | position: absolute; |
---|
13 | top: 0px; |
---|
14 | width: 100%; |
---|
15 | z-index: 100; |
---|
16 | font-weight: bold; |
---|
17 | overflow: hidden; |
---|
18 | background-color: #E4E7EE; |
---|
19 | padding-left: 20px; |
---|
20 | } |
---|
21 | |
---|
22 | #pullToRefreshPanel > div { |
---|
23 | position: inherit; |
---|
24 | bottom: 12px; |
---|
25 | padding-left: 22px; |
---|
26 | width: 100%; |
---|
27 | height: 100%; |
---|
28 | color: #6E8098; |
---|
29 | background-repeat: no-repeat; |
---|
30 | background-position: bottom left; |
---|
31 | } |
---|
32 | |
---|
33 | #pullToRefreshPanel > div > div { |
---|
34 | position: absolute; |
---|
35 | bottom: 4px; |
---|
36 | } |
---|
37 | |
---|
38 | .pullDownToUpdate > div { |
---|
39 | background-image: url('images/pull-arrow.png'); |
---|
40 | } |
---|
41 | |
---|
42 | .pullDownToUpdate > div > div:before { |
---|
43 | content: "Pull down to update"; |
---|
44 | } |
---|
45 | |
---|
46 | .releaseToUpdate > div { |
---|
47 | background-image: url('images/release-arrow.png'); |
---|
48 | } |
---|
49 | |
---|
50 | .releaseToUpdate > div > div:before { |
---|
51 | content: "Release to update"; |
---|
52 | } |
---|
53 | |
---|
54 | </style> |
---|
55 | |
---|
56 | <link rel="stylesheet" type="text/css" href="../themes/iphone/iphone.css"></link> |
---|
57 | <script type="text/javascript" src="../../../dojo/dojo.js" data-dojo-config="async: true, parseOnLoad: true"></script> |
---|
58 | <script type="text/javascript"> |
---|
59 | require([ |
---|
60 | "dojo/ready", |
---|
61 | "dojo/on", |
---|
62 | "dojo/dom", |
---|
63 | "dojo/dom-class", |
---|
64 | "dijit/registry", |
---|
65 | "dojox/mobile/parser", |
---|
66 | "dojox/mobile", |
---|
67 | "dojox/mobile/compat", |
---|
68 | "dojox/mobile/ScrollableView", |
---|
69 | "dojox/mobile/Heading", |
---|
70 | "dojox/mobile/RoundRect", |
---|
71 | "dojox/mobile/RoundRectList" |
---|
72 | ], function(ready, on, dom, domClass, registry){ |
---|
73 | ready(function(){ |
---|
74 | var pullToRefreshPanel = dom.byId("pullToRefreshPanel"); |
---|
75 | var topMessage = dom.byId("topMessage"); |
---|
76 | var scrollableView = registry.byId("sview"); |
---|
77 | var pullToRefreshPanelDisplayed = false; |
---|
78 | var refreshOnTouchEnd = false; |
---|
79 | var numberOfUpdates = 0; |
---|
80 | |
---|
81 | var displayPullToRefreshPanel = function() { |
---|
82 | pullToRefreshPanelDisplayed = true; |
---|
83 | pullToRefreshPanel.style.display="block"; |
---|
84 | }; |
---|
85 | |
---|
86 | var hidePullToRefreshPanel = function() { |
---|
87 | pullToRefreshPanelDisplayed = false; |
---|
88 | pullToRefreshPanel.style.display="none"; |
---|
89 | }; |
---|
90 | |
---|
91 | scrollableView.on("beforescroll", function(evt){ |
---|
92 | if(evt.beforeTop){ |
---|
93 | // display the pullToRefreshPanel panel if it is not |
---|
94 | if(!pullToRefreshPanelDisplayed){ |
---|
95 | displayPullToRefreshPanel(); |
---|
96 | } |
---|
97 | // resize the pullToRefreshPanel according to the scroll destination |
---|
98 | pullToRefreshPanel.style.height= evt.beforeTopHeight + "px"; |
---|
99 | pullToRefreshPanel.style.top= -evt.beforeTopHeight + "px"; |
---|
100 | }else{ |
---|
101 | // hide the pullToRefreshPanel panel if it is displayed |
---|
102 | if(pullToRefreshPanelDisplayed){ |
---|
103 | hidePullToRefreshPanel(); |
---|
104 | } |
---|
105 | } |
---|
106 | if(evt.beforeTopHeight > 80){ |
---|
107 | domClass.remove(pullToRefreshPanel, "pullDownToUpdate"); |
---|
108 | domClass.add(pullToRefreshPanel, "releaseToUpdate"); |
---|
109 | refreshOnTouchEnd = true; |
---|
110 | }else{ |
---|
111 | domClass.remove(pullToRefreshPanel, "releaseToUpdate"); |
---|
112 | domClass.add(pullToRefreshPanel, "pullDownToUpdate"); |
---|
113 | refreshOnTouchEnd = false; |
---|
114 | } |
---|
115 | }); |
---|
116 | |
---|
117 | scrollableView.on("touchend", function(evt){ |
---|
118 | // We're done scrolling: |
---|
119 | // - hide the pullToRefreshPanel if it is displayed |
---|
120 | // - perform refresh if specified |
---|
121 | if(pullToRefreshPanelDisplayed){ |
---|
122 | hidePullToRefreshPanel(); |
---|
123 | } |
---|
124 | if(refreshOnTouchEnd){ |
---|
125 | refreshOnTouchEnd = false; |
---|
126 | topMessage.innerHTML = "Content updated " + ++numberOfUpdates + " time !"; |
---|
127 | } |
---|
128 | }); |
---|
129 | |
---|
130 | }); |
---|
131 | }); |
---|
132 | </script> |
---|
133 | |
---|
134 | </head> |
---|
135 | <body style="visibility:hidden;"> |
---|
136 | <div id="sview" data-dojo-type="dojox.mobile.ScrollableView"> |
---|
137 | <h1 data-dojo-type="dojox.mobile.Heading" fixed="top">Pull to refresh</h1> |
---|
138 | <div id="pullToRefreshPanel" style="display: none;"> |
---|
139 | <div><div></div></div> |
---|
140 | </div> |
---|
141 | <div id="topMessage" data-dojo-type="dojox.mobile.RoundRect"> |
---|
142 | This page implements a demo of the "pull to refresh" feature that can be seen in iOS applications like Facebook. Touch the screen and pull down to reveal the feature... |
---|
143 | </div> |
---|
144 | <ul data-dojo-type="dojox.mobile.RoundRectList"> |
---|
145 | <li data-dojo-type="dojox.mobile.ListItem">Item 001</li> |
---|
146 | <li data-dojo-type="dojox.mobile.ListItem">Item 002</li> |
---|
147 | <li data-dojo-type="dojox.mobile.ListItem">Item 003</li> |
---|
148 | <li data-dojo-type="dojox.mobile.ListItem">Item 004</li> |
---|
149 | <li data-dojo-type="dojox.mobile.ListItem">Item 005</li> |
---|
150 | <li data-dojo-type="dojox.mobile.ListItem">Item 006</li> |
---|
151 | <li data-dojo-type="dojox.mobile.ListItem">Item 007</li> |
---|
152 | <li data-dojo-type="dojox.mobile.ListItem">Item 008</li> |
---|
153 | <li data-dojo-type="dojox.mobile.ListItem">Item 009</li> |
---|
154 | <li data-dojo-type="dojox.mobile.ListItem">Item 010</li> |
---|
155 | <li data-dojo-type="dojox.mobile.ListItem">Item 011</li> |
---|
156 | <li data-dojo-type="dojox.mobile.ListItem">Item 012</li> |
---|
157 | <li data-dojo-type="dojox.mobile.ListItem">Item 013</li> |
---|
158 | <li data-dojo-type="dojox.mobile.ListItem">Item 014</li> |
---|
159 | <li data-dojo-type="dojox.mobile.ListItem">Item 015</li> |
---|
160 | <li data-dojo-type="dojox.mobile.ListItem">Item 016</li> |
---|
161 | <li data-dojo-type="dojox.mobile.ListItem">Item 017</li> |
---|
162 | <li data-dojo-type="dojox.mobile.ListItem">Item 018</li> |
---|
163 | <li data-dojo-type="dojox.mobile.ListItem">Item 019</li> |
---|
164 | <li data-dojo-type="dojox.mobile.ListItem">Item 020</li> |
---|
165 | <li data-dojo-type="dojox.mobile.ListItem">Item 021</li> |
---|
166 | <li data-dojo-type="dojox.mobile.ListItem">Item 022</li> |
---|
167 | <li data-dojo-type="dojox.mobile.ListItem">Item 023</li> |
---|
168 | <li data-dojo-type="dojox.mobile.ListItem">Item 024</li> |
---|
169 | <li data-dojo-type="dojox.mobile.ListItem">Item 025</li> |
---|
170 | <li data-dojo-type="dojox.mobile.ListItem">Item 026</li> |
---|
171 | <li data-dojo-type="dojox.mobile.ListItem">Item 027</li> |
---|
172 | <li data-dojo-type="dojox.mobile.ListItem">Item 028</li> |
---|
173 | <li data-dojo-type="dojox.mobile.ListItem">Item 029</li> |
---|
174 | <li data-dojo-type="dojox.mobile.ListItem">Item 030</li> |
---|
175 | <li data-dojo-type="dojox.mobile.ListItem">Item 031</li> |
---|
176 | <li data-dojo-type="dojox.mobile.ListItem">Item 032</li> |
---|
177 | <li data-dojo-type="dojox.mobile.ListItem">Item 033</li> |
---|
178 | <li data-dojo-type="dojox.mobile.ListItem">Item 034</li> |
---|
179 | <li data-dojo-type="dojox.mobile.ListItem">Item 035</li> |
---|
180 | <li data-dojo-type="dojox.mobile.ListItem">Item 036</li> |
---|
181 | <li data-dojo-type="dojox.mobile.ListItem">Item 037</li> |
---|
182 | <li data-dojo-type="dojox.mobile.ListItem">Item 038</li> |
---|
183 | </ul> |
---|
184 | </div> |
---|
185 | </body> |
---|
186 | </html> |
---|