// ==UserScript==
// @namespace http://tampermonkey.net/
// @version 2026-05-03
// @match https://booklive.jp/search/keyword/keyword/*
// @grant GM_getValue
// @grant GM_setValue
// ==/UserScript==
// ==UserScript==
// @namespace http://tampermonkey.net/
// @version 2026-05-04
// @grant GM_getValue
// @grant GM_setValue
// ==/UserScript==
(function() {
'use strict';
const STORAGE_KEY = 'buttonPosition';
function isMobilePage() {
if (document.querySelector(
'meta[name="apple-mobile-web-app-title"][content="ブックライブ"]'
)) {
return true;
}
return false;
}
const btn = document.createElement('button');
btn.textContent = 'bl-pager下端へ移動';
btn.style.position = 'fixed';
btn.style.zIndex = 99999;
btn.style.opacity = '0.9';
document.body.appendChild(btn);
const saved = GM_getValue(STORAGE_KEY, null);
if (saved && saved.left && saved.top) {
} else {
}
// ---- クリック処理 ----
btn.addEventListener('click', e => {
e.preventDefault();
e.stopPropagation();
return;
}
// ---- ここから変更:PC版は2番目の .bl-pager.page_nav を使う ----
let target;
if (isMobilePage()) {
console.log('スマホ版として処理');
target = document.querySelector(
'.bk_pageing.section_content.bl-pager.clearfix'
);
} else {
console.log('PC版として処理');
const targets = document.querySelectorAll('.bl-pager.page_nav');
// 2番目を使用
target = targets[1];
}
if (!target) {
alert('対象の bl-pager が見つかりません');
return;
}
// ---- ここまで変更:PC版は2番目の .bl-pager.page_nav を使う ----
const rect = target.getBoundingClientRect();
// 要素下端のページ全体基準座標
const absoluteBottom = rect.bottom + window.scrollY;
// 要素下端をウィンドウ下端へ一致
const destination = absoluteBottom - window.innerHeight;
window.scrollTo({
behavior: 'auto'
});
});
// ---- ドラッグ処理 ----
let dragging = false;
let startX = 0;
let startY = 0;
let offsetX = 0;
let offsetY = 0;
btn.addEventListener('mousedown', e => {
dragging = true;
startX = e.clientX;
startY = e.clientY;
const rect = btn.getBoundingClientRect();
offsetX = e.clientX - rect.left;
offsetY = e.clientY - rect.top;
e.preventDefault();
});
document.addEventListener('mousemove', e => {
if (!dragging) return;
if (
Math.abs(e.clientX - startX) > 5 ||
Math.abs(e.clientY - startY) > 5
) {
}
btn.style.left = `${e.clientX - offsetX}px`;
btn.style.top = `${e.clientY - offsetY}px`;
}
});
document.addEventListener('mouseup', () => {
if (!dragging) return;
dragging = false;
GM_setValue(STORAGE_KEY, {
});
}
});
})();
まともに指示すればAIはこれぐらいお手の物に出せるようになったな。
手動でスクロールしてるとつい事故って下の方のランダム表示のおすすめ作品欄が目に入る位置までスクロールしちゃって、ランダムだから後で気になったとしてもまた見れるとは限らないからとスクショが増える羽目になっていたのが、これで防げるようになった。
dorawiiより
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 https://anond.hatelabo.jp/20260504175957# -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCafhgDQAKCRBwMdsubs4+ SDc1AQCfvf159m/85ngaE1SU7DnOiPC03RG4l9qI2Ce8Bp0j7QEAzIp52/FQfpXI vmRTMM52g1VEwry0pmg+4p0QQZlkEAk= =FTvE -----END PGP SIGNATURE-----