您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Мгновенная прокрутка к центру следующей карточки по пробелу
// ==UserScript== // @name Wildberries Instant Center Scroll // @namespace http://tampermonkey.net/ // @version 1.5 // @description Мгновенная прокрутка к центру следующей карточки по пробелу // @author McDuck // @match https://www.wildberries.ru/* // @match https://wildberries.ru/* // @license MIT // @grant none // ==/UserScript== (function() { 'use strict'; function getCardElements() { const selectors = [ '.product-card__wrapper', '.card__wrapper', '.j-card-item', '.product-card', '.card', '.catalog-product', '[data-nm-id]', '.product-card__inner' ]; let allCards = []; selectors.forEach(selector => { const cards = document.querySelectorAll(selector); allCards = allCards.concat(Array.from(cards)); }); // Фильтруем и сортируем карточки по вертикальной позиции return [...new Set(allCards)] .filter(card => card.offsetParent !== null) .sort((a, b) => { const rectA = a.getBoundingClientRect(); const rectB = b.getBoundingClientRect(); return (rectA.top + window.scrollY) - (rectB.top + window.scrollY); }); } function findNextCard() { const cards = getCardElements(); if (cards.length === 0) return null; const viewportHeight = window.innerHeight; const currentScroll = window.scrollY; const viewportCenter = viewportHeight / 2; // Ищем первую карточку, центр которой ниже центра экрана for (const card of cards) { const rect = card.getBoundingClientRect(); const cardCenter = rect.top + (rect.height / 2); // Если центр карточки ниже центра экрана if (cardCenter > viewportCenter + 10) { const cardAbsoluteTop = rect.top + currentScroll; const targetScroll = cardAbsoluteTop - viewportCenter + (rect.height / 2); return targetScroll; } } // Если не нашли, берем последнюю карточку const lastCard = cards[cards.length - 1]; const lastRect = lastCard.getBoundingClientRect(); const lastCardTop = lastRect.top + currentScroll; return lastCardTop - viewportCenter + (lastRect.height / 2); } function handleSpacebar(e) { if ((e.code === 'Space' || e.keyCode === 32) && !document.activeElement.tagName.match(/^(INPUT|TEXTAREA)$/i) && !document.activeElement.isContentEditable) { e.preventDefault(); e.stopPropagation(); const targetScroll = findNextCard(); if (targetScroll !== null) { window.scrollTo({ top: targetScroll, behavior: 'smooth' }); } return false; } } document.addEventListener('keydown', handleSpacebar, true); console.log('Wildberries Instant Center Scroll activated'); })();