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

目錄
避免坐標(biāo)轉(zhuǎn)換
SVG到DOM坐標(biāo)轉(zhuǎn)換
DOM到SVG坐標(biāo)轉(zhuǎn)換
轉(zhuǎn)換為變換的SVG坐標(biāo)
關(guān)於從DOM到SVG坐標(biāo)以及反向轉(zhuǎn)換的常見問題解答
DOM和SVG坐標(biāo)有什麼區(qū)別?
如何將DOM坐標(biāo)轉(zhuǎn)換為SVG坐標(biāo)?
如何將SVG坐標(biāo)轉(zhuǎn)換回DOM坐標(biāo)?
viewBox屬性在SVG中的作用是什麼?
如何在我的項(xiàng)目中使用DOM到SVG包?
SVG中的cx屬性是什麼?
我可以在網(wǎng)頁中同時(shí)使用DOM和SVG嗎?
SVG中的坐標(biāo)係與HTML中的坐標(biāo)係有何不同?
如何轉(zhuǎn)換SVG坐標(biāo)?
在DOM和SVG坐標(biāo)之間轉(zhuǎn)換的一些常見用例是什麼?
首頁 web前端 css教學(xué) 如何從DOM轉(zhuǎn)換為SVG坐標(biāo)並再次返回

如何從DOM轉(zhuǎn)換為SVG坐標(biāo)並再次返回

Feb 10, 2025 am 10:05 AM

How to Translate from DOM to SVG Coordinates and Back Again

關(guān)鍵要點(diǎn)

  • SVG擁有自身基於viewBox屬性定義的坐標(biāo)系,可縮放至任意尺寸。這使得根據(jù)光標(biāo)位置添加SVG元素變得複雜,尤其是在響應(yīng)式設(shè)計(jì)中。
  • 嵌入HTML頁面的SVG成為DOM的一部分,可像其他元素一樣操作。這允許完全避免坐標(biāo)系間的轉(zhuǎn)換。
  • 從DOM到SVG坐標(biāo)的轉(zhuǎn)換可通過getBoundingClientRect()方法提取位置和尺寸來實(shí)現(xiàn)。然而,從SVG到DOM坐標(biāo)的轉(zhuǎn)換更具挑戰(zhàn)性,需要使用SVG自身的矩陣分解機(jī)制。
  • SVG或單個(gè)元素可以通過平移、縮放、旋轉(zhuǎn)和/或傾斜進(jìn)行變換,這會(huì)影響最終的SVG坐標(biāo)。 .getScreenCTM()方法可應(yīng)用於任何元素以及SVG本身,以考慮所有變換。

使用SVG相對簡單——直到您想混合DOM和矢量交互。

SVGs在其viewBox屬性中定義了自己的坐標(biāo)系。例如:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 600"></svg>

這設(shè)置了從0,0開始的800單位寬度和600單位高度。這些單位是用於繪圖的任意測量單位,可以使用單位的小數(shù)部分。如果您將此SVG放置在800 x 600像素的區(qū)域中,每個(gè)SVG單位應(yīng)該直接映射到一個(gè)屏幕像素。

但是,矢量圖像可以縮放至任意大小——尤其是在響應(yīng)式設(shè)計(jì)中。您的SVG可以縮小到400 x 300,甚至可以在10 x 1000的空間中拉伸變形。如果您想根據(jù)光標(biāo)位置放置它們,則向此SVG添加更多元素會(huì)變得更加困難。

注意:有關(guān)SVG坐標(biāo)的更多信息,請參閱Sara Soueidan的視口、viewBox和preserveAspectRatio文章。

避免坐標(biāo)轉(zhuǎn)換

您也許能夠完全避免坐標(biāo)系之間的轉(zhuǎn)換。

嵌入HTML頁面(而不是圖像或CSS背景)的SVG成為DOM的一部分,可以像其他元素一樣進(jìn)行操作。例如,一個(gè)包含單個(gè)圓的基本SVG:

<svg id="mysvg" xmlns="https://www.w3.org/2000/svg" viewBox="0 0 800 600" preserveAspectRatio="xMidYMid meet">
  <circle id="mycircle" cx="400" cy="300" r="50" />
</svg>

您可以對其應(yīng)用CSS效果:

circle {
  stroke-width: 5;
  stroke: #f00;
  fill: #ff0;
}

circle:hover {
  stroke: #090;
  fill: #fff;
}

您還可以附加事件處理程序來修改屬性:

const mycircle = document.getElementById('mycircle');

mycircle.addEventListener('click', (e) => {
  console.log('circle clicked - enlarging');
  mycircle.setAttribute('r', 60);
});

下面的示例向SVG圖像添加三十個(gè)隨機(jī)圓圈,在CSS中應(yīng)用懸停效果,並在單擊圓圈時(shí)使用JavaScript將半徑增加十個(gè)單位。

查看CodePen上的示例

SVG到DOM坐標(biāo)轉(zhuǎn)換

可能需要將DOM元素疊加在SVG元素之上——例如,在世界地圖上顯示的活動(dòng)國家/地區(qū)上顯示菜單或信息框。假設(shè)SVG嵌入到HTML中,元素成為DOM的一部分,因此可以使用getBoundingClientRect()方法提取位置和尺寸。 (在上面的示例中打開控制臺,以顯示半徑增加後單擊圓圈的新屬性。)

Element.getBoundingClientRect()在所有瀏覽器中都受支持,並返回一個(gè)DOMRect對象,其中包含以下像素尺寸屬性:

  • .x.left:元素左側(cè)相對於視口原點(diǎn)的x坐標(biāo)
  • .right:元素右側(cè)相對於視口原點(diǎn)的x坐標(biāo)
  • .y.top:元素頂部相對於視口原點(diǎn)的y坐標(biāo)
  • .bottom:元素底部相對於視口原點(diǎn)的y坐標(biāo)
  • .width:元素的寬度(在IE8及以下版本中不受支持,但與.right減去.left相同)
  • .height:元素的高度(在IE8及以下版本中不受支持,但與.bottom減去.top相同)

所有坐標(biāo)都相對於瀏覽器視口,因此在頁面滾動(dòng)時(shí)會(huì)發(fā)生變化??梢酝ㄟ^將window.scrollX添加到.leftwindow.scrollY添加到.top來計(jì)算頁面上的絕對位置。

DOM到SVG坐標(biāo)轉(zhuǎn)換

這更具挑戰(zhàn)性。假設(shè)您想將新的SVG元素放置在其viewBox上單擊事件發(fā)生的位置。事件處理程序?qū)ο筇峁〥OM .clientX.clientY像素坐標(biāo),但必須將其轉(zhuǎn)換為SVG單位。

您可能會(huì)認(rèn)為可以通過應(yīng)用乘法因子來計(jì)算SVG點(diǎn)的坐標(biāo)。例如,如果1000單位寬度的SVG放置在500像素寬的容器中,您可以將任何DOM x坐標(biāo)乘以2以獲得SVG位置。 這行不通! …

  • 不能保證SVG完全適合您的容器。
  • 如果元素尺寸發(fā)生變化——也許是響應(yīng)用戶調(diào)整瀏覽器大小——?jiǎng)t必須重新計(jì)算寬度和高度因子。
  • SVG或一個(gè)或多個(gè)元素可以在2D或3D空間中進(jìn)行變換。
  • 即使您克服了這些障礙,它也永遠(yuǎn)不會(huì)像您預(yù)期的那樣工作,並且經(jīng)常存在誤差。

幸運(yùn)的是,SVG提供了自身的矩陣分解機(jī)制來轉(zhuǎn)換坐標(biāo)。第一步是使用createSVGPoint()方法在SVG上創(chuàng)建一個(gè)點(diǎn),並將屏幕/事件x和y坐標(biāo)傳入:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 600"></svg>

然後,您可以應(yīng)用從SVG的.getScreenCTM()方法的逆矩陣創(chuàng)建的矩陣變換,該方法將SVG單位映射到屏幕坐標(biāo):

<svg id="mysvg" xmlns="https://www.w3.org/2000/svg" viewBox="0 0 800 600" preserveAspectRatio="xMidYMid meet">
  <circle id="mycircle" cx="400" cy="300" r="50" />
</svg>

svgP現(xiàn)在具有.x.y屬性,它們提供SVG viewBox上的坐標(biāo)。

以下代碼將圓圈放置在SVG畫布上單擊的點(diǎn)處:

circle {
  stroke-width: 5;
  stroke: #f00;
  fill: #ff0;
}

circle:hover {
  stroke: #090;
  fill: #fff;
}

注意:createElementNS()方法與標(biāo)準(zhǔn)DOM createElement()方法相同,只是它指定了一個(gè)XML命名空間URI。換句話說,它作用於SVG文檔而不是HTML。

轉(zhuǎn)換為變換的SVG坐標(biāo)

還有一個(gè)更複雜的方面。 SVG或單個(gè)元素可以通過平移、縮放、旋轉(zhuǎn)和/或傾斜進(jìn)行變換,這會(huì)影響最終的SVG坐標(biāo)。例如,以下<g>圖層比標(biāo)準(zhǔn)SVG單位大4倍,因此坐標(biāo)將是包含SVG坐標(biāo)的四分之一:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 600"></svg>

生成的矩形看起來在位置200, 200處具有400單位的寬度和高度。

幸運(yùn)的是,.getScreenCTM()方法可以應(yīng)用於任何元素以及SVG本身。生成的矩陣考慮所有變換,因此您可以創(chuàng)建一個(gè)簡單的svgPoint()轉(zhuǎn)換函數(shù):

<svg id="mysvg" xmlns="https://www.w3.org/2000/svg" viewBox="0 0 800 600" preserveAspectRatio="xMidYMid meet">
  <circle id="mycircle" cx="400" cy="300" r="50" />
</svg>

以下演示在所有現(xiàn)代瀏覽器中都能工作,(如果您將JavaScript轉(zhuǎn)換為ES5,則在IE11中也能工作!)。當(dāng)點(diǎn)擊/點(diǎn)擊SVG時(shí),會(huì)在光標(biāo)點(diǎn)添加一個(gè)圓圈。

當(dāng)點(diǎn)擊變換的<g>區(qū)域時(shí)也會(huì)發(fā)生這種情況,但是將該元素而不是SVG本身傳遞給svgPoint()函數(shù)以確保計(jì)算正確的坐標(biāo):

查看CodePen上的示例

理想情況下,最好避免DOM到/從SVG坐標(biāo)轉(zhuǎn)換,但是,當(dāng)不可能這樣做時(shí),請使用上面描述的方法來確保該過程在所有頁面尺寸下都健壯。

關(guān)於從DOM到SVG坐標(biāo)以及反向轉(zhuǎn)換的常見問題解答

DOM和SVG坐標(biāo)有什麼區(qū)別?

文檔對像模型(DOM)和可縮放矢量圖形(SVG)都是Web開發(fā)的組成部分,但它們具有不同的用途。 DOM是HTML和XML文檔的編程接口。它表示文檔的結(jié)構(gòu),並提供了一種操作其內(nèi)容和視覺表示的方法。另一方面,SVG是一種基於XML的矢量圖像格式,用於二維圖形。兩者之間的主要區(qū)別在於它們的坐標(biāo)系。 DOM使用基於像素的坐標(biāo)系,而SVG使用基於viewBox屬性的系統(tǒng),該系統(tǒng)可以縮放和轉(zhuǎn)換。

如何將DOM坐標(biāo)轉(zhuǎn)換為SVG坐標(biāo)?

將DOM坐標(biāo)轉(zhuǎn)換為SVG坐標(biāo)涉及使用SVG元素的createSVGPoint方法在SVG坐標(biāo)系中創(chuàng)建一個(gè)點(diǎn)。然後,您可以使用matrixTransform方法將該點(diǎn)轉(zhuǎn)換為SVG坐標(biāo)系。此方法採用DOMMatrix對象,該對象表示SVG元素的變換矩陣。

如何將SVG坐標(biāo)轉(zhuǎn)換回DOM坐標(biāo)?

要將SVG坐標(biāo)轉(zhuǎn)換回DOM坐標(biāo),您可以使用SVGMatrix對象的inverse方法。此方法返回一個(gè)新的SVGMatrix對象,它是原始矩陣的逆矩陣。通過將SVG點(diǎn)乘以此逆矩陣,您可以將其轉(zhuǎn)換回DOM坐標(biāo)系。

viewBox屬性在SVG中的作用是什麼?

SVG中的viewBox屬性用於指定SVG圖像的縱橫比和坐標(biāo)系。它允許您控制SVG元素的縮放和定位。 viewBox屬性採用四個(gè)值:min-x、min-y、width和height。這些值定義了SVG坐標(biāo)系中的矩形。

如何在我的項(xiàng)目中使用DOM到SVG包?

DOM到SVG包是用於將DOM坐標(biāo)轉(zhuǎn)換為SVG坐標(biāo)以及反向轉(zhuǎn)換的有用工具。要在您的項(xiàng)目中使用它,您需要使用npm(JavaScript編程語言的包管理器)安裝它。安裝後,您可以在JavaScript文件中引入它並使用其方法執(zhí)行轉(zhuǎn)換。

SVG中的cx屬性是什麼?

SVG中的cx屬性用於指定圓心x坐標(biāo)。它是創(chuàng)建SVG圓的基本屬性之一。 cx屬性的值是用戶坐標(biāo)系中的長度。

我可以在網(wǎng)頁中同時(shí)使用DOM和SVG嗎?

是的,您可以在網(wǎng)頁中同時(shí)使用DOM和SVG。 SVG嵌入在HTML中,因此它是DOM的一部分。您可以使用DOM方法和屬性來操作SVG元素。這使您能夠在網(wǎng)頁上創(chuàng)建動(dòng)態(tài)和交互式圖形。

SVG中的坐標(biāo)係與HTML中的坐標(biāo)係有何不同?

SVG中的坐標(biāo)係與HTML中的坐標(biāo)係不同。在HTML中,坐標(biāo)係是基於像素的,原點(diǎn)位於頁面的左上角。在SVG中,坐標(biāo)係由viewBox屬性定義,原點(diǎn)位於viewBox的左上角。這使得SVG圖形可以縮放且與分辨率無關(guān)。

如何轉(zhuǎn)換SVG坐標(biāo)?

您可以使用transform屬性轉(zhuǎn)換SVG坐標(biāo)。此屬性允許您對SVG元素應(yīng)用各種變換,例如平移、旋轉(zhuǎn)、縮放和傾斜。 transform屬性的值是變換函數(shù)列表,每個(gè)函數(shù)都按列出的順序應(yīng)用於元素。

在DOM和SVG坐標(biāo)之間轉(zhuǎn)換的一些常見用例是什麼?

在許多情況下,在DOM和SVG坐標(biāo)之間進(jìn)行轉(zhuǎn)換非常有用。例如,如果您正在創(chuàng)建交互式SVG圖形,您可能需要將鼠標(biāo)坐標(biāo)(位於DOM坐標(biāo)系中)轉(zhuǎn)換為SVG坐標(biāo)以操作SVG元素。相反,如果您正在創(chuàng)建自定義SVG元素,您可能需要將其坐標(biāo)轉(zhuǎn)換回DOM坐標(biāo)係以將其正確放置在頁面上。

以上是如何從DOM轉(zhuǎn)換為SVG坐標(biāo)並再次返回的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

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

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

什麼是'渲染障礙CSS”? 什麼是'渲染障礙CSS”? Jun 24, 2025 am 12:42 AM

CSS會(huì)阻塞頁面渲染是因?yàn)闉g覽器默認(rèn)將內(nèi)聯(lián)和外部CSS視為關(guān)鍵資源,尤其是使用引入的樣式表、頭部大量內(nèi)聯(lián)CSS以及未優(yōu)化的媒體查詢樣式。 1.提取關(guān)鍵CSS並內(nèi)嵌至HTML;2.延遲加載非關(guān)鍵CSS通過JavaScript;3.使用media屬性優(yōu)化加載如打印樣式;4.壓縮合併CSS減少請求。建議使用工具提取關(guān)鍵CSS,結(jié)合rel="preload"異步加載,合理使用media延遲加載,避免過度拆分與復(fù)雜腳本控制。

外部與內(nèi)部CSS:最好的方法是什麼? 外部與內(nèi)部CSS:最好的方法是什麼? Jun 20, 2025 am 12:45 AM

thebestapphachforcssdepprodsontheproject'sspefificneeds.forlargerprojects,externalcsSissBetterDuoSmaintoMaintainability andReusability; forsMallerProjectsorsingle-pageApplications,InternaltCsmightBemoresobleable.InternalCsmightBemorese.it.it'sclucialtobalancepopryseceneceenceprodrenceprodrenceNeed

我的CSS必須在較低的情況下嗎? 我的CSS必須在較低的情況下嗎? Jun 19, 2025 am 12:29 AM

否,CSSDOESNOTHAVETOBEINLOWERCASE.CHOMENDENS,使用flowercaseisrecommondendendending:1)一致性和可讀性,2)避免使用促進(jìn)性技術(shù),3)潛在的Performent FormanceBenefits,以及4)RightCollaboraboraboraboraboraboraboraboraboraboraboraboraboraboraboraboraborationWithInteams。

CSS案例靈敏度:了解重要的 CSS案例靈敏度:了解重要的 Jun 20, 2025 am 12:09 AM

cssismostlycaseminemintiment,buturlsandfontfamilynamesarecase敏感。 1)屬性和valueslikeColor:紅色; prenotcase-sensive.2)urlsmustmustmatchtheserver'server'scase,例如

什麼是AutoPrefixer,它如何工作? 什麼是AutoPrefixer,它如何工作? Jul 02, 2025 am 01:15 AM

Autoprefixer是一個(gè)根據(jù)目標(biāo)瀏覽器範(fàn)圍自動(dòng)為CSS屬性添加廠商前綴的工具。 1.它解決了手動(dòng)維護(hù)前綴易出錯(cuò)的問題;2.通過PostCSS插件形式工作,解析CSS、分析需加前綴的屬性、依配置生成代碼;3.使用步驟包括安裝插件、設(shè)置browserslist、在構(gòu)建流程中啟用;4.注意事項(xiàng)有不手動(dòng)加前綴、保持配置更新、非所有屬性都加前綴、建議配合預(yù)處理器使用。

什麼是CSS計(jì)數(shù)器? 什麼是CSS計(jì)數(shù)器? Jun 19, 2025 am 12:34 AM

csscounterscanautomationallymentermentermentections和lists.1)usecounter-ensettoInitializize,反插入式發(fā)芽,andcounter()orcounters()

CSS:何時(shí)重要(何時(shí)不)? CSS:何時(shí)重要(何時(shí)不)? Jun 19, 2025 am 12:27 AM

在CSS中,選擇器和屬性名不區(qū)分大小寫,而值、命名顏色、URL和自定義屬性則區(qū)分大小寫。 1.選擇器和屬性名不區(qū)分大小寫,例如background-color和Background-Color相同。 2.值中的十六進(jìn)制顏色不區(qū)分大小寫,但命名顏色區(qū)分大小寫,如red有效而Red無效。 3.URL區(qū)分大小寫,可能導(dǎo)致文件加載問題。 4.自定義屬性(變量)區(qū)分大小寫,使用時(shí)需注意大小寫一致。

CSS中的情況敏感性:選擇器,屬性和值所解釋的 CSS中的情況敏感性:選擇器,屬性和值所解釋的 Jun 19, 2025 am 12:38 AM

cssselectorsand and propertynamesarecase-insimentimentiment.1)selectorSlike like'div'div'div'div'and'and'and'And'Andiv'areequivalent.2)propertioessuchas'backusuchas'backusuchas'backusuchas'backusuchas'backer'back-and'background and backorgook crolor'backorground-artreateateDthesementhesame.3)

See all articles