← Все примеры

JavaScript Продуктивность substack.com

Substack: автоматически отмечать запись прочитанной

После прокрутки 80% записи она сохраняется как прочитанная в localStorage и появляется метка «Read».

Код для копирования

// Mark a post as "read" in localStorage after 80% of it has been scrolled through
(function () {
  var KEY = 'jz-substack-read';
  function load() { try { return JSON.parse(localStorage.getItem(KEY) || '{}'); } catch (e) { return {}; } }
  function save(map) { try { localStorage.setItem(KEY, JSON.stringify(map)); } catch (e) {} }
  function root() {
    return document.querySelector('.body.markup, .available-content, [class*="postBody"]');
  }
  function badge() {
    if (document.getElementById('jz-sub-read-badge')) { return; }
    var d = document.createElement('div');
    d.id = 'jz-sub-read-badge';
    d.textContent = '✓ Read';
    d.style.cssText = 'position:fixed;right:14px;bottom:14px;background:#16a34a;color:#fff;padding:6px 10px;border-radius:14px;font:600 12px/1 system-ui,sans-serif;z-index:99999;box-shadow:0 2px 6px rgba(0,0,0,.2);';
    document.body.appendChild(d);
  }
  function check() {
    var r = root(); if (!r) { return; }
    var rect = r.getBoundingClientRect();
    var seen = window.innerHeight - rect.top;
    var pct = seen / rect.height;
    if (pct < 0.8) { return; }
    var key = location.pathname;
    var map = load();
    if (!map[key]) { map[key] = Date.now(); save(map); }
    badge();
  }
  check();
  var map = load();
  if (map[location.pathname]) { badge(); }
  window.addEventListener('scroll', function () {
    clearTimeout(window.__jzSubRead);
    window.__jzSubRead = setTimeout(check, 200);
  }, { passive: true });
})();

Как использовать этот пример

  1. Скопируй код кнопкой выше.
  2. Установи JustZix (2 минуты) и открой расширение на нужной странице.
  3. Добавь новое правило, совпадающее с этой страницей.
  4. Вставь код в панель JavaScript правила и сохрани — он запускается при каждом заходе на страницу.

Оцени этот пример

Оценок пока нет — оцени первым.

Этот пример работает?

Сниппеты бесполезны, если их некуда вставить.

JustZix устанавливается за 2 минуты и запускает твой код на каждой подходящей странице. Без аккаунта, без оплаты.

Скачать бесплатно Смотреть применение