🏠 Home 

Twitter Endless Scroll [X]

Endless scrolling between image posts with mousewheel


安装此脚本?
  1. // ==UserScript==
  2. // @name Twitter Endless Scroll [X]
  3. // @namespace Twitter
  4. // @version 1.5
  5. // @description Endless scrolling between image posts with mousewheel
  6. // @author NightLancerX
  7. // @match https://x.com/*
  8. // @match https://twitter.com/*
  9. // @match https://mobile.twitter.com/*
  10. // @icon https://www.google.com/s2/favicons?sz=64&domain=twitter.com
  11. // @license CC-BY-NC-SA
  12. // @grant none
  13. // @require https://code.jquery.com/jquery-3.3.1.min.js
  14. // @run-at document-end
  15. // @noframes
  16. // ==/UserScript==
  17. (function() {
  18. 'use strict';
  19. let nextPost, shifted = false;
  20. function changePost(shift){
  21. let selector = 'img[src*="https://pbs.twimg.com/media/"]';
  22. let posts = [...document.querySelectorAll('[data-testid="cellInnerDiv"] img[src*="https://pbs.twimg.com/media/"]')];
  23. //console.log(posts);
  24. let index = posts.indexOf(document.querySelector(`[href='${location.pathname}']`)?.querySelector('img[src*="https://pbs.twimg.com/media/"]'));
  25. //console.log(index);
  26. nextPost = posts[index+shift];
  27. //console.log(nextPost);
  28. nextPost?.scrollIntoView();
  29. nextPost?.click();
  30. shifted = true;
  31. }
  32. $('body').on('wheel', '[aria-labelledby="modal-header"]', function(e){
  33. e.preventDefault();
  34. e.stopPropagation();
  35. let left;
  36. if (e.originalEvent.deltaY < 0){
  37. if (left = document.querySelector('[data-testid="Carousel-NavLeft"]'))
  38. left.click();
  39. else
  40. changePost(-1);
  41. }
  42. let right;
  43. if (e.originalEvent.deltaY > 0){
  44. if (right = document.querySelector('[data-testid="Carousel-NavRight"]'))
  45. right.click();
  46. else
  47. changePost(+1);
  48. }
  49. });
  50. $('body').on('click', '[aria-labelledby="modal-header"] [data-testid="swipe-to-dismiss"]', function(e){
  51. if (shifted) setTimeout(()=>{
  52. let offset = nextPost?.closest('[data-testid="cellInnerDiv"]').style.transform.match(/\d+/)?.[0];
  53. window.scroll(0, offset);
  54. shifted = false;
  55. }, 500);
  56. })
  57. })();