我大致浏览过动作的逻辑,有一段(结合事件触发)专门判断前台进程的步骤,用于停止动作,从这里可以知道作者应该是想要尽可能避免不必要的轮询的。
我觉得如果要节约资源(不轮询)的话,可以从浏览器入手:注册img元素的拖拽事件,在事件内触发动作即可。
修改动作只要做“删”的工作就好,把那段判断是否拖拽的逻辑删掉。
我使用的油猴扩展实现这个功能,效果一致,区别是不需要时刻获取鼠标坐标了:
附油猴脚本:
// ==UserScript==
// @name 图片拖拽
// @namespace http://tampermonkey.net/
// @version 1.0
// @description 在图片拖拽时触发动作
// @author Your Name
// @match *://*/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
const runner = "bc562dd2-d078-4830-08fc-08dcd7d7f40a";
function logDragEvent(event) {
const url = `quicker:runaction:${runner}?${event.target.src}`;//我这里顺便把获取图片链接的功能也做了,因为比在动作里获取更方便
window.location.assign(url);
}
const images = document.querySelectorAll('img');
images.forEach(img => {
img.addEventListener('dragstart', logDragEvent);
});
const observer = new MutationObserver((mutations) => {
mutations.forEach(mutation => {
if (mutation.addedNodes) {
mutation.addedNodes.forEach(node => {
if (node.tagName === 'IMG') {
node.addEventListener('dragstart', logDragEvent);
}
});
}
});
});
observer.observe(document.body, {
childList: true,
subtree: true
});
})();