Připnout na horní a spodní tlačítka

Vygenerujte dvě tlačítka na všech stránkách,Jeden pro vyhlazení zpět nahoru,Jeden pro nepřetržité posouvání dolů,Dalším kliknutím zrušíte posun dolů

Nainstalovat skript?
Skript doporučený autorem

Mohlo by se vám také líbit Greasyfork Lepidlo řemeslník.

Nainstalovat skript
  1. // ==UserScript==
  2. // @name Scroll to Top and Bottom Buttons
  3. // @name:zh-CN 置顶和置底按钮
  4. // @description:zh-CN 在所有页面生成两个按钮,一个用于顺滑回到顶部,一个用于持续滚动到底部,再次点击取消滚动到底部
  5. // @name:ar دبوس على الأزرار العلوية والسفلية
  6. // @description:ar إنشاء زرين في كافة الصفحات,واحد لتنعيم العودة إلى الأعلى,واحد للتمرير المستمر إلى الأسفل,انقر مرة أخرى لإلغاء التمرير إلى الأسفل
  7. // @name:bg Закачете горния и долния бутон
  8. // @description:bg Генерирайте два бутона на всички страници,Един за изглаждане обратно към върха,Един за непрекъснато превъртане до дъното,Щракнете отново, за да отмените, превъртете надолу
  9. // @name:cs Připnout na horní a spodní tlačítka
  10. // @description:cs Vygenerujte dvě tlačítka na všech stránkách,Jeden pro vyhlazení zpět nahoru,Jeden pro nepřetržité posouvání dolů,Dalším kliknutím zrušíte posun dolů
  11. // @name:da Fastgør til top og bund knapper
  12. // @description:da Generer to knapper på alle sider,En til at glatte tilbage til toppen,En til kontinuerlig rulning til bunden,Klik igen for at annullere scroll til bunden
  13. // @name:de An die oberen und unteren Knöpfe stecken
  14. // @description:de Generieren Sie zwei Schaltflächen auf allen Seiten,Eine zum Glätten nach oben,Eine für kontinuierliches Scrollen nach unten,Klicken Sie erneut, um den Bildlauf nach unten abzubrechen
  15. // @name:el Καρφιτσώστε τα κουμπιά πάνω και κάτω
  16. // @description:el Δημιουργήστε δύο κουμπιά σε όλες τις σελίδες,Ένα για λείανση πίσω στην κορυφή,Ένα για συνεχή κύλιση προς τα κάτω,Κάντε ξανά κλικ για να ακυρώσετε την κύλιση προς τα κάτω
  17. // @name:en Pin to top and bottom buttons
  18. // @description:en Generate two buttons on all pages,One for smoothing back to the top,One for continuous scrolling to the bottom,Click again to cancel scroll to bottom
  19. // @name:eo Alpinglu al supraj kaj malsupraj butonoj
  20. // @description:eo Generu du butonojn sur ĉiuj paĝoj,Unu por glatigi reen al la supro,Unu por kontinua movo al la fundo,Alklaku denove por nuligi rulumadon malsupre
  21. // @name:es Fijar a los botones superior e inferior
  22. // @description:es Generar dos botones en todas las páginas.,Uno para alisar hasta arriba.,Uno para desplazamiento continuo hasta el final.,Haga clic nuevamente para cancelar, desplácese hacia abajo
  23. // @name:fi Kiinnitä painikkeet ylä- ja alaosaan
  24. // @description:fi Luo kaksi painiketta kaikille sivuille,Yksi tasoittamiseen takaisin yläosaan,Yksi jatkuvaan vierittämiseen pohjaan,Napsauta uudelleen peruuttaaksesi vierityksen alas
  25. // @name:fr Épingler sur les boutons du haut et du bas
  26. // @description:fr Générez deux boutons sur toutes les pages,Un pour lisser vers le haut,Un pour un défilement continu vers le bas,Cliquez à nouveau pour annuler le défilement vers le bas
  27. // @name:he הצמד לחצנים למעלה ולמטה
  28. // @description:he צור שני כפתורים בכל הדפים,אחד להחלקת חזרה למעלה,אחד לגלילה רציפה לתחתית,לחץ שוב כדי לבטל את הגלילה למטה
  29. // @name:hr Pričvrstite na gornji i donji gumb
  30. // @description:hr Generirajte dva gumba na svim stranicama,Jedan za glačanje natrag na vrh,Jedan za kontinuirano pomicanje do dna,Kliknite ponovno za odustajanje pomaknite se do dna
  31. // @name:hu Rögzítse a felső és alsó gombokat
  32. // @description:hu Minden oldalon hozzon létre két gombot,Az egyik a tetejére való visszasimításhoz,Egy a folyamatos görgetéshez az aljára,Kattintson újra a lefelé görgetés megszakításához
  33. // @name:id Sematkan ke tombol atas dan bawah
  34. // @description:id Hasilkan dua tombol di semua halaman,Satu untuk menghaluskan kembali ke atas,Satu untuk menggulir terus menerus ke bawah,Klik lagi untuk membatalkan gulir ke bawah
  35. // @name:it Aggiungi ai pulsanti superiore e inferiore
  36. // @description:it Genera due pulsanti su tutte le pagine,Uno per tornare in cima,Uno per lo scorrimento continuo verso il basso,Fare di nuovo clic per annullare lo scorrimento fino in fondo
  37. // @name:ja 上下のボタンにピン留めする
  38. // @description:ja すべてのページに 2 つのボタンを生成する,1 つはトップに戻るためのスムージング用,1 つは下まで継続的にスクロールするためのもの,もう一度クリックすると下までスクロールがキャンセルされます
  39. // @name:ka ჩაამაგრეთ ზედა და ქვედა ღილაკები
  40. // @description:ka შექმენით ორი ღილაკი ყველა გვერდზე,ერთი ზევით დასაბრუნებლად,ერთი ბოლოში უწყვეტი გადახვევისთვის,დააწკაპუნეთ ხელახლა გადახვევის გასაუქმებლად ბოლოში
  41. // @name:ko 상단 및 하단 버튼에 고정
  42. // @description:ko 모든 페이지에 두 개의 버튼 생성,하나는 위쪽으로 부드럽게 하기 위한 것입니다.,하나는 아래쪽으로 계속 스크롤하기 위한 것입니다.,취소하려면 다시 클릭하세요. 맨 아래로 스크롤
  43. // @name:nl Speld vast aan de bovenste en onderste knoppen
  44. // @description:nl Genereer twee knoppen op alle pagina’s,Eén om terug naar boven glad te strijken,Eén voor continu naar beneden scrollen,Klik nogmaals om te annuleren. Scroll naar beneden
  45. // @name:nb Fest til topp- og bunnknapper
  46. // @description:nb Generer to knapper på alle sider,En for å glatte tilbake til toppen,En for kontinuerlig rulling til bunnen,Klikk på nytt for å avbryte bla til bunnen
  47. // @name:pl Przypnij do górnego i dolnego przycisku
  48. // @description:pl Wygeneruj dwa przyciski na wszystkich stronach,Jeden do wygładzania z powrotem do góry,Jeden do ciągłego przewijania w dół,Kliknij ponownie, aby anulować przewijanie w dół
  49. // @name:pt-BR Fixar nos botões superior e inferior
  50. // @description:pt-BR Gere dois botões em todas as páginas,Um para suavizar de volta ao topo,Um para rolagem contínua até o final,Clique novamente para cancelar a rolagem para baixo
  51. // @name:ro Fixați butoanele de sus și de jos
  52. // @description:ro Generați două butoane pe toate paginile,Unul pentru netezirea înapoi în vârf,Unul pentru defilarea continuă până în jos,Faceți clic din nou pentru a anula derularea în jos
  53. // @name:ru Закрепить на верхней и нижней кнопках
  54. // @description:ru Создать две кнопки на всех страницах,Один для сглаживания обратно наверх,Один для непрерывной прокрутки вниз,Нажмите еще раз, чтобы отменить прокрутку вниз
  55. // @name:sk Pripnúť na horné a spodné tlačidlo
  56. // @description:sk Vygenerujte dve tlačidlá na všetkých stránkach,Jeden na vyhladenie späť nahor,Jeden pre plynulé posúvanie nadol,Opätovným kliknutím zrušíte posúvanie nadol
  57. // @name:sr Закачите горње и доње дугме
  58. // @description:sr Генеришите два дугмета на свим страницама,Један за заглађивање назад на врх,Један за непрекидно скроловање до дна,Кликните поново да бисте отказали померање до дна
  59. // @name:sv Fäst knappar upptill och nedtill
  60. // @description:sv Skapa två knappar på alla sidor,En för att jämna tillbaka till toppen,En för kontinuerlig rullning till botten,Klicka igen för att avbryta scroll till botten
  61. // @name:th ปักหมุดที่ปุ่มบนและล่าง
  62. // @description:th สร้างสองปุ่มในทุกหน้า,หนึ่งอันสำหรับปรับให้เรียบกลับไปด้านบน,หนึ่งรายการสำหรับการเลื่อนไปที่ด้านล่างอย่างต่อเนื่อง,คลิกอีกครั้งเพื่อยกเลิกการเลื่อนไปด้านล่าง
  63. // @name:tr Üst ve alt düğmelere sabitle
  64. // @description:tr Tüm sayfalarda iki düğme oluşturun,En üste doğru yumuşatmak için bir tane,Aşağıya doğru sürekli kaydırma için bir tane,Aşağıya kaydırmayı iptal etmek için tekrar tıklayın
  65. // @name:ug ئۈستى ۋە ئاستى كۇنۇپكىلارغا بېسىڭ
  66. // @description:ug بارلىق بەتلەردە ئىككى كۇنۇپكا ھاسىل قىلىڭ,يۇقىرىغا قايتىش ئۈچۈن بىرى,ئاستىغا توختىماي دومىلاش ئۈچۈن بىرى,ئاستىنى سىيرىشنى قايتا چېكىڭ
  67. // @name:uk Прикріпіть до верхньої та нижньої кнопок
  68. // @description:uk Згенеруйте дві кнопки на всіх сторінках,Один для згладжування назад до верху,Один для безперервного прокручування вниз,Клацніть ще раз, щоб скасувати прокрутку вниз
  69. // @name:vi Ghim vào nút trên và dưới
  70. // @description:vi Tạo hai nút trên tất cả các trang,Một để làm mịn trở lại đầu trang,Một để cuộn liên tục xuống phía dưới,Bấm lần nữa để hủy cuộn xuống dưới cùng
  71. // @name:zh-TW 置頂和置底按鈕
  72. // @description:zh-TW 在所有頁面產生兩個按鈕,一個用於順滑回到頂部,一個用於持續滾動到底部,再次點擊取消捲動到底部
  73. // @name:zh-HK 置頂和置底按鈕
  74. // @description:zh-HK 在所有頁面產生兩個按鈕,一個用於順滑回到頂部,一個用於持續滾動到底部,再次點擊取消捲動到底部
  75. // @name:fr-CA Épingler sur les boutons du haut et du bas
  76. // @description:fr-CA Générez deux boutons sur toutes les pages,Un pour lisser vers le haut,Un pour un défilement continu vers le bas,Cliquez à nouveau pour annuler le défilement vers le bas
  77. // @description Generate two buttons on all pages, one for smoothly scrolling back to the top and one for continuous scrolling to the bottom. Click again to stop scrolling to the bottom.
  78. // @version 1.2.0.72
  79. // @run-at document-end
  80. // @author 人民的勤务员 <china.qinwuyuan@gmail.com>
  81. // @match *://*/*
  82. // @license MIT
  83. // @grant GM_registerMenuCommand
  84. // @grant GM_setValue
  85. // @grant GM_getValue
  86. // @namespace https://github.com/ChinaGodMan/UserScripts
  87. // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAACXBIWXMAAAsTAAALEwEAmpwYAAADO0lEQVR4nO3ZXUsUURwG8P0ACYoXoWheRYi9kG3zQAR9RjW6cAV3LyKKIMKKunHTnNFdtTNW0CewFCIyqjsxTmovYO7O7nnd//PAAdmLceb57f/M7G6pxDAMwzAR5eLj1bOXXyxtlZfW98vL6/v6b/2a7/MSkfGHT8Ym62vfkOUHf6/JeuPH+MLCed/nJ7J8EMF/+SCC//JBBP/lgwj+ywcRus+lZ/WRq4ur3zst/3jpY0zcez5q4JTk5OarNwPXXjZ3uy3/eE08Xdw9d+fugO/riiJX6qofWd40Vb5e5eX1g6FKTQ3XaoO+r09c+dArVQfDlRoRWm07SNWG8fKPlgY4WhvcjhyXj38BiOBk28lOBeB25LJ8nAAgHsFl+fgPgFgE1+XjFABxCD7KRwsAMQi+ykcbAD2P4LN8tAnQswi+y0cBgJ5DCKF8FAToGYRQykcHANEjhFQ+OgSIFiG08tEFQHQIIZaPLgGiQQi1fBgACB4h5PJhCCBYhNDLh0GA4BBiKB+GAYJBiKV8WADwjmCz/CRTry0ANHsG4cbK+74kVZtW3q2p2vj1G7Hh4+of4vUP8jYQhivVzcG5uT5nAMjy2zbLLx3+D6PH1se0ijBbm3EGkKRqx8a2c73R+D3KNgB0xubn+61sR7PVHWcASNVHm+XbBLCFMDRb2y65CtJ8xsa24wrgz3ZU3TR4H5guRXcTTk8u3wWAWQTHN2ETj6EnbTuuAUxsR1F+FmhVvkuAbhCC+TScpHnDZPmuATpBCKL8ogjtlu8DoAhCUOW3i1CkfF8A7SAEWX4rhKLl+wQ4DSHo8o9zq/7uTJKq6STLtw+XmtKvFT0OPALo6MdK/fXCUKX6QS/9nO/8UdNn4BlAfEAAvwEBCCA64AQQQHTACSCA6IATQADRASeAAKIDTgABRAecAAKIDjgBBBAdcAIIIDrgBBBAdMAJIIDogBNAANEBJ4AAogNOAAFEB5wAAogOOAEEEB1wAgggOuAEEEB0wAnwmyRTX40hpPkXz5cTX5Dlj0wBJGl+3/f1RJfyytaFJFOfu3/3q0/J2taI7+uJMuXm21Fk+QOk+V4H286efuezfIZhGKYUaH4C72t5mm5DSxAAAAAASUVORK5CYII=
  88. // @iconbak https://github.com/ChinaGodMan/UserScripts/raw/main/docs/icon/Scripts%20Icons/icons8-up-96.png
  89. // @supportURL https://github.com/ChinaGodMan/UserScripts/issues
  90. // @homepageURL https://github.com/ChinaGodMan/UserScripts
  91. // ==/UserScript==
  92. (function () {
  93. 'use strict'
  94. let isScrollingToBottom = false
  95. let buttonTopKey = GM_getValue('buttonTopKey', '')
  96. let buttonBottomKey = GM_getValue('buttonBottomKey', '')
  97. var style = document.createElement('style')
  98. GM_registerMenuCommand('SetHotkey', showHotkeyModal)
  99. function showHotkeyModal() {
  100. let modalHtml = `
  101. <div id="hotkeyModal" style="position: fixed; z-index: 10000; background: white; padding: 20px; border-radius: 8px; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.5); top: 20%; left: 50%; transform: translate(-50%, -20%); max-width: 300px;">
  102. <h2 style="margin-top: 0;">ButtonKey</h2>
  103. <div style="margin-bottom: 10px;">
  104. <label for="hotkeyInput1" style="display: block; margin-bottom: 5px;">buttonTopKey:</label>
  105. <input id="hotkeyInput1" style="width: 100%; padding: 8px; border: 1px solid #ccc; border-radius: 4px;" placeholder="${buttonTopKey}" />
  106. </div>
  107. <div style="margin-bottom: 20px;">
  108. <label for="hotkeyInput2" style="display: block; margin-bottom: 5px;">buttonBottomKey:</label>
  109. <input id="hotkeyInput2" style="width: 100%; padding: 8px; border: 1px solid #ccc; border-radius: 4px;" placeholder="${buttonBottomKey}" />
  110. </div>
  111. <div style="text-align: right;">
  112. <button id="saveHotkeys" style="background-color: #4CAF50; color: white; padding: 10px 20px; border: none; border-radius: 4px; cursor: pointer;">Save</button>
  113. <button id="closeModal" style="background-color: #f44336; color: white; padding: 10px 20px; border: none; border-radius: 4px; cursor: pointer; margin-left: 10px;">Close</button>
  114. </div>
  115. </div>`
  116. let modalDiv = document.createElement('div')
  117. modalDiv.innerHTML = modalHtml
  118. document.body.appendChild(modalDiv)
  119. document.getElementById('hotkeyInput1').addEventListener('keydown', function (event) {
  120. event.preventDefault()
  121. buttonTopKey = event.key
  122. this.value = buttonTopKey
  123. })
  124. document.getElementById('hotkeyInput2').addEventListener('keydown', function (event) {
  125. event.preventDefault()
  126. buttonBottomKey = event.key
  127. this.value = buttonBottomKey
  128. })
  129. document.getElementById('saveHotkeys').addEventListener('click', function () {
  130. GM_setValue('buttonTopKey', buttonTopKey)
  131. GM_setValue('buttonBottomKey', buttonBottomKey)
  132. closeModal()
  133. })
  134. document.getElementById('closeModal').addEventListener('click', closeModal)
  135. }
  136. function closeModal() {
  137. let modal = document.getElementById('hotkeyModal')
  138. if (modal) {
  139. modal.remove()
  140. }
  141. }
  142. document.addEventListener('keydown', function (event) {
  143. if (event.target.matches('input, textarea, [contenteditable="true"]')) {
  144. return
  145. }
  146. if (event.key === GM_getValue('buttonTopKey')) {
  147. goToTop()
  148. } else if (event.key === GM_getValue('buttonBottomKey')) {
  149. isScrollingToBottom = toggleScrolling(buttonBottom, isScrollingToBottom)
  150. }
  151. })
  152. style.innerHTML = `
  153. :root {
  154. --button-size: 29.4px; /* 按钮的大小 */
  155. --button-margin: 1px; /* 按钮之间的间距 */
  156. }
  157. .GO_TO_TOP_button, .GO_TO_BOTTOM_button {
  158. width: var(--button-size); /* 按钮大小 */
  159. height: var(--button-size); /* 按钮大小 */
  160. border-radius: 5.6px; /* 縮小30% */
  161. box-shadow: 0 3px 6px rgb(0 0 0 / 16%), 0 1px 2px rgb(0 0 0 / 23%);
  162. position: fixed;
  163. right: 14px; /* 缩小30% */
  164. display: flex;
  165. align-items: center;
  166. justify-content: center;
  167. z-index: 99999999;
  168. background-color: white;
  169. opacity: 0.8;
  170. transition: opacity 0.2s ease-in-out;
  171. cursor: pointer;
  172. }
  173. .GO_TO_TOP_button svg, .GO_TO_BOTTOM_button svg {
  174. left: 16.8px; /* 縮小30% */
  175. height: 16.8px; /* 縮小30% */
  176. margin: 0;
  177. }
  178. .GO_TO_TOP_button {
  179. bottom: 49px; /* 縮小30% */
  180. }
  181. .GO_TO_BOTTOM_button {
  182. bottom: 14px; /* 縮小30% */
  183. }
  184. `
  185. document.head.appendChild(style)
  186. const goToTop = () => {
  187. window.scrollTo({
  188. top: 0,
  189. behavior: 'smooth'
  190. })
  191. }
  192. let bottomInterval
  193. const startScrollingToBottom = () => {
  194. bottomInterval = setInterval(() => {
  195. window.scrollTo({
  196. top: document.body.scrollHeight,
  197. behavior: 'smooth'
  198. })
  199. }, 1000)
  200. let checkTimeout = setTimeout(() => {
  201. if (window.innerHeight + window.scrollY >= document.body.scrollHeight) {
  202. if (buttonBottom.style.backgroundColor === 'green') {
  203. buttonBottom.click()
  204. // alert("已处于最底端");
  205. }
  206. }
  207. }, 3000)
  208. window.addEventListener('scroll', () => {
  209. if (window.innerHeight + window.scrollY < document.body.scrollHeight) {
  210. clearTimeout(checkTimeout)
  211. checkTimeout = setTimeout(() => {
  212. if (buttonBottom.style.backgroundColor === 'green') {
  213. buttonBottom.click()
  214. // alert("自动滚动到底部已停止。");
  215. }
  216. }, 3000)
  217. }
  218. })
  219. buttonBottom.style.opacity = '0.8'
  220. buttonBottom.style.display = 'flex'
  221. }
  222. const stopScrollingToBottom = () => {
  223. clearInterval(bottomInterval)
  224. }
  225. const buttonTop = document.createElement('div')
  226. buttonTop.className = 'GO_TO_TOP_button'
  227. buttonTop.innerHTML = `
  228. <svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg">
  229. <path d="M825.568 555.328l-287.392-289.28C531.808 259.648 523.488 256.576 515.2 256.64 514.08 256.544 513.12 256 512 256c-4.672 0-9.024 1.088-13.024 2.88-4.032 1.536-7.872 3.872-11.136 7.136l-259.328 258.88c-12.512 12.48-12.544 32.736-0.032 45.248 6.24 6.272 14.432 9.408 22.656 9.408 8.192 0 16.352-3.136 22.624-9.344L480 364.288V928c0 17.696 14.336 32 32 32s32-14.304 32-32V362.72l236.192 237.728c6.24 6.272 14.496 9.44 22.688 9.44s16.32-3.104 22.56-9.312C838.016 588.128 838.048 567.84 825.568 555.328z"/>
  230. <path d="M864 192H160C142.336 192 128 177.664 128 160s14.336-32 32-32h704c17.696 0 32 14.336 32 32S881.696 192 864 192z"/>
  231. </svg>`
  232. const buttonBottom = document.createElement('div')
  233. buttonBottom.className = 'GO_TO_BOTTOM_button'
  234. buttonBottom.innerHTML = `
  235. <svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg">
  236. <path d="M198.4 468.352l287.392 289.28c6.368 6.4 14.688 9.472 22.976 9.408 1.12 0.096 2.08 0.64 3.2 0.64 4.672 0 9.024-1.088 13.024-2.88 4.032-1.536 7.872-3.872 11.136-7.136l259.328-258.88c12.512-12.48 12.544-32.736 0.032-45.248-6.24-6.272-14.432-9.408-22.656-9.408-8.192 0-16.352 3.136-22.624 9.344L544 659.712V96c0-17.696-14.336-32-32-32s-32 14.304-32 32v565.28L243.808 423.552c-6.24-6.272-14.496-9.44-22.688-9.44s-16.32 3.104-22.56 9.312c-12.48 12.512-12.512 32.8-0.032 45.312z"/>
  237. <path d="M160 832h704c17.664 0 32 14.336 32 32s-14.336 32-32 32H160c-17.664 0-32-14.336-32-32s14.336-32 32-32z"/>
  238. </svg>`
  239. buttonTop.addEventListener('click', goToTop)
  240. buttonBottom.addEventListener('click', () => {
  241. isScrollingToBottom = toggleScrolling(buttonBottom, isScrollingToBottom)
  242. })
  243. function toggleScrolling(buttonBottom, isScrollingToBottom) {
  244. if (isScrollingToBottom) {
  245. stopScrollingToBottom()
  246. buttonBottom.style.transform = 'scale(1)'
  247. buttonBottom.style.backgroundColor = 'white' // 改回原来的背景色
  248. } else {
  249. startScrollingToBottom()
  250. buttonBottom.style.transform = 'scale(1.1)'
  251. buttonBottom.style.backgroundColor = 'green' // 改为绿色
  252. }
  253. return !isScrollingToBottom
  254. }
  255. buttonTop.style.display = 'none'
  256. buttonBottom.style.display = 'none'
  257. document.body.appendChild(buttonTop)
  258. document.body.appendChild(buttonBottom)
  259. let timer
  260. window.addEventListener('scroll', () => {
  261. if (window.pageYOffset > 50) {
  262. buttonTop.style.opacity = '0.8'
  263. buttonTop.style.display = 'flex'
  264. buttonBottom.style.opacity = '0.8'
  265. buttonBottom.style.display = 'flex'
  266. } else if (window.pageYOffset === 0) {
  267. buttonTop.style.opacity = '0'
  268. buttonBottom.style.opacity = '0'
  269. setTimeout(() => {
  270. buttonTop.style.display = 'none'
  271. buttonBottom.style.display = 'none'
  272. }, 200)
  273. }
  274. clearTimeout(timer)
  275. timer = setTimeout(() => {
  276. buttonTop.style.opacity = '0'
  277. buttonBottom.style.opacity = '0'
  278. setTimeout(() => {
  279. buttonTop.style.display = 'none'
  280. buttonBottom.style.display = 'none'
  281. }, 200)
  282. }, 1800)
  283. })
  284. })()