fractional-scroll-area.html 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <!DOCTYPE html>
  2. <html class="reftest-wait">
  3. <meta charset="utf-8">
  4. <title>Fractional scroll area position / size</title>
  5. <style>
  6. body {
  7. margin: 0;
  8. }
  9. #scrollbox {
  10. width: 200px;
  11. overflow: hidden;
  12. background: red;
  13. }
  14. #scrolled-content {
  15. background: lime;
  16. box-sizing: border-box;
  17. border: solid black;
  18. border-width: 1px 0;
  19. }
  20. </style>
  21. <div id="scrollbox">
  22. <div id="scrolled-content"></div>
  23. </div>
  24. <script>
  25. function getFloatQueryParams(defaultValues) {
  26. let result = Object.assign({}, defaultValues);
  27. for (let chunk of location.search.substr(1).split("&")) {
  28. let parts = chunk.split("=");
  29. result[parts[0]] = parseFloat(parts[1]);
  30. }
  31. return result;
  32. }
  33. let params = getFloatQueryParams({
  34. top: 0,
  35. outerBottom: 100,
  36. innerBottom: 100,
  37. borderTop: 0,
  38. borderBottom: 0,
  39. scrollBefore: 0,
  40. scrollAfter: undefined,
  41. offsetAfter: undefined,
  42. });
  43. let scrollArea = document.getElementById("scrollbox");
  44. let scrolledContent = document.getElementById("scrolled-content");
  45. scrollArea.style.marginTop = params.top + "px";
  46. scrollArea.style.height = (params.outerBottom - params.top) + "px";
  47. scrolledContent.style.height = (params.innerBottom - params.top) + "px";
  48. scrollArea.scrollTop = 1;
  49. scrollArea.scrollTop = 2;
  50. scrollArea.scrollTop = params.scrollBefore;
  51. window.addEventListener("MozReftestInvalidate", function () {
  52. if (params.scrollAfter !== undefined) {
  53. scrollArea.scrollTop = params.scrollAfter;
  54. }
  55. if (params.offsetAfter !== undefined) {
  56. document.body.style.marginTop = params.offsetAfter + "px";
  57. }
  58. document.documentElement.className = "";
  59. });
  60. </script>