OLD | NEW |
---|---|
(Empty) | |
1 <!DOCTYPE html> | |
2 <style> | |
3 .scroller { | |
4 height: 100px; | |
5 width: 100px; | |
6 overflow: auto; | |
majidvp
2017/06/28 15:52:38
ditto
smcgruer
2017/06/29 15:23:22
Done.
| |
7 } | |
8 | |
9 .content { | |
10 height: 500px; | |
11 width: 500px; | |
12 } | |
13 </style> | |
14 | |
15 <script src='../../../resources/testharness.js'></script> | |
16 <script src='../../../resources/testharnessreport.js'></script> | |
17 | |
18 <div id='scroller1' class='scroller'> | |
19 <div class='content'></div> | |
20 </div> | |
21 <script> | |
22 test(function() { | |
23 const scroller = document.querySelector('#scroller1'); | |
24 // For simplicity, we set the timeRange such that currentTime maps directly to | |
25 // the value scrolled. We have a square scroller/contents, so can just compute | |
26 // one edge and use it for inline and block. | |
27 const scrollerSize = scroller.scrollHeight - scroller.clientHeight; | |
28 | |
29 const blockScrollTimeline = new ScrollTimeline( | |
30 { scrollSource: scroller, timeRange: scrollerSize, orientation: 'block' }) ; | |
31 const inlineScrollTimeline = new ScrollTimeline( | |
32 { scrollSource: scroller, timeRange: scrollerSize, orientation: 'inline' } ); | |
33 | |
34 // Unscrolled, both timelines should read a currentTime of 0. | |
35 assert_equals(blockScrollTimeline.currentTime, 0); | |
36 assert_equals(inlineScrollTimeline.currentTime, 0); | |
37 | |
38 // Now do some scrolling and make sure that the ScrollTimelines update. | |
39 scroller.scrollTop = 50; | |
40 scroller.scrollLeft = 75; | |
41 | |
42 // As noted above, we have mapped timeRange such that currentTime should just | |
43 // be the scroll offset. | |
44 assert_equals(blockScrollTimeline.currentTime, 50); | |
45 assert_equals(inlineScrollTimeline.currentTime, 75); | |
46 }, 'currentTime calculates the correct time based on scrolled amount'); | |
47 </script> | |
48 | |
49 | |
50 <div id='scroller2' class='scroller'> | |
51 <div class='content' style='height: 1000px; width: 1000px;'></div> | |
52 </div> | |
53 <script> | |
54 test(function() { | |
55 // It is unfortunately difficult to calculate what scroll offset results in an | |
56 // exact currentTime. Scrolling is calculated in integers which allows for the | |
57 // possibility of rounding, and scrollbar widths differ between platforms | |
58 // which means it is not possible to ensure a divisible scroller size. | |
59 // | |
60 // Instead we make the scroller content big enough that a 1-pixel rounding | |
61 // difference results in a negligible difference in the output value. | |
62 | |
63 const scroller = document.querySelector('#scroller2'); | |
64 const scrollTimeline = new ScrollTimeline( | |
65 { scrollSource: scroller, timeRange: 100, orientation: 'block' }); | |
66 | |
67 // Mapping timeRange to 100 gives a form of 'percentage scrolled', so | |
68 // calculate where the 50% scroll mark would be. | |
69 const halfwayY = (scroller.scrollHeight - scroller.clientHeight) / 2; | |
70 scroller.scrollTop = halfwayY; | |
71 | |
72 assert_approx_equals(scrollTimeline.currentTime, 50, 0.5); | |
73 }, 'currentTime adjusts correctly for the timeRange'); | |
74 </script> | |
75 | |
76 <div id='scroller3' class='scroller' style='direction: rtl;'> | |
77 <div class='content'></div> | |
78 </div> | |
79 <script> | |
80 test(function() { | |
81 const scroller = document.querySelector('#scroller3'); | |
82 | |
83 // For simplicity, we set the timeRange such that currentTime maps directly to | |
84 // the value scrolled. We have a square scroller/contents, so can just compute | |
85 // one edge and use it for inline and block. | |
86 const scrollerSize = scroller.scrollHeight - scroller.clientHeight; | |
87 | |
88 const blockScrollTimeline = new ScrollTimeline( | |
89 { scrollSource: scroller, timeRange: scrollerSize, orientation: 'block' }) ; | |
90 const inlineScrollTimeline = new ScrollTimeline( | |
91 { scrollSource: scroller, timeRange: scrollerSize, orientation: 'inline' } ); | |
92 | |
93 // Unscrolled, both timelines should read a current time of 0 even though the | |
94 // X-axis will have started at the right hand side for rtl. | |
95 assert_equals(blockScrollTimeline.currentTime, 0); | |
96 assert_equals(inlineScrollTimeline.currentTime, 0); | |
97 | |
98 // The offset in the inline direction should be inverted. The block direction | |
99 // should be unaffected. | |
100 scroller.scrollTop = 50; | |
101 scroller.scrollLeft = 75; | |
102 | |
103 assert_equals(blockScrollTimeline.currentTime, 50); | |
104 assert_equals(inlineScrollTimeline.currentTime, scrollerSize - 75); | |
105 }, 'currentTime handles direction: rtl correctly'); | |
106 </script> | |
107 | |
108 <div id='scroller4' class='scroller' style='writing-mode: vertical-rl;'> | |
109 <div class='content'></div> | |
110 </div> | |
111 <script> | |
112 test(function() { | |
113 const scroller = document.querySelector('#scroller4'); | |
114 | |
115 // For simplicity, we set the timeRange such that currentTime maps directly to | |
116 // the value scrolled. We have a square scroller/contents, so can just compute | |
117 // one edge and use it for inline and block. | |
118 const scrollerSize = scroller.scrollHeight - scroller.clientHeight; | |
119 | |
120 const blockScrollTimeline = new ScrollTimeline( | |
121 { scrollSource: scroller, timeRange: scrollerSize, orientation: 'block' }) ; | |
122 const inlineScrollTimeline = new ScrollTimeline( | |
123 { scrollSource: scroller, timeRange: scrollerSize, orientation: 'inline' } ); | |
124 | |
125 // Unscrolled, both timelines should read a current time of 0 even though the | |
126 // X-axis will have started at the right hand side for vertical-rl. | |
127 assert_equals(blockScrollTimeline.currentTime, 0); | |
128 assert_equals(inlineScrollTimeline.currentTime, 0); | |
129 | |
130 // For vertical-rl, the X-axis starts on the right-hand-side and is the block | |
131 // axis. The Y-axis is normal but is the inline axis. | |
132 scroller.scrollTop = 50; | |
133 scroller.scrollLeft = 75; | |
134 | |
135 assert_equals(blockScrollTimeline.currentTime, scrollerSize - 75); | |
136 assert_equals(inlineScrollTimeline.currentTime, 50); | |
137 }, 'currentTime handles writing-mode: vertical-rl correctly'); | |
138 </script> | |
139 | |
140 <div id='scroller5' class='scroller' style='writing-mode: vertical-lr;'> | |
141 <div class='content'></div> | |
142 </div> | |
143 <script> | |
144 test(function() { | |
145 const scroller = document.querySelector('#scroller5'); | |
146 | |
147 // For simplicity, we set the timeRange such that currentTime maps directly to | |
148 // the value scrolled. We have a square scroller/contents, so can just compute | |
149 // one edge and use it for inline and block. | |
150 const scrollerSize = scroller.scrollHeight - scroller.clientHeight; | |
151 | |
152 const blockScrollTimeline = new ScrollTimeline( | |
153 { scrollSource: scroller, timeRange: scrollerSize, orientation: 'block' }) ; | |
154 const inlineScrollTimeline = new ScrollTimeline( | |
155 { scrollSource: scroller, timeRange: scrollerSize, orientation: 'inline' } ); | |
156 | |
157 // Unscrolled, both timelines should read a current time of 0. | |
158 assert_equals(blockScrollTimeline.currentTime, 0); | |
159 assert_equals(inlineScrollTimeline.currentTime, 0); | |
160 | |
161 // For vertical-lr, both axes start at their 'normal' positions but the X-axis | |
162 // is the block direction and the Y-axis is the inline direction. | |
163 scroller.scrollTop = 50; | |
164 scroller.scrollLeft = 75; | |
165 | |
166 assert_equals(blockScrollTimeline.currentTime, 75); | |
167 assert_equals(inlineScrollTimeline.currentTime, 50); | |
168 }, 'currentTime handles writing-mode: vertical-lr correctly'); | |
169 </script> | |
OLD | NEW |