דברים שרואים מכאן לא רואים בכלל
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

index.html 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1">
  6. <title>Eye of Beholder</title>
  7. <link href="/static/bootstrap/css/bootstrap.min.css" rel="stylesheet">
  8. <link rel="icon" href="/static/gfx/eye-horus.png">
  9. </head>
  10. <body data-bs-theme="dark">
  11. <div class="container-fluid text-center">
  12. <div class="row">
  13. <div class="col12">
  14. <video id="the-video" style="height:100vh; margin:0 auto" class="object-fit-contain" muted>
  15. <source id="vid-src" type="video/mp4" src=""/>
  16. </video>
  17. </div>
  18. </div>
  19. <div class="row">
  20. <div class="col12">
  21. <div id="the-ticker" class="marquee alert alert-warning h2 fw-bolder w100 opacity-50 text-nowrap" role="alert" style="direction:rtl; position:fixed; left:0; bottom:2rem; z-index:23">
  22. <h2 id="ticker-text" class="fw-bolder bg-danger text-white my-2 p-4">
  23. </h2>
  24. </div>
  25. </div>
  26. </div>
  27. </div>
  28. <script src="/static/js/config.js"></script>
  29. <script src="/static/js/jquery-3.7.1.min.js"></script>
  30. <script src="/static/js/jquery.marquee.min.js"></script>
  31. <script src="/static/bootstrap/js/bootstrap.bundle.min.js"></script>
  32. <script>
  33. function setTicker(ticker_text) {
  34. $(".marquee").marquee("destroy");
  35. $(".marquee").text(ticker_text);
  36. $(".marquee").marquee({
  37. "direction": "right",
  38. "duplicated": true,
  39. "speed": 69
  40. });
  41. }
  42. window.item_index = 0;
  43. function nextItem() {
  44. document.getElementById("vid-src").setAttribute('src', '/static/video/'+ITEMS[item_index].vid);
  45. document.getElementById("the-video").load();
  46. document.getElementById("the-video").play();
  47. setTicker(ITEMS[item_index].ticker);
  48. item_index = (item_index+1)%ITEMS.length;
  49. }
  50. $(()=> {
  51. document.getElementById('the-video').addEventListener('ended',nextItem);
  52. nextItem();
  53. });
  54. async function getDistance() {
  55. try {
  56. let response = await fetch("/d");
  57. let data = await response.json();
  58. return data.distance;
  59. } catch {
  60. return 0;
  61. }
  62. };
  63. async function updateDistance() {
  64. var dist = await getDistance();
  65. var vidblur = 0, tickerblur = TICKER_BLUR_WHEN_FAR;
  66. if (dist>MIN_DIST && dist<MAX_DIST) {
  67. vidblur = parseInt(VID_BLUR_WHEN_CLOSE*(MAX_DIST-dist)/(MAX_DIST-MIN_DIST));
  68. tickerblur = parseInt(TICKER_BLUR_WHEN_FAR*dist/(MAX_DIST-MIN_DIST));
  69. }
  70. if (dist<2*MIN_DIST) {
  71. tickerblur = 0;
  72. }
  73. // console.log(vidblur,tickerblur);
  74. // console.log(`${vidblur}, ${tickerblur}`);
  75. document.getElementById("the-video").style.filter=`blur(${vidblur}px)`;
  76. document.getElementById("the-ticker").style.filter=`blur(${tickerblur}px)`;
  77. }
  78. window.update_interval = setInterval(updateDistance, 200);
  79. </script>
  80. </body>
  81. </html>