登录 立即注册

找到2246个回复 (用户: 老虎会游泳)

老虎会游泳 38楼回复 老虎会游泳【网页插件】图片点击加载(测试版 r8) (2022-07-31//)

@无名啊,因为最开始网页插件在顶部,加载很卡。

https://hu60.cn/q.php/bbs.topic.103359.html?floor=3#3

老虎会游泳 35楼回复 老虎会游泳【网页插件】图片点击加载(测试版 r8) (2022-07-31//)

@无名啊$(document).ready()事件在DOMContentLoaded事件之后发生。

老虎会游泳 33楼回复 老虎会游泳【网页插件】图片点击加载(测试版 r8) (2022-07-31//)

@无名啊,问题好像并不是同时触发,而是$(document).ready()事件在DOMContentLoaded事件之后发生。
不过现在研究这个问题无意义了,因为我的代码现在位于立即执行表达式中,总是最先执行。
我确实想到一个解决方法,就是用setTimeout推迟onclick事件的绑定。

$(document).ready(function () {
    document.querySelectorAll('.userimg, .userthumb').forEach(img => (img.onclick = function () {
        // 链接中的图片不预览
        if (0 !== $(this).parents('a').length) return;

        let elem = document.querySelector('body');
        let viewer = new Viewer(elem, {
            hidden: () => viewer.destroy(),
            filter(image) {
                return image.matches('.userimg, .userthumb');
            }
        });

        viewer.show()
    }));
});
老虎会游泳 32楼回复 老虎会游泳【网页插件】图片点击加载(测试版 r8) (2022-07-31//)

@无名啊,既然MDN这么说,那么问题就不是执行顺序问题,而是onclickaddEventListener('click')互不影响,可以同时触发。

老虎会游泳 30楼回复 老虎会游泳【网页插件】图片点击加载(测试版 r8) (2022-07-31//)

@无名啊deferDOMContentLoaded之后执行,而且onclickaddEventListener('click')互不影响,可以同时触发。

老虎会游泳 28楼回复 老虎会游泳【网页插件】图片点击加载(测试版 r8) (2022-07-31//)

@无名啊,现在我把插件代码改到底部了,我的代码改成立即执行表达式了,加载时也不会闪一下再消失了。

请求确实发出了,但首先请求的是hu60.cn,那个302重定向给JS代码的执行和后续请求的取消保留了足够的时间,最终没有到file.hu60.cn的请求发出。

图片.png(105.61 KB)

老虎会游泳 27楼回复 老虎会游泳【网页插件】图片点击加载(测试版 r8) (2022-07-31//)
@无名啊,把插件放在网页底部,就可以取消事件监听器了。直接把代码暴露在最外层即可。这样就会在DOM解析好之后立即执行。
老虎会游泳 26楼回复 老虎会游泳【网页插件】图片点击加载(测试版 r8) (2022-07-31//)
@无名啊,额,好像并非总是如此。有时候请求确实发出了,只是随后取消了。看起来必须把插件添加到网页底部,才能及时执行。

image.png(189.05 KB)
老虎会游泳 24楼回复 老虎会游泳【网页插件】图片点击加载(测试版 r8) (2022-07-31//)

@无名啊,为什么我强调“安装我的插件”,因为我可以保证我的插件里只有同步代码,所以执行时机一定是及时的。如果插件包含异步代码(async/await),那执行就不及时了,执行可能发生在多媒体内容开始加载之后,而非之前。

老虎会游泳 23楼回复 老虎会游泳【网页插件】图片点击加载(测试版 r8) (2022-07-31//)

@无名啊,你的感觉可能不准确,你可以安装我的插件,关闭表情插件(因为表情插件有很多图片),然后自己看F12控制台。在用户点击前并没有图片请求发出。

老虎会游泳 21楼回复 老虎会游泳【网页插件】图片点击加载(测试版 r8) (2022-07-31//)
@无名啊,至于不在file.hu60.cn上的文件,如果alt里没有大小,那在不请求服务器的情况下,自然没有任何办法得知其大小。
老虎会游泳 19楼回复 老虎会游泳【网页插件】图片点击加载(测试版 r8) (2022-07-31//)

@无名啊所有位于file.hu60.cn的文件都可以使用

function getSizeFromUrl(url) {
      url = hu60_decode_url64(url);
      var parts = url.match(/\/file\/(?:hash\/[^\/]+\/[a-f0-9]{32}|uuid\/[^\/]+\/[a-f0-9-]{36})(\d+)\b/);
      return parts ? parseInt(parts[1]) : 0;
    }

获取文件大小。

文件路径是这样生成的:

        if ($fileMd5 !== null) {
            $key = 'file/hash/' . $type . '/' . $fileMd5 . $fileSize . $ext;
        } else {
            $uuid = str::guidv4();
            $key = 'file/uuid/' . $type . '/' . $uuid . $fileSize . $ext;
        }
老虎会游泳 16楼回复 老虎会游泳【网页插件】图片点击加载(测试版 r8) (2022-07-31//)

@无名啊有没有直接获取文件大小的方法,有,file.hu60.cn的文件大小在URL末尾。此外新上传的图片,alt里也会有文件大小。

    function getSizeFromUrl(url) {
      url = hu60_decode_url64(url);
      var parts = url.match(/\/file\/(?:hash\/[^\/]+\/[a-f0-9]{32}|uuid\/[^\/]+\/[a-f0-9-]{36})(\d+)\b/);
      return parts ? parseInt(parts[1]) : 0;
    }
    function getImgSize(img) {
      if (img.alt) {
        var parts = img.alt.match(/([0-9]+(:?\.[0-9]+)?\s*(?:[KMGT]B|bytes))/);
      	if (parts) return parts[1];
      }
      var size = getSizeFromUrl(img.src);
      return size > 0 ? humanize.filesize(size) : '';
    }
老虎会游泳 15楼回复 老虎会游泳【网页插件】图片点击加载(测试版 r8) (2022-07-31//)

@无名啊,我猜viewer.js是通过addEventListener的方式添加点击事件的。

老虎会游泳 1楼回复 安洛sp适配方块游戏平台 (2022-07-30//)

@安洛sp,我也搞不定,就是白屏,不知道该怎么解决。

老虎会游泳 3楼回复 胡图图求一个中文版的安卓vnc (2022-07-29//)

https://hu60.cn/q.php/bbs.topic.93426.html#nav

开头和结尾各有一个VNC客户端。

老虎会游泳 2楼回复 胡图图求一个中文版的安卓vnc (2022-07-29//)

@胡图图,你得习惯华为应用市场什么也没有的现状。

老虎会游泳 3楼回复 胡图图WireGuard和nebula都能用来组网吗? (2022-07-29//)

@胡图图,没有

老虎会游泳 1楼回复 胡图图WireGuard和nebula都能用来组网吗? (2022-07-29//)

刚听说

Screenshot_20220729_103650.jpg

老虎会游泳 6楼回复 老虎会游泳【网页插件】图片点击加载(测试版 r8) (2022-07-28//)

@秀才,我又修改了一下,实现了对包含外层链接的图片的兼容。现在点击一次加载图片,点击两次打开链接。

下一页 上一页 (58 / 113页)

3月3日 18:01 星期二

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1