相关疑难解决方法(0)

jQuery回调图像加载(即使图像被缓存)

我想要做:

$("img").bind('load', function() {
  // do stuff
});
Run Code Online (Sandbox Code Playgroud)

但是从缓存加载图像时不会触发加载事件.jQuery文档提出了一个修复此问题的插件,但它不起作用

jquery image jquery-load jquery-events

282
推荐指数
8
解决办法
36万
查看次数

如何检查jQuery或纯JavaScript中是否存在文件?

如何检查我的服务器上的文件是否存在于jQuery或纯JavaScript中?

javascript file-io jquery

255
推荐指数
10
解决办法
41万
查看次数

jQuery或JavaScript:确定图像何时完成加载

如何从服务器或浏览器缓存中检测图像何时完成加载?我想在同一个<img/>标签中加载各种图像,并检测新图像的加载何时完成.

谢谢.

javascript jquery load image complete

22
推荐指数
2
解决办法
3万
查看次数

同构/通用反应中的图像onLoad事件 - 加载图像后注册事件

在同构呈现的页面图像可以在主script.js文件之前下载.因此,可以在react注册onLoad事件之前加载图像- 从不触发此事件.

script.js

constructor(props) {
    super(props);
    this.handleImageLoaded = this.handleImageLoaded.bind(this);
}

handleImageLoaded() {
    console.log('image loaded');
} 

render() {
    return (
        <img src='image.jpg' onLoad={this.handleImageLoaded} />
    );
}
Run Code Online (Sandbox Code Playgroud)

场景1 - image.jpg大于script.js

image.jpg比script.js大

在这种情况下一切正常.在最终加载图像之前注册事件,因此在控制台中是image loaded消息.


场景2 - image.jpg小于script.js

image.jpg小于script.js

在这种情况下,您可以看到帖子开头描述的问题.onLoad事件未触发.


为了onLoad方案2中触发事件,我该怎么办?


编辑:Soviut答案实施

要检测渲染时图像是否准备好,您应该检查complete纯javascript img对象上的属性:

constructor(props) {
    super(props);
    this.state = { loaded: false };
    this.handleImageLoaded = this.handleImageLoaded.bind(this);
    this.image = React.createRef();
}

componentDidMount() {
    const img …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs isomorphic-javascript

18
推荐指数
4
解决办法
1万
查看次数

Firefox不会在拖放幻影预览中显示图像

我正在尝试显示ghost元素而不是拖放的默认浏览器预览.问题是在拖动时不显示ghost元素内的ghost元素.但是,如果我放下它,再次拖动图像就会显示出来.

所以我认为这可能是某种与缓存相关的问题.但在这种情况下,我无法看到如何预先缓存图像.

这是代码:

// HTML:

<div class="parent container">
<img class="element" src="http://www.thekrausemouse.com/wp-content/uploads/2016/03/Sample.jpg" draggable="true" />
</div>
Run Code Online (Sandbox Code Playgroud)

// JS:

document.querySelector(".element").addEventListener("dragstart", function(e) {
    var img = document.createElement("img");
    var div = document.createElement('div');
    div.style.width = '100px';
    div.style.height = '100px';
    div.style.position = 'fixed';
    div.style.top = '-1000000px';
    div.style.left = '-1000000px';
    div.style.border = '2px solid red';

    img.src = "http://www.thekrausemouse.com/wp-content/uploads/2016/03/Sample.jpg";
    img.style.width = '100px';
    img.style.height = '100px';
    div.appendChild(img);
    document.body.appendChild(div);
    e.dataTransfer.setData('text/plain', 'test');
    e.dataTransfer.setDragImage(div, 0, 0);
}, false);
Run Code Online (Sandbox Code Playgroud)

小提琴:https: //jsfiddle.net/etseq5cg/5/

重现步骤:

1)打开小提琴/运行片段

2)尝试拖动样本图像

实际:你会看到一个带红色边框的空方块

预期:里面有图像的方形.

要再次重现它,您需要强制重新加载页面(ctrl + f5).这就是为什么我认为这是缓存相关的问题.

注意:我知道我应该在dragend处理程序中从DOM中删除ghost元素,但这在这里并不重要. …

html javascript css firefox drag-and-drop

16
推荐指数
1
解决办法
1256
查看次数

Google Maps v3:如何判断ImageMapType叠加层的拼贴何时完成加载?

我正在使用Google Maps v3 API,我有一个基于ImageMapType类的自定义叠加层.我想在加载叠加的瓷砖时显示某种加载指示,但我看不出有什么方法可以知道它们何时完成.

创建叠加层的代码类似于以下内容:

var myOverlay = new google.maps.ImageMapType({
    getTileUrl: myGetTileUrl,
    tileSize: new google.maps.Size(256, 256),
    isPng: true
});

myMap.overlayMapTypes.push(myOverlay);
Run Code Online (Sandbox Code Playgroud)

以上工作正常,叠加成功加载; 它似乎没有地图发出任何事件来指示ImageMapType覆盖的状态.

我希望地图至少在瓦片完成加载时发出"空闲"事件,但据我所知,它没有.

我怎么知道ImageMapType覆盖完成加载的时间?

编辑

我在jsFiddle上写了一个测试用例:http://jsfiddle.net/6yvcB/ - 观察你的控制台输出中的"闲置"这个词来查看空闲事件何时触发.请注意,单击按钮添加叠加层时,它永远不会触发.

还有,小猫.

javascript events google-maps google-maps-api-3

7
推荐指数
1
解决办法
7035
查看次数

How to fade in images when loaded with Vue

I created this component that fades in an image once it is loaded to the client. I would think there is a more Vue-like way to solve this, like using Vue events, but could not find it. What is the Vue way to detect when an image is loaded?

https://codepen.io/kslstn/pen/ooaPGW

Vue.component('imageThatFadesInOnLoad',{

  data: function(){
    return {
      src: 'http://via.placeholder.com/350x150',
      loaded: false,
    }
  },

  mounted: function () {
    var image = new Image()
    var that =  this
    this.loaded = image.addEventListener('load', function(){that.onLoaded()}) // This …
Run Code Online (Sandbox Code Playgroud)

javascript vuejs2

5
推荐指数
1
解决办法
8959
查看次数

onload 或 addEventListener 的顺序以及设置图像的 src 的顺序实际上重要吗?

长期以来,我一直将其视为“绝对真理”:

\n
let img = new Image();\nimg.src = \'... some url ...\'\nimg.onload = function() { console.log(\'onload\') }\n
Run Code Online (Sandbox Code Playgroud)\n

错误的,因为.onload处理程序可能不会被调用。.addEventListener(\'load\', function() ... )设置后使用附加处理程序也是如此.src:它可能不起作用。(请参阅此示例答案,说明:“...在为 src 属性分配值之前添加事件侦听器...”)

\n
\n

这个问题的背景:我在流行的 p5.js 库中找到了一个.src调用之前设置的示例,特别是在这里。我想解决这个问题并提交 PR。但是,我还想创建一个单元测试,该测试在当前代码(调用之前的设置)中失败,并在我的修复中通过。.addEventListener.src =.addEventListener

\n

然而!我还没能真正看到.src之前的设置在什么情况下实际上失败了......!

\n
\n

这是一些代码来演示我的意思:

\n
(function f() {\n  let i = new Image();\n  i.src = \'//placekitten.com/10/10\';\n  document.querySelector(\'body\').appendChild(i);\n  \n  let out = 0;\n  for(let i = 0; …
Run Code Online (Sandbox Code Playgroud)

javascript dom

5
推荐指数
1
解决办法
623
查看次数

图片延迟加载策略;我可能会遇到什么问题?

我正在研究延迟加载图像的缺点,并且我必须非常彻底,因为我们正在考虑loading="lazy"在网站中的许多/大多数图像上实施。原因我相信我有一个可行的策略。

我们正在使用 browser-nativeloading="lazy"属性,因为我们最近放弃了对 IE 的支持。哇,我知道。

我们在整个网站上将首屏上方的所有图像设置为 eager,将下方的所有图像设置为惰性图像。

然后我们监听页面加载事件并运行一个脚本,将每个图像转换为loading="lazy"(loading="eager"auto)。因此,在大多数情况下,折叠下方的图像也将被加载,可能在用户滚动时(至少使用现代互联网连接速度)。页面load事件在所有急切加载的图像完成后触发,但可能/应该在延迟加载的图像开始之前触发,因此这是我们触发折叠下方加载的机会。

一个已知的缺点是,延迟加载的图像可能会在用户滚动时导致布局发生变化,因为浏览器在图像开始加载之前不知道尺寸。另一个缺点是,用户可能会对滚动到图像时尚未加载的图像感到恼火。该解决方案通过在加载优先级图像后立即转换剩余的延迟加载图像来解决这两个问题eager,以减少用户遇到这些问题的机会。

还有一种可能是,在某些特定情况下,JavaScript 片段正在等待图像加载以便对其执行某些操作,这有时会阻止渲染。让我们把它当作一个次要问题。我认为我们不太可能在这个网站上遇到这种情况,我们会在出现问题的地方修复它。

附注,我还设计了一个脚本,用于观察外部脚本在 DOM 上填充或操作的元素,并将任何新添加的img元素转换为loading="lazy"(如果它发生在页面加载之前),因此我能够保证延迟加载img页面上的所有元素,它确实使 Lighthouse 加载性能提高了几个点。

到目前为止,我还没有发现延迟加载页面上的每个或大多数图像带来的许多严重和/或可能的问题,因为它是用我设计的策略来处理的。

我的问题是我错过了什么。这个策略会不会有漏洞?

我还需要考虑哪些其他因素?因为我不希望我的决定给我正在工作的网站带来问题。

html layout lazy-loading image

5
推荐指数
1
解决办法
1313
查看次数