// ==UserScript== // @name 边缘下滑刷新.改 // @version 1.8 // @description 在屏幕左右边缘下滑时刷新网页 // @author angao // @run-at document-end // @license MIT // @match *://*/* // @namespace https://greasyfork.org/users/452911 // @downloadURL https://update.greasyfork.icu/scripts/471516/%E8%BE%B9%E7%BC%98%E4%B8%8B%E6%BB%91%E5%88%B7%E6%96%B0%E6%94%B9.user.js // @updateURL https://update.greasyfork.icu/scripts/471516/%E8%BE%B9%E7%BC%98%E4%B8%8B%E6%BB%91%E5%88%B7%E6%96%B0%E6%94%B9.meta.js // ==/UserScript== (function EdgeSlideRefresh() { 'use strict'; // 设置刷新图标大小 const setRefreshIconSize = () => { if (window.innerWidth < window.innerHeight) { document.querySelector('.Refresh_Icon').style.width = `calc(100vw / 11)`; document.querySelector('.Refresh_Icon').style.height = `calc(100vw / 11)`; } else { document.querySelector('.Refresh_Icon').style.width = `calc(100vh / 5)`; document.querySelector('.Refresh_Icon').style.height = `calc(100vh / 5)`; } } // 设置滑动刷新的距离阈值 const Sliderefreshdistance = window.innerHeight * (window.innerWidth < window.innerHeight ? 1 / 4 : 2 / 3); let startY = null; let endY = null; // 创建样式 var style = document.createElement('style'); style.innerHTML = `.Refresh_Icon { border-radius: 50%; position: fixed; left: 50%; transform: translate(-50%, 0) translateZ(0); box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); top: -${100 / 11}vw; align-items: center; justify-content: center; z-index: 99999999; background-color: white; transition: transform 0.05s ease-out; } .Refresh_Icon svg { width: calc(70% * 100vw / 11); height: calc(70% * 100vw / 11); margin: 0; }`; document.head.appendChild(style); // 创建刷新图标元素 const Icon = document.createElement('div'); Icon.className = 'Refresh_Icon'; Icon.innerHTML = ``; Icon.style.display = 'none'; document.body.appendChild(Icon); setRefreshIconSize(); window.addEventListener('resize', setRefreshIconSize); // 触摸开始事件监听 document.addEventListener('touchstart', function(e) { if (e.touches[0].clientX < window.innerWidth / 18 || e.touches[0].clientX > window.innerWidth * 17 / 18) { startY = e.touches[0].clientY; Icon.style.display = 'flex'; } }); // 触摸移动事件监听 document.addEventListener('touchmove', function(e) { if (startY !== null && (e.touches[0].clientX < window.innerWidth / 18 || e.touches[0].clientX > window.innerWidth * 17 / 18)) { e.preventDefault(); let distance = e.touches[0].clientY - startY; let slowDownStart = Sliderefreshdistance * 0.6; let slowDownRate = 0.2; if (distance < Sliderefreshdistance) { Icon.querySelector('svg').style.fill = 'black'; } else { Icon.querySelector('svg').style.fill = 'darkred'; } if (distance > slowDownStart) { distance = slowDownStart + (distance - slowDownStart) * slowDownRate; } distance = Math.min(distance, Sliderefreshdistance * 0.85); Icon.style.transform = `translate(-50%, ${distance / 1.35}px) rotate(${distance * 2}deg)`; } }, { passive: false }); // 触摸结束事件监听 document.addEventListener('touchend', function(e) { if (startY !== null && (e.changedTouches[0].clientX < window.innerWidth / 18 || e.changedTouches[0].clientX > window.innerWidth * 17 / 18)) { endY = e.changedTouches[0].clientY; if (endY - startY > Sliderefreshdistance) { setTimeout(function() { location.reload(); }, 250); } Icon.style.transition = 'all 0.5s'; Icon.style.transform = 'translate(-50%, -42px)'; setTimeout(() => { Icon.style.transition = ''; Icon.style.display = 'none'; }, 500); startY = null; endY = null; } }); })();