blob: 09a3b14c189ea809c4af5f6f3749a61a8f9d9bcb [file] [log] [blame]
Olga Gerchikovd6536802021-01-12 04:15:341<!DOCTYPE html>
2<meta charset="utf-8">
3<title>ScrollTimeline current time algorithm</title>
4<link rel="help" href="https://wicg.github.io/scroll-animations/#current-time-algorithm">
5<script src="/resources/testharness.js"></script>
6<script src="/resources/testharnessreport.js"></script>
7<script src="/web-animations/testcommon.js"></script>
Blink WPT Botbac5e062021-08-10 17:04:448<script src="./testcommon.js"></script>
Olga Gerchikovd6536802021-01-12 04:15:349
10<body></body>
11
12<script>
13'use strict';
14
15promise_test(async t => {
16 const scroller = setupScrollTimelineTest();
17 const scrollerSize = scroller.scrollHeight - scroller.clientHeight;
18
19 const scrollTimeline = new ScrollTimeline({
20 scrollSource: scroller,
Olga Gerchikovd6536802021-01-12 04:15:3421 orientation: 'block',
22 scrollOffsets: [CSS.px(10), CSS.px(20), CSS.px(40), CSS.px(70), CSS.px(90)],
23 });
24
25 var offset = 0;
26 var w = 1 / 4; // offset weight
27 var p = 0; // progress within the offset
28
29 scroller.scrollTop = 10;
Blink WPT Botbac5e062021-08-10 17:04:4430 assert_percents_equal(scrollTimeline.currentTime, (offset + p) * w * 100,
31 "current time calculation when scroll = " + scroller.scrollTop);
Olga Gerchikovd6536802021-01-12 04:15:3432
33 p = (12 - 10) / (20 - 10);
34 scroller.scrollTop = 12;
35 await waitForNextFrame();
Blink WPT Botbac5e062021-08-10 17:04:4436 assert_percents_equal(scrollTimeline.currentTime, (offset + p) * w * 100,
37 "current time calculation when scroll = " + scroller.scrollTop);
Olga Gerchikovd6536802021-01-12 04:15:3438
39 offset = 1;
40 p = 0;
41 scroller.scrollTop = 20;
42 await waitForNextFrame();
Blink WPT Botbac5e062021-08-10 17:04:4443 assert_percents_equal(scrollTimeline.currentTime, (offset + p) * w * 100,
44 "current time calculation when scroll = " + scroller.scrollTop);
Olga Gerchikovd6536802021-01-12 04:15:3445
46 p = (35 - 20) / (40 - 20);
47 scroller.scrollTop = 35;
48 await waitForNextFrame();
Blink WPT Botbac5e062021-08-10 17:04:4449 assert_percents_equal(scrollTimeline.currentTime, (offset + p) * w * 100,
50 "current time calculation when scroll = " + scroller.scrollTop);
Olga Gerchikovd6536802021-01-12 04:15:3451
52 offset = 2;
53 p = 0;
54 scroller.scrollTop = 40;
55 await waitForNextFrame();
Blink WPT Botbac5e062021-08-10 17:04:4456 assert_percents_equal(scrollTimeline.currentTime, (offset + p) * w * 100,
57 "current time calculation when scroll = " + scroller.scrollTop);
Olga Gerchikovd6536802021-01-12 04:15:3458
59 p = (60 - 40) / (70 - 40);
60 scroller.scrollTop = 60;
61 await waitForNextFrame();
Blink WPT Botbac5e062021-08-10 17:04:4462 assert_percents_equal(scrollTimeline.currentTime, (offset + p) * w * 100,
63 "current time calculation when scroll = " + scroller.scrollTop);
Olga Gerchikovd6536802021-01-12 04:15:3464
65 offset = 3;
66 p = 0;
67 scroller.scrollTop = 70;
68 await waitForNextFrame();
Blink WPT Botbac5e062021-08-10 17:04:4469 assert_percents_equal(scrollTimeline.currentTime, (offset + p) * w * 100,
70 "current time calculation when scroll = " + scroller.scrollTop);
Olga Gerchikovd6536802021-01-12 04:15:3471
72 p = (80 - 70) / (90 - 70);
73 scroller.scrollTop = 80;
74 await waitForNextFrame();
Blink WPT Botbac5e062021-08-10 17:04:4475 assert_percents_equal(scrollTimeline.currentTime, (offset + p) * w * 100,
76 "current time calculation when scroll = " + scroller.scrollTop);
Olga Gerchikovd6536802021-01-12 04:15:3477
78 scroller.scrollTop = 90;
79 await waitForNextFrame();
Blink WPT Botbac5e062021-08-10 17:04:4480 assert_percents_equal(scrollTimeline.currentTime, 100,
81 "current time calculation when scroll = " + scroller.scrollTop);
Olga Gerchikovd6536802021-01-12 04:15:3482}, 'currentTime calculations when multiple scroll offsets are specified');
83
84promise_test(async t => {
85 const scroller = setupScrollTimelineTest();
86 const scrollerSize = scroller.scrollHeight - scroller.clientHeight;
87
88 var scrollTimeline = new ScrollTimeline({
89 scrollSource: scroller,
Olga Gerchikovd6536802021-01-12 04:15:3490 orientation: 'block',
91 scrollOffsets: [CSS.px(300), CSS.px(200), CSS.px(10)],
92 });
93
94 scroller.scrollTop = 250;
95 await waitForNextFrame();
Blink WPT Botbac5e062021-08-10 17:04:4496 assert_percents_equal(scrollTimeline.currentTime, 0,
97 "current time calculation when scroll = " + scroller.scrollTop);
Olga Gerchikovd6536802021-01-12 04:15:3498
99 scroller.scrollTop = 400;
100 await waitForNextFrame();
Blink WPT Botbac5e062021-08-10 17:04:44101 assert_percents_equal(scrollTimeline.currentTime, 100,
102 "current time calculation when scroll = " + scroller.scrollTop);
Olga Gerchikovd6536802021-01-12 04:15:34103
104 scrollTimeline = new ScrollTimeline({
105 scrollSource: scroller,
Olga Gerchikovd6536802021-01-12 04:15:34106 orientation: 'block',
Olga Gerchikov44d0f24b2021-04-22 01:30:19107 scrollOffsets: ['auto', CSS.px(400), CSS.px(200)],
Olga Gerchikovd6536802021-01-12 04:15:34108 });
109
110 scroller.scrollTop = 100;
111 await waitForNextFrame();
Blink WPT Botbac5e062021-08-10 17:04:44112 assert_percents_equal(scrollTimeline.currentTime, 12.5,
113 "current time calculation when scroll = " + scroller.scrollTop);
Olga Gerchikovd6536802021-01-12 04:15:34114
115 scrollTimeline = new ScrollTimeline({
116 scrollSource: scroller,
Olga Gerchikovd6536802021-01-12 04:15:34117 orientation: 'block',
118 scrollOffsets: [CSS.px(200), CSS.px(0), CSS.px(400)],
119 });
120
121 scroller.scrollTop = 200;
122 await waitForNextFrame();
Blink WPT Botbac5e062021-08-10 17:04:44123 assert_percents_equal(scrollTimeline.currentTime, 75,
124 "current time calculation when scroll = " + scroller.scrollTop);
Olga Gerchikovd6536802021-01-12 04:15:34125}, 'currentTime calculations when overlapping scroll offsets are specified');
126</script>