המלצה | כפתור לאתר הגזרה שגולל מטה להודעה אחרונה בכל פעם - ניתן לביטול מהיר
עזרה הדדית - בינה מלאכותית
1
פוסטים
1
כותבים
39
צפיות
1
עוקבים
-
עצבן אותי כל פעם (ק"ו עם מחשב נייד לנובו X201 למכירים...)
לגלול שוב למטה ושוב למטה.
תן לצפות בכל שניה בעדכון האחרון...
ג'מיני כתב לי לזה סקריפט לטמפרונסקי.
משתף.פיצ'רים מרכזיים בתוסף
- גלילה אוטומטית חכמה: הצמדה אוטומטית של המסך לתחתית הצ'אט בכל פעם שמתקבל מבזק חדש, מותאם למבנה ה-Reverse של האתר.
- לחצן בקרה צף (UI): הוספת כפתור עגול בפינה הימנית התחתונה המאפשר הפעלה וכיבוי של הפיצ'ר בלחיצה מהירה.
- חיווי מצב צבעוני: שינוי צבע הלחצן בזמן אמת – ירוק למצב פעיל ואדום למצב כבוי.
- שמירת העדפות משתמש (Persistence): שימוש ב-
localStorageלשמירת מצב הכפתור גם לאחר רענון הדף או כניסה מחדש לאתר. - התראת "דופק" (Pulse Notification): הנפשה ויזואלית של הלחצן בעת קבלת הודעה חדשה כאשר הגלילה האוטומטית במצב כבוי.
- גלילה חלקה (Smooth Scroll): ביצוע תנועת גלילה הדרגתית ונעימה לעין במקום מעבר חד וקופצני.
- ניטור שינויים בזמן אמת: שימוש ב-
MutationObserverלמעקב רציף אחרי רכיבי ה-DOM באתר ותגובה מיידית לכל עדכון. - אפקטים של אינטראקציה: שינוי שקיפות (Opacity) במעבר עכבר ושינוי גודל (Scale) בלחיצה לחיווי ויזואלי למשתמש.
- מנגנון אתחול חכם: בדיקה חוזרת של קיום אלמנט הצ'אט לפני הפעלת הסקריפט למניעת שגיאות בזמן טעינת האתר.
מקווה שאין באגים, ושלא יצטרכו עדכונים...
// ==UserScript== // @name הגיזרה - גלילה אוטומטית // @namespace http://tampermonkey.net/ // @version 1.0 // @description גלילה אוטומטית בצד ימין עם שמירת מצב וחיווי הודעות // @author מים אחרונים // @match https://hagizra.news/* // @grant none // ==/UserScript== (function() { 'use strict'; // טעינת מצב קודם מהדפדפן (ברירת מחדל: כבוי) let autoScrollEnabled = localStorage.getItem('hagizra_autoscroll') === 'true'; // יצירת הכפתור const btn = document.createElement('button'); const icon = `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="m7 13 5 5 5-5M7 6l5 5 5-5"/></svg>`; btn.innerHTML = icon; // סגנונות - צד ימין למטה const style = document.createElement('style'); style.innerHTML = ` @keyframes scrollPulse { 0% { transform: scale(1); box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.7); } 70% { transform: scale(1.2); box-shadow: 0 0 0 10px rgba(34, 197, 94, 0); } 100% { transform: scale(1); box-shadow: 0 0 0 0 rgba(34, 197, 94, 0); } } .scroll-btn-active { background-color: #22c55e !important; opacity: 1 !important; } .scroll-btn-inactive { background-color: #ef4444 !important; opacity: 0.6; } .new-msg-pulse { animation: scrollPulse 1s infinite; } `; document.head.appendChild(style); btn.style.cssText = ` position: fixed; bottom: 25px; right: 25px; z-index: 10000; width: 45px; height: 45px; color: white; border: 2px solid white; border-radius: 50%; cursor: pointer; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 10px rgba(0,0,0,0.3); transition: all 0.3s ease; `; updateBtnUI(); document.body.appendChild(btn); function updateBtnUI() { if (autoScrollEnabled) { btn.className = 'scroll-btn-active'; btn.classList.remove('new-msg-pulse'); } else { btn.className = 'scroll-btn-inactive'; } } function scrollToBottom(isSmooth = true) { if (!autoScrollEnabled) return; const container = document.querySelector('app-chat div.flex-col-reverse'); if (container) { container.scrollTo({ top: 0, behavior: isSmooth ? 'smooth' : 'auto' }); } } btn.addEventListener('click', () => { autoScrollEnabled = !autoScrollEnabled; localStorage.setItem('hagizra_autoscroll', autoScrollEnabled); updateBtnUI(); if (autoScrollEnabled) scrollToBottom(); }); // האזנה להודעות חדשות const observer = new MutationObserver((mutations) => { const hasNewMsg = mutations.some(m => m.addedNodes.length > 0); if (hasNewMsg) { if (autoScrollEnabled) { setTimeout(() => scrollToBottom(true), 150); } else { // חיווי ויזואלי שהגיעה הודעה כשהגלילה כבויה btn.classList.add('new-msg-pulse'); setTimeout(() => btn.classList.remove('new-msg-pulse'), 3000); } } }); function init() { const chatArea = document.querySelector('app-chat'); if (chatArea) { observer.observe(chatArea, { childList: true, subtree: true }); if (autoScrollEnabled) scrollToBottom(false); } else { setTimeout(init, 1000); } } init(); })();