国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 web前端 js教程 使管道可見以監(jiān)控博客部署

使管道可見以監(jiān)控博客部署

Jan 14, 2025 pm 02:29 PM

Computaria 讓我困擾的一件事是無法跟蹤博客本身的部署。那么,既然這讓我煩惱,為什么不解決它呢?

管道

目前有兩種方法可以知道部署是否正在運行:

  • 在作業(yè)/管道頁面上打開存儲庫并查看最新的正在運行的
  • 在存儲庫中打開并滾動到 README.md

這兩種解決方案對我來說似乎都不太好。我想要計算本身更輕松的東西。

這個想法

與 Kauê 短暫協商后,我決定遵循他的提示:在 /about 上發(fā)帖。

在第一個實驗中:

Deixando a pipeline visível para acompanhar deploy do blog

不,它變得丑陋了。我已經知道我不希望它默認出現。但帶上信息就足夠了。我只需要隱藏丑陋的東西,并在明確要求的情況下使其可用,即使是丑陋的。

概念證明:除非指定否則會崩潰

嗯,首先要做的是知道我們是否應該采取任何行動。為此,將查詢參數 status 的值為 true 的存在定義為 API。

為了獲取 URL,我使用了 window.location。 Location 對象內部有一個搜索字段,它精確地用于維護用于訪問特定 URL 的查詢參數。

例如,對于 http://localhost:4000/blog/about?q=1,window.location.search 的值為 ?q=1。為了更容易處理查詢參數中的內容,有一個 URLSearchParams 類型的對象。據我從文檔中可以理解,要實例化 URLSearchParams,我需要查詢字符串,但沒有 ?的前綴。我可以使用 window.location.search.substring(1).

來實現這一點

現在,有了這個對象,我可以簡單地查詢我想要的任何查詢參數的值:

const queryParams = new URLSearchParams(window.location.search.substring(1));

if (queryParams.get("status") === "true") {
    console.log("oba, vamos exibir o pipeline!")
} else {
    console.log("nops, n?o vamos exibir nada")
}

有了這個,我需要采取顯示管道徽章的操作。為了方便起見,我決定將其作為可包含的 HTML 片段:_includes/pipeline.html。因此,我可以按照我認為合適的方式操作免費的 HTML。

一開始,它只是一個

看不見的:

<div>



<p>Para importar, no /about só precisei colocar {%include pipeline.html%} no come?o do arquivo, o Jekyll se encarregou de montar tudo certo.</p>

<p>Ok, vamos por o script para detectar se deveria ou n?o exibir a tag:<br>
</p>

<pre class="brush:php;toolbar:false"><script>
    const queryParams = new URLSearchParams(window.location.search.substring(1));

    if (queryParams.get("status") === "true") {
        console.log("oba, vamos exibir o pipeline!")
    } else {
        console.log("nops, n?o vamos exibir nada")
    }
</script>
<div>



<p>So far, so good. Agora, vamos mudar a exibi??o para display: block caso seja para exibir o pipeline, ou sumir logo de uma vez com a <div>. Pelo console da web, bastaria fazer algo nesse esquema:<br>
</p>

<pre class="brush:php;toolbar:false">const pipeline = document.getElementById("pipeline")

if (...) {
    pipeline.style.display = "block"
} else {
    pipeline.remove()
}

放置在 HTML 片段中:

<script>
    const queryParams = new URLSearchParams(window.location.search.substring(1));
    const pipeline = document.getElementById("pipeline")

    if (queryParams.get("status") === "true") {
        pipeline.style.display = "block"
    } else {
        pipeline.remove()
    }
</script>
<div>



<p>E... falhou. Por quê? Porque no momento que a fun??o rodar ainda n?o tem definido quem é o elemento com id pipeline. Ent?o preciso mudar o ciclo de vida para rodar o script apenas quando a página for carregada. Basta colocar o <script defer>, certo? Bem, n?o. Porque defer n?o funciona bem com inline, apenas com arquivo de source explícito. Veja a documenta??o.

<p>Ou seja, precisei colocar o arquivo JavaScript explicitamente para o Computaria. Como a priori tudo que está solto na pasta do blog é colocado como asset disponível para o Jekyll publicar, criei o js/pipeline-loader.js:<br>
</p>

<pre class="brush:php;toolbar:false"><script src="{{ "/js/pipeline-loader.js" | prepend: site.baseurl }}" defer>
</script>
<div>



<p>E no script:<br>
</p>

<pre class="brush:php;toolbar:false">const queryParams = new URLSearchParams(window.location.search.substring(1));
const pipeline = document.getElementById("pipeline")

if (queryParams.get("status") === "true") {
    pipeline.style.display = "block"
} else {
    pipeline.remove()
}

太好了,讓我們做一些有用的事情并發(fā)布圖片?要動態(tài)創(chuàng)建元素,只需使用 document.createElement 即可。然后我輸入徽章網址:

const queryParams = new URLSearchParams(window.location.search.substring(1));
const pipeline = document.getElementById("pipeline")

if (queryParams.get("status") === "true") {
    pipeline.style.display = "block"

    const pipelineImg = document.createElement("img")
    pipelineImg.src = "{{site.repository.base}}/badges/master/pipeline.svg"

    pipeline.appendChild(pipelineImg)
} else {
    pipeline.remove()
}

但是它顯示了一個破碎的圖像...嗯,控制臺上顯示的消息是什么?

GET http://localhost:4000/blog/about/{{site.repository.base}}/badges/master/pipeline.svg [HTTP/1.1 404 Not Found 4ms]

奇怪,他應該得到了可愛的存儲庫 URL 嗎?哦,我注意到了。他根本沒有處理Liquid。為了解決這個問題,我決定遵循 css/main.scss 中的示例,一個空的 frontmatter。

const queryParams = new URLSearchParams(window.location.search.substring(1));

if (queryParams.get("status") === "true") {
    console.log("oba, vamos exibir o pipeline!")
} else {
    console.log("nops, n?o vamos exibir nada")
}

這會給出錯誤消息,因為 frontmatter 不是 javascript,并且錯誤顯示在第一個 const 中。由于這讓我很困擾,我想到的最直接的處理方法就是盡早創(chuàng)建一個“無害的錯誤”。我添加了一個 ;緊接在前言之后:

<div>



<p>Para importar, no /about só precisei colocar {%include pipeline.html%} no come?o do arquivo, o Jekyll se encarregou de montar tudo certo.</p>

<p>Ok, vamos por o script para detectar se deveria ou n?o exibir a tag:<br>
</p>

<pre class="brush:php;toolbar:false"><script>
    const queryParams = new URLSearchParams(window.location.search.substring(1));

    if (queryParams.get("status") === "true") {
        console.log("oba, vamos exibir o pipeline!")
    } else {
        console.log("nops, n?o vamos exibir nada")
    }
</script>
<div>



<p>So far, so good. Agora, vamos mudar a exibi??o para display: block caso seja para exibir o pipeline, ou sumir logo de uma vez com a <div>. Pelo console da web, bastaria fazer algo nesse esquema:<br>
</p>

<pre class="brush:php;toolbar:false">const pipeline = document.getElementById("pipeline")

if (...) {
    pipeline.style.display = "block"
} else {
    pipeline.remove()
}

煩惱...

當我繼續(xù)測試時,我注意到網絡選項卡中不斷出現308,但為什么會出現?嗯,因為展開 Liquid 時,它最終在徽章前出現了一個雙條。

我最初得到的是這個:

  • https://gitlab.com/computaria/blog//badges/master/pipeline.svg

重定向至:

  • https://gitlab.com/computaria/blog/badges/master/pipeline.svg

當我分析我是否使用緩存時,這開始困擾我。為了解決這個問題,我應該去掉雙斜杠。我可以通過不在 Liquid 值展開后放置斜杠來擺脫它,因為畢竟我可以先驗地知道 {{site.repository.base}} 字符串以 / 結尾。但是,為了以防萬一,將斜線放在 /badges/master/pipeline.svg 之前實際上并沒有什么壞處,它甚至是我作為讀者的一個指標。

但是,由于我不想依賴先驗知識來判斷此欄是否存在,因此我有兩個選擇:

  • 處理 Liquid 擴展級別以刪除終端斜線
  • 在 JavaScript 級別處理此字符串的創(chuàng)建

JavaScript 方面對我來說似乎更容易。所以只需將/替換為/,對嗎?嗯,不。由于協議出現在 :// 之前,因此僅進行粗略替換就會導致 url 開頭如下:https://computaria.gitlab.io。為了解決這個問題,我進行了以下替換:

<script>
    const queryParams = new URLSearchParams(window.location.search.substring(1));
    const pipeline = document.getElementById("pipeline")

    if (queryParams.get("status") === "true") {
        pipeline.style.display = "block"
    } else {
        pipeline.remove()
    }
</script>
<div>



<p>E... falhou. Por quê? Porque no momento que a fun??o rodar ainda n?o tem definido quem é o elemento com id pipeline. Ent?o preciso mudar o ciclo de vida para rodar o script apenas quando a página for carregada. Basta colocar o <script defer>, certo? Bem, n?o. Porque defer n?o funciona bem com inline, apenas com arquivo de source explícito. Veja a documenta??o.

<p>Ou seja, precisei colocar o arquivo JavaScript explicitamente para o Computaria. Como a priori tudo que está solto na pasta do blog é colocado como asset disponível para o Jekyll publicar, criei o js/pipeline-loader.js:<br>
</p>

<pre class="brush:php;toolbar:false"><script src="{{ "/js/pipeline-loader.js" | prepend: site.baseurl }}" defer>
</script>
<div>



<p>E no script:<br>
</p>

<pre class="brush:php;toolbar:false">const queryParams = new URLSearchParams(window.location.search.substring(1));
const pipeline = document.getElementById("pipeline")

if (queryParams.get("status") === "true") {
    pipeline.style.display = "block"
} else {
    pipeline.remove()
}

分解:

  • 代替替換,將在“第一組”中找到的內容放在后面加上斜線
  • 正則表達式匹配:除 :(在一組中)、斜杠、斜杠以外的任何內容

通過此更改,https:// 不再具有 match 與 ([^:])//,但路徑中 // 的所有其他出現都具有完美匹配,因為它們不會前面一個:.更嚴格地說,我可以努力防止匹配在查詢參數/片段中發(fā)生,但這似乎太過分了。

概念證明:無緩存加載

好的,定義了放置位置和鎖定機制的詳細信息后,我們需要一個重新加載機制。第一次嘗試:簡單地創(chuàng)建一個新的圖像元素。但還是這樣,怎么辦?理想的情況是“一段時間后”。所以這給了我兩個選擇,可以說:

  • 設置超時
  • 設置間隔

好吧,我們來看看它有什么作用? setTimeout 接收一個命令,該命令將在一段時間間隔以及給定的時間間隔后執(zhí)行。它會返回一個 ID,您可以使用clearTimeout 將其刪除。如需重復調用,需要在最后再次調用setTimeout。

setInterval 幾乎是同樣的事情,只是它總是在時間間隔之后執(zhí)行命令。返回值應該是一個 ID,您可以調用clearInterval 來刪除它,但根據文檔,它也可以與clearTimeout 一起使用(以防萬一,不要相信它,請使用具有正確語義的 ID)。

使用setTimeout

我們應該使用 setTimeout 創(chuàng)建一個循環(huán)調用嗎?在文本字段中打印“南瓜”一詞 5 次怎么樣?我將為這個實驗放置一個文本區(qū)域:

const queryParams = new URLSearchParams(window.location.search.substring(1));

if (queryParams.get("status") === "true") {
    console.log("oba, vamos exibir o pipeline!")
} else {
    console.log("nops, n?o vamos exibir nada")
}

好的,我想通過 HTML 訪問 3 個函數。他們分裂(即使是非常輕微的)一個國家。我很喜歡隱藏東西,所以我不希望這種狀態(tài)在 <script> 標簽之外可見。</script>

我最明顯的解決方案是將其放在一個塊下,因此,當離開該塊時,里面的變量將在外面不可見:

<div>



<p>Para importar, no /about só precisei colocar {%include pipeline.html%} no come?o do arquivo, o Jekyll se encarregou de montar tudo certo.</p>

<p>Ok, vamos por o script para detectar se deveria ou n?o exibir a tag:<br>
</p>

<pre class="brush:php;toolbar:false"><script>
    const queryParams = new URLSearchParams(window.location.search.substring(1));

    if (queryParams.get("status") === "true") {
        console.log("oba, vamos exibir o pipeline!")
    } else {
        console.log("nops, n?o vamos exibir nada")
    }
</script>
<div>



<p>So far, so good. Agora, vamos mudar a exibi??o para display: block caso seja para exibir o pipeline, ou sumir logo de uma vez com a <div>. Pelo console da web, bastaria fazer algo nesse esquema:<br>
</p>

<pre class="brush:php;toolbar:false">const pipeline = document.getElementById("pipeline")

if (...) {
    pipeline.style.display = "block"
} else {
    pipeline.remove()
}

好的,但是如何讓函數可見呢?好吧,經過實驗,我找到了一種方法:函數轉義作用域。由于局部變量沒有超出塊的限制,我仍然可以在塊內部放置一些輔助函數,這樣它們在外部就沒有任何意義。像這樣的東西:

<script>
    const queryParams = new URLSearchParams(window.location.search.substring(1));
    const pipeline = document.getElementById("pipeline")

    if (queryParams.get("status") === "true") {
        pipeline.style.display = "block"
    } else {
        pipeline.remove()
    }
</script>
<div>



<p>E... falhou. Por quê? Porque no momento que a fun??o rodar ainda n?o tem definido quem é o elemento com id pipeline. Ent?o preciso mudar o ciclo de vida para rodar o script apenas quando a página for carregada. Basta colocar o <script defer>, certo? Bem, n?o. Porque defer n?o funciona bem com inline, apenas com arquivo de source explícito. Veja a documenta??o.

<p>Ou seja, precisei colocar o arquivo JavaScript explicitamente para o Computaria. Como a priori tudo que está solto na pasta do blog é colocado como asset disponível para o Jekyll publicar, criei o js/pipeline-loader.js:<br>
</p>

<pre class="brush:php;toolbar:false"><script src="{{ "/js/pipeline-loader.js" | prepend: site.baseurl }}" defer>
</script>
<div>



<p>E no script:<br>
</p>

<pre class="brush:php;toolbar:false">const queryParams = new URLSearchParams(window.location.search.substring(1));
const pipeline = document.getElementById("pipeline")

if (queryParams.get("status") === "true") {
    pipeline.style.display = "block"
} else {
    pipeline.remove()
}

好的,現在我需要處理超時調用。我的想法是執(zhí)行一個步驟,當該步驟完成時,注冊下一個超時,調用相同的步驟。只是為了避免將此步驟永遠限制為幾次。

那么,如果沒有超時問題,會是什么樣子呢?遞歸調用:

const queryParams = new URLSearchParams(window.location.search.substring(1));
const pipeline = document.getElementById("pipeline")

if (queryParams.get("status") === "true") {
    pipeline.style.display = "block"

    const pipelineImg = document.createElement("img")
    pipelineImg.src = "{{site.repository.base}}/badges/master/pipeline.svg"

    pipeline.appendChild(pipelineImg)
} else {
    pipeline.remove()
}

看起來不錯,加個超時怎么樣?嗯,在步驟的主體內部,所以調用步驟就是設置超時。為了一個好的暫停,我需要時間:

GET http://localhost:4000/blog/about/{{site.repository.base}}/badges/master/pipeline.svg [HTTP/1.1 404 Not Found 4ms]

好的,剩下要做的就是保存超時標識符,我們就準備好了。我將這一步放在公開的公共函數中,我們就準備好了:

---
# frontmatter vazio para fazer o parse do liquid
---

const queryParams = new URLSearchParams(window.location.search.substring(1));
const pipeline = document.getElementById("pipeline")

if (queryParams.get("status") === "true") {
    pipeline.style.display = "block"

    const pipelineImg = document.createElement("img")
    pipelineImg.src = "{{site.repository.base}}/badges/master/pipeline.svg"

    pipeline.appendChild(pipelineImg)
} else {
    pipeline.remove()
}

好的,我們現在有好玩的地方了:

參見小提琴 https://jsfiddle.net/jeffque/5Lrasyqk/

使用setInterval

setInterval 的使用非常相似,但“召回”步驟是隱式的。如果我想停止循環(huán),我需要顯式取消注冊的setInterval。

那么,像上面的例子一樣開始怎么樣?但具有不同的暫存區(qū) ID:

---
# frontmatter vazio para fazer o parse do liquid
---
;

const queryParams = new URLSearchParams(window.location.search.substring(1));
const pipeline = document.getElementById("pipeline")

if (queryParams.get("status") === "true") {
    pipeline.style.display = "block"

    const pipelineImg = document.createElement("img")
    pipelineImg.src = "{{site.repository.base}}/badges/master/pipeline.svg"

    pipeline.appendChild(pipelineImg)
} else {
    pipeline.remove()
}

參見小提琴 https://jsfiddle.net/jeffque/5Lrasyqk/

重新加載嘗試

定義了重復計時機制后,現在的問題是定義如何重新加載圖像。首先,分析 GitLab 在搜索徽章時返回的標頭:https://gitlab.com/computaria/blog//badges/master/pipeline.svg:

const queryParams = new URLSearchParams(window.location.search.substring(1));

if (queryParams.get("status") === "true") {
    console.log("oba, vamos exibir o pipeline!")
} else {
    console.log("nops, n?o vamos exibir nada")
}

比較來自不同請求的多個 etag,以防萬一:

<div>



<p>Para importar, no /about só precisei colocar {%include pipeline.html%} no come?o do arquivo, o Jekyll se encarregou de montar tudo certo.</p>

<p>Ok, vamos por o script para detectar se deveria ou n?o exibir a tag:<br>
</p>

<pre class="brush:php;toolbar:false"><script>
    const queryParams = new URLSearchParams(window.location.search.substring(1));

    if (queryParams.get("status") === "true") {
        console.log("oba, vamos exibir o pipeline!")
    } else {
        console.log("nops, n?o vamos exibir nada")
    }
</script>
<div>



<p>So far, so good. Agora, vamos mudar a exibi??o para display: block caso seja para exibir o pipeline, ou sumir logo de uma vez com a <div>. Pelo console da web, bastaria fazer algo nesse esquema:<br>
</p>

<pre class="brush:php;toolbar:false">const pipeline = document.getElementById("pipeline")

if (...) {
    pipeline.style.display = "block"
} else {
    pipeline.remove()
}

嗯,etag 總是相同的,表明它是相同的資源。 cache-control: no-store 強烈告訴我它不是用于存儲緩存的。指向過去的過期時間強烈表明它的目的是表明不應考慮對該資源進行緩存。除非另有證明,cf-cache-status: MISS 僅表示它沒有命中 Cloudflare 的緩存。

最后,嚴格的運輸安全。這意味著什么?這和資源本身有什么關系?

嗯,這與正在訪問的資源無關。但這表明該網站只能通過 HTTPS 訪問。

好的,所有這些都表明圖像不應該是卷曲的。正如預期的那樣,F5 總是會導致它被再次下載。對我來說,這是一個非常有力的指標,如果我的緩存出現問題,它不會出現在服務器或網絡上,而是出現在瀏覽器級別。

第一次嘗試:創(chuàng)建一個新的 img 元素并扔掉之前的元素。

為了方便起見,沒有什么比擁有一個返回元素的函數更好的了:

<script>
    const queryParams = new URLSearchParams(window.location.search.substring(1));
    const pipeline = document.getElementById("pipeline")

    if (queryParams.get("status") === "true") {
        pipeline.style.display = "block"
    } else {
        pipeline.remove()
    }
</script>
<div>



<p>E... falhou. Por quê? Porque no momento que a fun??o rodar ainda n?o tem definido quem é o elemento com id pipeline. Ent?o preciso mudar o ciclo de vida para rodar o script apenas quando a página for carregada. Basta colocar o <script defer>, certo? Bem, n?o. Porque defer n?o funciona bem com inline, apenas com arquivo de source explícito. Veja a documenta??o.

<p>Ou seja, precisei colocar o arquivo JavaScript explicitamente para o Computaria. Como a priori tudo que está solto na pasta do blog é colocado como asset disponível para o Jekyll publicar, criei o js/pipeline-loader.js:<br>
</p>

<pre class="brush:php;toolbar:false"><script src="{{ "/js/pipeline-loader.js" | prepend: site.baseurl }}" defer>
</script>
<div>



<p>E no script:<br>
</p>

<pre class="brush:php;toolbar:false">const queryParams = new URLSearchParams(window.location.search.substring(1));
const pipeline = document.getElementById("pipeline")

if (queryParams.get("status") === "true") {
    pipeline.style.display = "block"
} else {
    pipeline.remove()
}

在 setTimeout 中,我需要刪除 #pipeline 子級并插入新圖像。我通過父親的行動找到的選項是:

  • 刪除子項
  • 替換子項
  • 替換子項

嗯,removeChild 和replaceChild 涉及了解如何保存舊元素以請求將其刪除。另一方面,ReplaceChildren 沒有任何戲劇性,它只是傳遞了新元素,這很好:

const queryParams = new URLSearchParams(window.location.search.substring(1));
const pipeline = document.getElementById("pipeline")

if (queryParams.get("status") === "true") {
    pipeline.style.display = "block"

    const pipelineImg = document.createElement("img")
    pipelineImg.src = "{{site.repository.base}}/badges/master/pipeline.svg"

    pipeline.appendChild(pipelineImg)
} else {
    pipeline.remove()
}

僅此一點就產生了魔力。那么,它的表現如何?

Deixando a pipeline visível para acompanhar deploy do blog

創(chuàng)建新的 img 還不夠。

我發(fā)現的另一個替代方法是再次設置變量值。這樣,就不再需要生成相同元素的函數,我只需“修改”img 指向的 URL 即可。而且,這就是我如何發(fā)現在同一頁面上的多個位置使用相同資源可能會遭受某種緩存的情況......

好吧,如果每次重復都在 URL 末尾添加一個“ ”來嘗試欺騙 GitLab 會怎樣?好吧,gitlab 意識到我不懷好意...

如果它是一個帶有參數或其迭代器傳遞的查詢參數怎么辦?

Deixando a pipeline visível para acompanhar deploy do blog

但是,代價是什么?

好的,這不可能,因為這是一種解決方法,讓我們嘗試獲取它?然后給出fetch之后,想想如何替換圖片?

const queryParams = new URLSearchParams(window.location.search.substring(1));

if (queryParams.get("status") === "true") {
    console.log("oba, vamos exibir o pipeline!")
} else {
    console.log("nops, n?o vamos exibir nada")
}

嗯,錯誤,來自 CORS。既然我無法控制 GitLab,我還能做什么?

使管道可見以監(jiān)控博客部署;沒有重新加載,但

好的,新實驗:簡單地使用 img 標簽創(chuàng)建 /assets/pipeline.html 并從 iframe 指向它。對于強制重新加載操作,我使用了與 Stack Overflow 答案相同的內容:

<div>



<p>Para importar, no /about só precisei colocar {%include pipeline.html%} no come?o do arquivo, o Jekyll se encarregou de montar tudo certo.</p>

<p>Ok, vamos por o script para detectar se deveria ou n?o exibir a tag:<br>
</p>

<pre class="brush:php;toolbar:false"><script>
    const queryParams = new URLSearchParams(window.location.search.substring(1));

    if (queryParams.get("status") === "true") {
        console.log("oba, vamos exibir o pipeline!")
    } else {
        console.log("nops, n?o vamos exibir nada")
    }
</script>
<div>



<p>So far, so good. Agora, vamos mudar a exibi??o para display: block caso seja para exibir o pipeline, ou sumir logo de uma vez com a <div>. Pelo console da web, bastaria fazer algo nesse esquema:<br>
</p>

<pre class="brush:php;toolbar:false">const pipeline = document.getElementById("pipeline")

if (...) {
    pipeline.style.display = "block"
} else {
    pipeline.remove()
}

轉為 HTML

然后,去那里!成功了!

Deixando a pipeline visível para acompanhar deploy do blog

現在,進行調整以使其適合:

  • 徽章充電的停止/重啟控制
  • 在 iframe 中:按照手動編輯 SVG 的提示點咖啡來處理 iframe
  • 文檔內部:刪除正文的邊距,只為徽章留出空間

通過進行這些調整,您可以擺脫困境

Deixando a pipeline visível para acompanhar deploy do blog

為此

Deixando a pipeline visível para acompanhar deploy do blog

您可以檢查這里使用的文件:

  • /about.md
  • /_includes/pipeline.html
  • /assets/pipeline-badge.html
  • /js/pipeline-loader.js

以上是使管道可見以監(jiān)控博客部署的詳細內容。更多信息請關注PHP中文網其他相關文章!

本站聲明
本文內容由網友自發(fā)貢獻,版權歸原作者所有,本站不承擔相應法律責任。如您發(fā)現有涉嫌抄襲侵權的內容,請聯系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅動的應用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

Java vs. JavaScript:清除混亂 Java vs. JavaScript:清除混亂 Jun 20, 2025 am 12:27 AM

Java和JavaScript是不同的編程語言,各自適用于不同的應用場景。Java用于大型企業(yè)和移動應用開發(fā),而JavaScript主要用于網頁開發(fā)。

JavaScript評論:簡短說明 JavaScript評論:簡短說明 Jun 19, 2025 am 12:40 AM

JavascriptconcommentsenceenceEncorenceEnterential gransimenting,reading and guidingCodeeXecution.1)單inecommentsareusedforquickexplanations.2)多l(xiāng)inecommentsexplaincomplexlogicorprovideDocumentation.3)

如何在JS中與日期和時間合作? 如何在JS中與日期和時間合作? Jul 01, 2025 am 01:27 AM

JavaScript中的日期和時間處理需注意以下幾點:1.創(chuàng)建Date對象有多種方式,推薦使用ISO格式字符串以保證兼容性;2.獲取和設置時間信息可用get和set方法,注意月份從0開始;3.手動格式化日期需拼接字符串,也可使用第三方庫;4.處理時區(qū)問題建議使用支持時區(qū)的庫,如Luxon。掌握這些要點能有效避免常見錯誤。

JavaScript與Java:開發(fā)人員的全面比較 JavaScript與Java:開發(fā)人員的全面比較 Jun 20, 2025 am 12:21 AM

JavaScriptIspreferredforredforwebdevelverment,而Javaisbetterforlarge-ScalebackendsystystemsandSandAndRoidApps.1)JavascriptexcelcelsincreatingInteractiveWebexperienceswebexperienceswithitswithitsdynamicnnamicnnamicnnamicnnamicnemicnemicnemicnemicnemicnemicnemicnemicnddommanipulation.2)

為什么要將標簽放在的底部? 為什么要將標簽放在的底部? Jul 02, 2025 am 01:22 AM

PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

JavaScript:探索用于高效編碼的數據類型 JavaScript:探索用于高效編碼的數據類型 Jun 20, 2025 am 12:46 AM

javascripthassevenfundaMentalDatatypes:數字,弦,布爾值,未定義,null,object和symbol.1)numberSeadUble-eaduble-ecisionFormat,forwidevaluerangesbutbecautious.2)

什么是在DOM中冒泡和捕獲的事件? 什么是在DOM中冒泡和捕獲的事件? Jul 02, 2025 am 01:19 AM

事件捕獲和冒泡是DOM中事件傳播的兩個階段,捕獲是從頂層向下到目標元素,冒泡是從目標元素向上傳播到頂層。1.事件捕獲通過addEventListener的useCapture參數設為true實現;2.事件冒泡是默認行為,useCapture設為false或省略;3.可使用event.stopPropagation()阻止事件傳播;4.冒泡支持事件委托,提高動態(tài)內容處理效率;5.捕獲可用于提前攔截事件,如日志記錄或錯誤處理。了解這兩個階段有助于精確控制JavaScript響應用戶操作的時機和方式。

Java和JavaScript有什么區(qū)別? Java和JavaScript有什么區(qū)別? Jun 17, 2025 am 09:17 AM

Java和JavaScript是不同的編程語言。1.Java是靜態(tài)類型、編譯型語言,適用于企業(yè)應用和大型系統(tǒng)。2.JavaScript是動態(tài)類型、解釋型語言,主要用于網頁交互和前端開發(fā)。

See all articles