簡體   English   中英

如何編寫“延遲”的 svelte 組件?

[英]How to write a "Delayed" svelte component?

我正在嘗試編寫一個在指定時間內隱藏其插槽的 Svelte 組件。

例如,下一行應在 3 秒內隱藏該段落

<Delayed mili_time={3000}> <p>some text</p> <Delayed>

我的嘗試沒有奏效,也沒有顯示任何內容(盡管沒有出現錯誤,但顯示了日志)我很樂意收到一些幫助、提示或指導。

嘗試:

<script>

import { onMount} from "svelte";

  export let mili_time = 500;
  let shown = false;


  onMount(
    setTimeout(() => {
      console.log("delayed!");
      shown = true;
    }, mili_time)
  );
</script>

{#if shown}
<slot />
{/if}


<style></style>

提前感謝任何閱讀或回答直到問題結束的人^^

您的onMount格式錯誤,當您有一個function 調用時,它需要一個function作為參數。

正確的格式是:

onMount(() => setTimeout(....)

這樣function () => setTimeout(...)將被執行。

在您的代碼中,調用了 setTimeout function 並將 function 的返回值(對超時的引用)傳遞到onMount

使用 100% 原生組件:

 <delayed-content delay="1000" hidden> <h1>Hello World</h1> </delayed-content> <script> customElements.define("delayed-content", class extends HTMLElement { connectedCallback() { setTimeout(() => { this.removeAttribute("hidden"); }, Number(this.getAttribute("delay"))); } }); </script>

您可以在渲染后設置超時並使用 CSS class 隱藏元素,如下所示:

<script>
  import { onMount } from 'svelte';

  export let timeout = 3000;
  export let hidden = false;

  onMount(() => {
    setTimeout(() => {
      hidden = true;
    }, timeout);
  });
</script>

<div class:hidden>
  <p>Some cool content here</p>
</div>

<style type="text/css">
  .hidden {
    display: none;
  }
</style>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM