用svg制作富有動(dòng)態(tài)的tooltip
昨晚看了用svg如何制作富有動(dòng)態(tài)的tooltip,于是今天就心血來潮學(xué)著做一下,于是也成功做出來,也明白其中的原理,收獲頗多阿!接下來要多去學(xué)習(xí)svg,這是個(gè)好東西。
這其中也注意了一些平時(shí)糾結(jié)的細(xì)節(jié)應(yīng)該怎么去做,比如:
<article> <section id="sound1"> </section> <section id="sound2"> </section> </article>
article標(biāo)簽長度為600px,section 分別是300px,然后設(shè)置其為display:inline-block;然后是下面的效果:
本來按常理來說的話,應(yīng)該是頭像水平排列,這是因?yàn)閐isplay:inline-block;會(huì)將article標(biāo)簽和section標(biāo)簽之間空白渲染成空格,空格展位,所以會(huì)導(dǎo)致圖片不在同一排,解決的辦法是給article標(biāo)簽和section標(biāo)簽添加如下的css代碼:
article{ width:600px; margin:200px; font-size:0; } article section{ display:inline-block; width:300px; font-size:14px; position:relative; }
于是空白去掉了!
另外對(duì)于svg的web圖像,我們可以對(duì)其進(jìn)行修改,使其圖像的樣式可進(jìn)行修改,它的格式大概如下(舉一例子):
<?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="600px" height="300px" viewBox="0 0 600 300" enable-background="new 0 0 600 300" xml:space="preserve"> <polygon points="89.571,6.648 513.333,6.648 590.25,75.342 553.002,215.306 313.065,273.358 300,293.352 288.876,272.71 48.936,215.306 9.75,75.342 "/> </svg>
于是我們不可能將其引入到html文件里面,如果說有很多這種svg圖像,修改起來很麻煩!
于是使用的是ajax來加載這個(gè)圖片:
html的dom:<svg data-src="bubble1.svg" width="280" height="140"></svg>
// 問題二:對(duì)于svg圖像我們要如何引入,不可能將整個(gè)svg都引入吧,不便于修改編輯
// 技巧二:使用js進(jìn)行加載
$('svg[data-src]').each(function(index, svg) { var src = $(svg).data('src'); //data用于獲取data-*屬性的路徑 $.ajax({ url: src, dataType: 'xml', success: function(content) { var doc = content.documentElement; $(doc).attr({ width: $(svg).attr('width'), height: $(svg).attr('height') }); $(svg).after(doc).remove(); } }) });
還有對(duì)于圖片的描邊動(dòng)畫效果,這里又怎么個(gè)好的方法,只針對(duì)svg圖像:
使用stroke-dasharray(虛線描邊,可以不斷嘗試,使其調(diào)至適應(yīng)大小,完成實(shí)現(xiàn)整個(gè)描邊的效果)stroke-dashoffset(虛線間隔,調(diào)至整個(gè)svg沒有描邊的效果),然后使用transition實(shí)現(xiàn)這個(gè)動(dòng)畫
最終效果(如圖,沒有在線演示,動(dòng)畫效果出不來,不過下面貼的代碼直接復(fù)制,再去下載兩個(gè)svg圖片和頭像就可以使用)
代碼如下:
<!DOCTYPE html> <html lang="zh-cn"> <head> <title>toolTip聊天對(duì)話框制作</title> <meta charset="utf-8"/> <meta name="keywords" content="" /> <meta name="description" content="" /> <script type="text/javascript" src="jquery.js"></script> <style type="text/css"> h1{ color:red; font-size:18px; } article{ width:600px; margin:200px; font-size:0; } article section{ /*問題一:對(duì)于display:inline-block;會(huì)出現(xiàn)兩個(gè)section無法并排排列,由于使用此屬性會(huì)將article與section之間的空白處渲染成空格,于是無法并排*/ /*技巧一: 父元素設(shè)置 font-size:0;清除空白*/ display:inline-block; width:300px; font-size:14px; position:relative; } .text-center{ text-align:center; } #sound1,#sound2{ cursor:pointer; } #sound1 img,#sound2 img{ width:100px; height:100px; border-radius:100%; } .sound_1,.sound_2{ position:absolute; top:-104px; width:200px; height:100px; box-sizing: border-box; opacity:1; } .sound_2{ padding:28px; } .sound_1{ padding: 25px 68px 25px 30px; left: -150px; top: -134px; width: 280px; height: 140px; } .sound_1 svg ,.sound_2 svg{ position:absolute; top:0; left:0; } .sound_1 p,.sound_2 p{ position:relative; margin:0; color:#444; font-size:12px; } .sound_1 svg path, .sound_2 svg polygon{ fill:#fff;/*填充的顏色*/ stroke:red;/*描邊的顏色*/ stroke-width: 6px;/*邊的寬度*/ } .sound_1 svg #path1 { transform: scale(0, 0); transform-origin: center; opacity: 0; transition-duration: .3s; transition-delay: 0; } .sound_1 svg #path2 { transform: scale(0, 0); transform-origin: center; opacity: 0; transition-duration: .3s; transition-delay: .1s; } .sound_1 svg #path3 { transform: scale(0, 0); transform-origin: center; opacity: 0; transition-duration: .3s; transition-delay: .2s; } .sound_1 svg #path4 { transform: scale(0, 0); transform-origin: center; opacity: 0; transition-duration: .3s; transition-delay: .25s; } .sound_1 p { transition: .2s .35s; opacity: 0; transform: translate(0, -10px); } #sound1:hover .sound_1 svg #path1,#sound1:hover .sound_1 svg #path2,#sound1:hover .sound_1 svg #path3,#sound1:hover .sound_1 svg #path4{ transform: scale(1, 1); opacity: 1; transition-delay: 0; } #sound1:hover .sound_1 p{ opacity: 1; transform: translate(0, 0); } /*問題三:對(duì)于圖片的描邊動(dòng)畫效果,這里又怎么個(gè)好的方法,只針對(duì)svg圖像*/ /*技巧三:使用stroke-dasharray(虛線描邊,可以不斷嘗試,使其調(diào)至適應(yīng)大小,實(shí)現(xiàn)描邊的效果)stroke-dashoffset(虛線間隔,調(diào)至整個(gè)svg沒有描邊的效果),然后使用transition實(shí)現(xiàn)這個(gè)動(dòng)畫 */ .sound_2 svg polygon{ stroke-dasharray: 1500; stroke-dashoffset: 1500; fill-opacity: 0; transition: .6s; } .sound_2 p { transition: .4s; transform: scale(-0.5); opacity: 0; transform: translate(0, -10px); } #sound2:hover .sound_2 svg polygon{ stroke-dashoffset: 0; fill-opacity: 1; } #sound2:hover .sound_2 p { transform: scale(0); opacity: 1; transform: translate(0, 0); } </style> </head> <body> <h1>toolTip聊天對(duì)話框制作</h1> <article> <section id="sound1"> <div class="text-center"><img src="nan.jpg" /></div> <p class="text-center">韓國正太</p> <div class="sound_1"> <svg data-src="bubble1.svg" width="280" height="140"></svg> <p>聽說優(yōu)衣庫的試衣間已全面升級(jí),空間大小擴(kuò)充一倍,精裝修,同時(shí)四面都安有鏡子,方便無死角錄像呢,要去試一下不,美女!</p> </div> </section> <section id="sound2"> <div class="text-center"><img src="nv.jpg" /> </div> <p class="text-center">優(yōu)衣庫美女</p> <div class="sound_2"> <svg data-src="bubble2.svg" width="200" height="100"></svg> <p>聽起來就很刺激,那走,帥哥,準(zhǔn)備家伙,go!</p> </div> </section> </article> <script type="text/javascript"> $(document).ready(function() { // 問題二:對(duì)于svg圖像我們要如何引入,不可能將整個(gè)svg都引入吧,不便于修改編輯 // 技巧二:使用js進(jìn)行加載 $('svg[data-src]').each(function(index, svg) { var src = $(svg).data('src'); //data用于獲取data-*屬性的路徑 $.ajax({ url: src, dataType: 'xml', success: function(content) { var doc = content.documentElement; $(doc).attr({ width: $(svg).attr('width'), height: $(svg).attr('height') }); $(svg).after(doc).remove(); } }) }); }) </script> </body> </html>
以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。
相關(guān)文章
js獲取鼠標(biāo)點(diǎn)擊的位置實(shí)現(xiàn)思路及代碼
常用的是 event.clientX和event.clientY分別獲取橫向的和縱向的位置,但僅使用這個(gè)方法是不夠的,感興趣的朋友可以了解本文2014-05-05element-ui 圖片壓縮上傳功能實(shí)現(xiàn)
這篇文章主要介紹了element-ui 圖片壓縮上傳功能實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-10-10JS獲得一個(gè)對(duì)象的所有屬性和方法實(shí)例
下面小編就為大家?guī)硪黄狫S獲得一個(gè)對(duì)象的所有屬性和方法實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02利用element-ui實(shí)現(xiàn)遠(yuǎn)程搜索兩種實(shí)現(xiàn)方式
這篇文章主要介紹了利用element-ui的兩種遠(yuǎn)程搜索實(shí)現(xiàn)代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-12-12js實(shí)現(xiàn)頭像上傳并且可預(yù)覽提交
這篇文章主要介紹了js如何實(shí)現(xiàn)頭像上傳并且可預(yù)覽提交,幫助大家更好的理解和使用js,感興趣的朋友可以了解下2020-12-12適用于javascript開發(fā)者的Processing.js入門教程
這篇文章主要介紹了適用于javascript開發(fā)者的Processing.js入門教程,感興趣的小伙伴們可以參考一下2016-02-02