欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

如何使用CSS來修改SVG原點和制作SVG動畫

系統(tǒng) 2155 0
SVG元素可以像HTML元素一樣,使用CSS keyframes和animation屬性或者CSS transitions來制作各種動畫效果。

?

SVG 元素可以像HTML元素一樣,使用CSS keyframes和animation屬性或者CSS transitions來制作各種動畫效果。

大多數(shù)情況下,一個復雜的動畫效果需要組合多種變換效果:旋轉(zhuǎn)、傾斜、縮放以及他們的轉(zhuǎn)換和過渡效果。多數(shù)情況下,SVG元素和HTML元素在使用 transform transform-origin 上是相同的。但它們之間也有不同之處,SVG元素不能使用box model來管理,因此,它沒有 margin padding border 或content boxes。

?

默認情況下,一個HTML元素的 transform 原點位于該元素的 (50%, 50%) 的地方,這里是元素的中心點。與之不同,SVG元素的 transform 原點位于當前用戶坐標系統(tǒng)的原點上,這個點是畫布的左上角位置。

假設(shè)我們有一個 <div> 和一個SVG <rect> 元素:

      <!DOCTYPE html>
…
<div style="width: 100px; height: 100px; background-color: orange"> </div>
<svg style="width: 150px; height: 150px; background-color: #eee">
  <rect width="100" height="100" x="25" y="25" fill="orange" />
</svg>
    

?

如果我們在沒有改變原點的情況下,都將它們旋轉(zhuǎn)45度,我們將會得到下圖的效果(圖中的小圓點是它們各種的原點)。

如何使用CSS來修改SVG原點和制作SVG動畫

如果我們想根據(jù)SVG元素的自身原點,而不是用戶坐標系原點來旋轉(zhuǎn)SVG圖形該怎么辦呢?我們需要使用 transform-origin 屬性來明確的設(shè)置SVG元素的 transform 原點位置。

在HTML元素上設(shè)置轉(zhuǎn)換原點是一件非常簡單的事情:你設(shè)置的任何值都是相對于元素的border box。

在SVG中, transform 原點可以使用百分比值或一個絕度值(如像素)來設(shè)置。如果你使用百分比值來設(shè)置 transform-origin ,這個值被設(shè)置為相對于元素的bounding box,它包括用于繪制邊框的stroke。如果你使用一個絕對值來來設(shè)置 transform-origin ,那么這個值被設(shè)置為相對于用戶的當前坐標系統(tǒng),即SVG的畫布。

如果我們要將上例中的 <div> <rect> 都使用百分比來設(shè)置其 transform 原點到中心,代碼如下:

      <!DOCTYPE html>
<style>
  div, rect {
  transform-origin: 50% 50%;
}
</style>
    

?

得到的結(jié)果如下圖所示:

如何使用CSS來修改SVG原點和制作SVG動畫

必須指出的是,到寫這篇文章為止,F(xiàn)irefox瀏覽器仍不支持使用百分比來設(shè)置 transform 的原點,這是一個總所周知的 bug 。因此,目前最好還是使用絕對值來設(shè)置 transform 的原點。你仍可以在webkit內(nèi)核的瀏覽器中使用百分比來設(shè)置原點。

下面是一個SVG風車的小例子,我們使用CSS animation來使它不停的旋轉(zhuǎn)。為了使風車繞指定的原點旋轉(zhuǎn),我們同時使用像素和百分比來設(shè)置它的 transform 原點。

      <svg>
<style>
.wheel {
  transform-origin: 193px 164px;
  -webkit-transform-origin: 50% 50%;
  -webkit-animation: rotate 4s cubic-bezier(.49,.05,.32,1.04) infinite alternate;
  animation: rotate 4s cubic-bezier(.49,.05,.32,1.04) infinite alternate;
}
@-webkit-keyframes rotate {
  50% {
    -webkit-transform: rotate(360deg);
  }
}
@keyframes rotate {
  50% {
    transform: rotate(360deg);
  }
}
</style>
<!-- SVG content -->
</svg>
    

?

DEMO

?

注意,到目前為止,在使用SVG元素的時候,CSS 3D transformations是沒有硬件加速的,只是在SVG transform 屬性上做了一些優(yōu)化。但是,F(xiàn)irefox 瀏覽器對SVG的transforms有一定的加速效果。

?
SVG路徑動畫

我們沒有辦法使用CSS將一個SVG圖像轉(zhuǎn)換為另外一個圖形。如果你想制作路徑變形動畫,那么你需要使用javascript。我們建議使用Dmitry Baranovskiy寫的 Snap.svg

使用Snap.svg可以很容易的處理一寫怪異的問題。

你可以使用CSS來創(chuàng)建動態(tài)的畫線效果,這個效果你需要知道畫線路徑的總長度,然后使用SVG的 stroke-dashoffset stroke-dasharray 屬性來制作畫線效果,如果你知道畫線路徑的總長度,可以使用下面的CSS代碼來制作這個動畫效果:

      #path {
stroke-dasharray: pathLength;
stroke-dashoffset: pathLength;
/* transition stroke-dashoffset */
transition: stroke-dashoffset 2s linear;
}
 
svg:hover #path{
  stroke-dashoffset: 0;
}
    

?

上面的代碼中,當鼠標滑過SVG元素時,路徑會向前繪制2秒鐘。

在下面的這個例子中,我們使用相同的技術(shù)-一個帶延遲的CSS transition來制作一個電燈泡通電的效果。

      #cable {
  stroke: #FFF2B1;
  stroke-dasharray: 4000 4000;  
  stroke-dashoffset: 4000;
  stroke-width: 4;
  transition: stroke-dashoffset 8s linear;
}
 
svg:hover #cable {
  stroke-dashoffset: 0;
}
 
/* turn lamp on */
.inner-lamp{
  fill:grey;
  transition: fill .5s ease-in 6s;
}
 
svg:hover .inner-lamp {
  fill: #FBFFF8;
}
/* … */
    

?

DEMO

?

如果兩條線和間隙的值都相等的話,你也可以使用 stroke-dasharray: 4000; 來替換 stroke-dasharray: 4000 4000

有些時候你不知道動畫路徑的總長度,這時,你可以使用javascript的 getTotalLength() 方法來獲取路徑的長度。

      var path = document.querySelector('.drawing-path');
path.getTotalLength();
//set CSS properties up
path.style.strokeDasharray = length;
path.style.strokeDashoffset = length;
//set transition up
path.style.transition = 'stroke-dashoffset 2s ease-in-out';
// animate
path.style.strokeDashoffset = '0';
    

?

上面的代碼說明我們可以使用javascript來完成和CSS同樣的事情。

?

出處: http://www.htmleaf.com/ziliaoku/qianduanjiaocheng/201503141522.html

本文: 如何使用CSS來修改SVG原點和制作SVG動畫

下載: 201503142148

?

如何使用CSS來修改SVG原點和制作SVG動畫


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: www.中文字幕在线观看 | 国产嫩草影院在线观看 | 日本瑟瑟 | 亚洲一区二区av | 天天干网 | 日韩欧美视频在线一区二区 | 天天视频国产 | 欧美成人午夜免费完成 | 视频一区二区三区免费观看 | 一级免费大片 | 日韩精品一区二区电影 | 国产精品久久久久久免费 | 伊人久久国产 | 天堂成人在线 | 日韩中文字幕视频在线 | 小明免费视频一区二区 | 91福利免费体验区观看区 | 激情五月色婷婷 | 无码日本亚洲一区久久精品 | 午夜神器18以下不能进免费观看 | 黄视频网站免费观看 | 99久久精品国产片 | 国产精品久久久久秋霞影视 | 欧美一区二区三区国产精品 | 亚洲色图在线视频 | 99久久久精品国产一区二区 | 欧美日本中文 | 亚洲黄网站wwwwww | 亚洲97| 日韩精品中文乱码在线观看 | 亚洲精品人人 | 日本美女一区二区三区 | 三极片免费看 | 日韩性freexxxx在线观看 | av网址在线播放 | 日韩电影一区二区三区 | 毛片99| 黄色网址你懂的 | 北京一级毛片 | 成人国产精品一区二区毛片在线 | 国产在线小视频 |