SVG javascript腳本

使用JavaScript,可以編寫SVG腳本。通過腳本編寫,您可以修改SVG元素,為其設(shè)置動畫或偵聽形狀上的鼠標(biāo)事件。當(dāng)SVG嵌入HTML頁面中時,可以在JavaScript中使用SVG元素。

可以使用JavaScript編寫SVG腳本。通過編寫腳本,您可以修改SVG元素,設(shè)置它們的動畫,或者監(jiān)聽形狀上的鼠標(biāo)事件。

當(dāng)SVG嵌入到HTML頁面中時,可以在JavaScript中使用SVG元素,就像它們是HTML元素一樣。JavaScript看起來是一樣的。

本文向您展示了如何通過JavaScript處理SVG元素的示例,但并未解釋JavaScript本身。要理解本文中的示例,您需要已經(jīng)對JavaScript有一定的了解。

SVG腳本示例

這是一個簡單的SVG腳本編寫示例,當(dāng)單擊按鈕時,該示例會更改SVG矩形的尺寸。

<svg width="500" height="100">
    <rect id="rect1" x="10" y="10" width="50" height="80"
          style="stroke:#000000; fill:none;"/>
</svg>
<input id="button1" type="button" value="Change Dimensions"
            onclick="changeDimensions()"/>

<script>
    function changeDimensions() {
        document.getElementById("rect1").setAttribute("width", "100");
    }
</script>
測試看看?/?

嘗試單擊按鈕以查看會發(fā)生什么。

通過ID獲取對SVG元素的引用

您可以使用document.getElementById() 函數(shù)獲得對SVG形狀的引用。這是一個示例:

var svgElement = document.getElementById("rect1");

此示例獲取對ID為rect1的SVG元素的引用(ID在SVG元素的id屬性中指定)。

更改屬性值

一旦獲得了SVG元素的引用,就可以使用setAttribute()函數(shù)更改其屬性。這是一個示例:

var svgElement = document.getElementById("rect1");svgElement.setAttribute("width", "100");

本示例設(shè)置選定的SVG元素的width屬性。您可以使用setAttribute()函數(shù)設(shè)置任何其他屬性,包括 style屬性。

您還可以使用getAttribute() 函數(shù)獲取屬性的值。這是一個示例:

var svgElement = document.getElementById("rect1");var width = svgElement.getAttribute("width");

更改CSS屬性

通過SVG元素的style屬性引用給定的CSS屬性,可以更改SVG元素的CSS屬性。下面是一個設(shè)置stroke CSS屬性的示例:

var svgElement = document.getElementById("rect1");

svgElement.style.stroke = "#ff0000";

您也可以通過這種方式設(shè)置任何其他CSS屬性。只需將其名稱放在svgElement.style. 上面第二行的后面,然后將其設(shè)置為某種值即可。

您還可以通過style屬性讀取CSS屬性的值。這是一個示例:

var svgElement = document.getElementById("rect1");

var stroke = svgElement.style.stroke;

本示例讀取stroke CSS屬性的值。

名稱中包含短劃線的CSS屬性名稱(例如stroke-width)需要通過['']構(gòu)造進(jìn)行引用。這樣做是因?yàn)閹в卸虅澗€的屬性名稱在JavaScript中無效。因此你不能寫

element.style.stroke-width

相反,你必須寫

element.style['stroke-width']

這樣,您還可以使用名稱中的破折號來引用CSS屬性。

事件監(jiān)聽器

您可以根據(jù)需要直接在SVG中將事件監(jiān)聽器添加到SVG形狀中。就像使用HTML元素一樣進(jìn)行操作。這是一個添加onmouseover 和 onmouseout事件監(jiān)聽器的示例:

<svg width="500" height="100">    
<rect x="10" y="10" width="100" height="75"    
style="stroke: #000000; fill: #eeeeee;"    
onmouseover="this.style.stroke = '#ff0000'; this.style['stroke-width'] = 5;"    
onmouseout="this.style.stroke = '#000000'; this.style['stroke-width'] = 1;"    
/>    
</svg>
測試看看?/?

此示例在鼠標(biāo)懸停在矩形上時更改筆觸顏色和筆觸寬度,并在鼠標(biāo)離開矩形時重置筆觸顏色和筆觸寬度。您可以嘗試下面的示例。嘗試將鼠標(biāo)移到形狀上,然后再次移出,以查看事件監(jiān)聽器的效果。

您還可以使用addEventListener() 函數(shù)將事件監(jiān)聽器附加到SVG元素。這是一個示例:

var svgElement = document.getElementById("rect1");
svgElement.addEventListener("mouseover", mouseOver);


function mouseOver() {
    alert("event fired!");
}

此示例將名為MouseOver的事件監(jiān)聽器函數(shù)添加到MouseOver事件。 這意味著,只要用戶將鼠標(biāo)懸停在SVG元素上,就會調(diào)用事件監(jiān)聽器函數(shù)。

動畫SVG形狀

為了使SVG形狀具有動畫效果,您需要重復(fù)調(diào)用JavaScript函數(shù)。 該函數(shù)用于更改形狀的位置或尺寸。 當(dāng)函數(shù)被重復(fù)調(diào)用并且間隔非常短時,形狀的位置或尺寸也將以非常短的間隔更新,這會使形狀看起來像動畫一樣。

這是SVG腳本動畫示例。示例下面顯示了創(chuàng)建它的代碼。單擊SVG圖像下方的兩個按鈕以開始和停止動畫。


這是生成上述動畫所需的代碼:

<svg width="500" height="100">
    <circle id="circle1" cx="20" cy="20" r="10"
            style="stroke: none; fill: #ff0000;"/>
</svg>

<script>
    var timerFunction = null;

    function startAnimation() {
        if(timerFunction == null) {
            timerFunction = setInterval(animate, 20);
        }
    }

    function stopAnimation() {
        if(timerFunction != null){
            clearInterval(timerFunction);
            timerFunction = null;
        }
    }

    function animate() {
        var circle = document.getElementById("circle1");
        var x = circle.getAttribute("cx");
        var newX = 2 + parseInt(x);
        if(newX > 500) {
            newX = 20;
        }
        circle.setAttribute("cx", newX);
    }
</script>
<br/>
<input type="button" value="開始動畫" onclick="startAnimation();">
<input type="button" value="停止動畫" onclick="stopAnimation();">
測試看看?/?

這兩個HTML按鈕都附加了一個onclick監(jiān)聽器。 這些監(jiān)聽器調(diào)用startAnimation()和stopAnimation()函數(shù),用于啟動和停止動畫。 動畫通過設(shè)置計(jì)時器開始,該計(jì)時器每隔20毫秒調(diào)用Animate()函數(shù)。 再次清除此計(jì)時器功能可停止動畫。

動畫在animate()函數(shù)內(nèi)部執(zhí)行。 首先,該函數(shù)通過document.getElementById()函數(shù)獲得對SVG圖像中<circle>元素的引用。 然后,讀取圓的cx屬性并將其轉(zhuǎn)換為數(shù)字。 然后將2加到cx值。 如果新的x值大于500,則將其重置為20。最后,將新的x值放回到<circle>元素的cx屬性中。 圓因此移動到新的x位置。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清