关于检测是否拖拽的优化方案

经验创意 · 195 次浏览
H-D-G 创建于 2024-09-20 23:28

我大致浏览过动作的逻辑,有一段(结合事件触发)专门判断前台进程的步骤,用于停止动作,从这里可以知道作者应该是想要尽可能避免不必要的轮询的。

我觉得如果要节约资源(不轮询)的话,可以从浏览器入手:注册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
    });
})();


回复内容
暂无回复
回复主贴