Source code
Revision control
Copy as Markdown
Other Tools
<!DOCTYPE html>
<html>
  <head>
  <title>testcase</title>
  <meta charset="utf-8">
  <meta name="viewport" content="initial-scale=1,width=device-width">
  <script src="apz_test_utils.js"></script>
  <script src="apz_test_native_event_utils.js"></script>
  <script src="/tests/SimpleTest/EventUtils.js"></script>
  <script src="/tests/SimpleTest/NativeKeyCodes.js"></script>
  <script src="/tests/SimpleTest/paint_listener.js"></script>
  <style>
<style type="text/css">
* {
  padding:0;
  margin:0;
  box-sizing: border-box;
}
body{
  overflow: hidden;
  display: flex;
  align-items: center;
  padding: 50px 145px 0 50px;
}
#list {
  height: 500px;
  overflow-y: auto;
  border: 1px solid #ccc;
  width: 500px;
  scroll-snap-type: y mandatory;
}
#list li{
  scroll-snap-align: start;
}
#list input[type="checkbox"]{
  position:absolute;
  pointer-events: none;
  opacity:0;
}
#list input:checked + label::before{
  content: '';
  position: absolute;
  pointer-events: none;
  top: 0;
  right:0;
  z-index: 1;
  width: 100px;
  height: 50px;
  background-color: rgba(37, 155, 210, 1);
  transform: rotate(45deg);
  transform-origin: 118px 60px;
}
#list > ul {
  width: 100%;
}
#list li+li{
  border-top: 1px dashed #ccc;
}
#list li:last-child{
  border-bottom: 1px dashed #ccc;
}
#list li{
  position: relative;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  height: 70px;
}
#list label {
  height: 100%;
}
#list li:hover{
  background:#efefef;
}
</style>
</head>
<body>
<div id="list">
  <ul></ul>
</div>
<button id="btn">Scroll down</button>
</body>
<script type="text/javascript">
var list = document.getElementById('list');
for(let i = 0; i < 100; i++){
  var li = document.createElement('li');
  li.innerHTML = `<input type="checkbox" id="d-${i}">
    <label for="d-${i}">
     ${i}
    </label>
  `;
  list.firstElementChild.appendChild(li);
}
list.scrollTop = 0;
var btn = document.getElementById('btn');
btn.onclick = () => {
  list.scrollTop += 500;
}
async function test() {
  let wheelScrollTransformEndPromise = promiseTransformEnd();
  await promiseMoveMouseAndScrollWheelOver(list, 100, 100, -500);
  await wheelScrollTransformEndPromise;
  await promiseFrame();
  let scrollPromise = promiseScrollend(list);
  await promiseNativeMouseEventWithAPZAndWaitForEvent({
    type: "click",
    target: btn,
    offsetX: 10,
    offsetY: 10,
  });
  await scrollPromise;
  await promiseFrame();
  await promiseFrame();
  let listTop = list.scrollTop;
  await promiseNativeMouseEventWithAPZAndWaitForEvent({
    type: "click",
    target: list,
    offsetX: 50,
    offsetY: 50,
  });
  await promiseFrame();
  is(listTop, list.scrollTop, "list does not scroll when clicked");
}
waitUntilApzStable()
  .then(test)
  .then(subtestDone, subtestFailed);
</script>
</html>