javascript - slim 组件 onLoad

标签 javascript svelte

有没有办法知道 Svelte 组件何时完成了所有外部资源的加载,而不是 onMount ?
它类似于 onload window的事件.
编辑:为了解决问题,我希望一个组件在完全加载其所有图像后做一些事情。
EDIT2:我决定使用 javascript 来加载图像。在我看来,这不是最干净的做事方式,但它确实有效。
谢谢!

最佳答案

EDIT2: I decided to use javascript to load images. In my opinion, this is not the cleanest way to do things, but it works. Thank you!


这就是要走的路。 Svelte 不会尝试包装所有 JS,而只会包装它可以增加真正值(value)的东西。在这里,JS 完全可以满足这种需求。
您可以使用 Svelte action使其更容易重复使用:
<script>
    let waiting = 0
    
    const notifyLoaded = () => {
        console.log('loaded!')
    }
    
    const onload = el => {
        waiting++
        el.addEventListener('load', () => {
            waiting--
            if (waiting === 0) {
                notifyLoaded()
            }
        })
    }
</script>

<img use:onload src="https://place-hold.it/320x120" alt="placeholder" />

<img use:onload src="https://place-hold.it/120x320" alt="placeholder" />
如果您需要在多个组件中重用它,您可能希望将此模式包装到工厂(REPL)中:util.js
export const createLoadObserver = handler => {
  let waiting = 0

  const onload = el => {
      waiting++
      el.addEventListener('load', () => {
          waiting--
          if (waiting === 0) {
              handler()
          }
      })
  }
  
  return onload
}
App.svelte
<script>
    import { createLoadObserver } from './util.js'
    
    const onload = createLoadObserver(() => {
        console.log('loaded!!!')
    })
</script>

<img use:onload src="https://place-hold.it/320x120" alt="placeholder" />

<img use:onload src="https://place-hold.it/120x320" alt="placeholder" />

关于javascript - slim 组件 onLoad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64959908/

相关文章:

javascript - VueJS - 传递函数名和调用的区别

javascript - 如何消除 angular-cli 站点中的渲染阻塞?

javascript - API 调用失败时在浏览器控制台中显示错误是否不好?

svelte - 在 https 上运行 svelte dev

css - 不知道我们如何从导入的组件中删除填充

javascript - 是否可以使用 CSS 突出显示相邻的相同值表格单元格?

javascript - 添加 jquery 滚动功能后无法导航到我网站中的其他页面

javascript - 正则表达式返回错误值

javascript - 使用 Sapper,如何在出现 404 错误时重定向到索引页面?

cors - 使用 Confluent Cloud 和 Kafka 的 CORS 策略阻止了 API 请求