日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

vue實現標簽云效果的示例

瀏覽:23日期:2022-11-02 17:59:15

閑扯兩句

最近想給自己的博客上加上一個3D標簽云的效果,用來表示自己博客文章的分組,網上找到了canvas實現的,還有a元素實現的解析3D標簽云,我想讓標簽可以選擇和點擊,又不想在標簽數量較多時操作a標簽導致性能問題,于是svg就成了一個不錯的選擇。

標簽初始化

這里實現的核心主要是參考了前面的那篇解析3D標簽云的文章,作者給出了源碼,講解也比較通俗易懂。大體來說,整個代碼分三步:

根據標簽的數量,算出每個標簽在球面上分布的x,y,z坐標 根據標簽的坐標,將標簽繪制出來,x,y坐標通過標簽的位置來表示,z坐標通過標簽字體的大小和透明度來表示 通過函數根據球的旋轉角速度不斷計算標簽新的x,y坐標,制造出旋轉效果 通過mousemove事件,根據鼠標坐標值,改變球旋轉的角速度,做出交互效果

貼上代碼:

<div id=’app’ > <svg :width=’width’ :height=’height’ @mousemove=’listener($event)’> <a :href='http://m.b3g6.com/bcjs/tag.href' rel='external nofollow' v-for=’tag in tags’><text :x=’tag.x’ :y=’tag.y’ :font-size=’20 * (600/(600-tag.z))’ :fill-opacity=’((400+tag.z)/600)’>{{tag.text}}</text> </a> </svg> </div>

在模板中,借用指令v-for來渲染標簽,每個標簽上綁定了x,y,font-size(用來表現z軸),fill-opacity(都是與z坐標有關的表達式,用來表現z軸),及text;

data: { width:700,//svg寬度 height:700,//svg高度 tagsNum:20,//標簽數量 RADIUS:200,//球的半徑 speedX:Math.PI/360,//球一幀繞x軸旋轉的角度 speedY:Math.PI/360,//球-幀繞y軸旋轉的角度 tags: [] } computed:{ CX(){//球心x坐標 return this.width/2; }, CY(){//球心y坐標 return this.height/2; } },

做好了上面的基礎,下面我們來初始化標簽數據:

created(){//初始化標簽位置 let tags=[]; for(let i = 0; i < this.tagsNum; i++){ let tag = {}; let k = -1 + (2 * (i + 1) - 1) / this.tagsNum; let a = Math.acos(k); let b = a * Math.sqrt(this.tagsNum * Math.PI)//計算標簽相對于球心的角度 tag.text = i + ’tag’; tag.x = this.CX + this.RADIUS * Math.sin(a) * Math.cos(b);//根據標簽角度求出標簽的x,y,z坐標 tag.y = this.CY + this.RADIUS * Math.sin(a) * Math.sin(b); tag.z = this.RADIUS * Math.cos(a); tag.href = ’https://imgss.github.io’;//給標簽添加鏈接 tags.push(tag); } this.tags = tags;//讓vue替我們完成視圖更新 },

到了這里,我們就算了算坐標,vue完成了視圖更新的工作,這時基本上就可以得到一副靜態的圖像了:

vue實現標簽云效果的示例

下面就是通過改變每一個tag的x,y的值來使球旋轉起來;實現方法是rotateX,rotateY函數:

rotateX(angleX){ var cos = Math.cos(angleX); var sin = Math.sin(angleX); for(let tag of this.tags){ var y1 = (tag.y- this.CY) * cos - tag.z * sin + this.CY; var z1 = tag.z * cos + (tag.y- this.CY) * sin; tag.y = y1; tag.z = z1; } }, rotateY(angleY){ var cos = Math.cos(angleY); var sin = Math.sin(angleY); for(let tag of this.tags){ var x1 = (tag.x - this.CX) * cos - tag.z * sin + this.CX; var z1 = tag.z * cos + (tag.x - this.CX) * sin; tag.x = x1; tag.z = z1; } },

這兩個函數就是根據標簽原來的坐標和球旋轉的角度算出新的坐標,最后在mounted鉤子下面,寫一個animate函數,不斷調用這兩個函數,實現旋轉動畫

mounted(){//使球開始旋轉 setInterval(() => { this.rotateX(this.speedX); this.rotateY(this.speedY); }, 17) },

全部代碼如下:

<script> var app = new Vue({ el: ’#app’, data: {width:700,height:700,tagsNum:20,RADIUS:200,speedX:Math.PI/360,speedY:Math.PI/360,tags: [] }, computed:{CX(){ return this.width/2;},CY(){ return this.height/2;} }, created(){//初始化標簽位置let tags=[];for(let i = 0; i < this.tagsNum; i++){ let tag = {}; let k = -1 + (2 * (i + 1) - 1) / this.tagsNum; let a = Math.acos(k); let b = a * Math.sqrt(this.tagsNum * Math.PI); tag.text = i + ’tag’; tag.x = this.CX + this.RADIUS * Math.sin(a) * Math.cos(b); tag.y = this.CY + this.RADIUS * Math.sin(a) * Math.sin(b); tag.z = this.RADIUS * Math.cos(a); tag.href = ’https://imgss.github.io’; tags.push(tag);}this.tags = tags; }, mounted(){//使球開始旋轉setInterval(() => { this.rotateX(this.speedX); this.rotateY(this.speedY);}, 17) }, methods: {rotateX(angleX){ var cos = Math.cos(angleX); var sin = Math.sin(angleX); for(let tag of this.tags){ var y1 = (tag.y- this.CY) * cos - tag.z * sin + this.CY; var z1 = tag.z * cos + (tag.y- this.CY) * sin; tag.y = y1; tag.z = z1; } },rotateY(angleY){ var cos = Math.cos(angleY); var sin = Math.sin(angleY); for(let tag of this.tags){ var x1 = (tag.x - this.CX) * cos - tag.z * sin + this.CX; var z1 = tag.z * cos + (tag.x-this.CX) * sin; tag.x = x1; tag.z = z1; } },listener(event){//響應鼠標移動 var x = event.clientX - this.CX; var y = event.clientY - this.CY; this.speedX = x*0.0001>0 ? Math.min(this.RADIUS*0.00002, x*0.0001) : Math.max(-this.RADIUS*0.00002, x*0.0001); this.speedY = y*0.0001>0 ? Math.min(this.RADIUS*0.00002, y*0.0001) : Math.max(-this.RADIUS*0.00002, y*0.0001); } } }) </script>

完整demo

vue

no vue

vue實現標簽云效果的示例

總結

vue的數據綁定可以減少我們對dom的操作,而將關注點放在邏輯上面,vue構造函數提供的幾個選項可以幫助我們更好的組織代碼

以上就是vue實現標簽云效果的示例的詳細內容,更多關于vue 標簽云的資料請關注好吧啦網其它相關文章!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日本不卡视频在线| 国产日韩精品视频一区二区三区| 日本久久精品| 国产福利资源一区| 麻豆一区在线| 国产精品久久久久久久久久白浆| 欧美日韩精品一区二区三区在线观看| 日韩欧美在线精品| 国产欧美一区二区三区国产幕精品| 欧美一区自拍| 国产精品蜜月aⅴ在线| 国产精品久久久久久久免费软件 | 亚洲精品2区| 91成人精品视频| 免费人成精品欧美精品| 日韩精品免费一区二区夜夜嗨 | 成人国产精品| 日韩在线观看一区| 亚洲精品电影| 日韩高清不卡一区| 国产精品xxxav免费视频| 国产精品1区| 色偷偷偷在线视频播放| 亚洲精品99| 色8久久久久| 免费精品一区| 久久中文字幕av| 久久亚洲黄色| 国精品一区二区| 日本大胆欧美人术艺术动态| 亚洲精品视频一二三区| 国产精品玖玖玖在线资源| 黑人精品一区| 久久午夜精品| 国产精品激情| 欧美日韩色图| 亚洲区第一页| 国产一区二区三区久久| 欧美日韩国产高清| 日韩精品第一| 日韩精品2区| 亚洲欧美在线专区| 国产一区丝袜| 香蕉视频成人在线观看| 国产乱论精品| 久久久人人人| 水野朝阳av一区二区三区| 欧美国产日韩电影| 欧美va天堂在线| 国产图片一区| 欧美特黄一区| 久久久久97| 蜜桃视频在线观看一区二区| 精品国产麻豆| 免费人成在线不卡| 色偷偷色偷偷色偷偷在线视频| 亚洲有吗中文字幕| 日本一区二区免费高清| 手机精品视频在线观看| 成午夜精品一区二区三区软件| 男人操女人的视频在线观看欧美| 麻豆视频一区二区| 欧美在线亚洲综合一区| 里番精品3d一二三区| 美女国产一区| 天堂日韩电影| 久久超碰99| 一区二区精彩视频| 99久久九九| 国产一区二区精品久| 综合亚洲色图| 欧美性感美女一区二区| 国产精品日本一区二区不卡视频 | 久久久亚洲欧洲日产| 国产精品美女久久久| 欧美www视频在线观看| 亚洲不卡视频| 自拍日韩欧美| 秋霞影院一区二区三区| 国产精品1区| 日韩在线电影| 99视频一区| 日韩一区电影| 久久精品理论片| 五月国产精品| 欧美天堂亚洲电影院在线观看| 国产一区二区三区四区| 日本特黄久久久高潮| 久久xxxx精品视频| 99久久www免费| 天堂а√在线最新版中文在线| 久久超级碰碰| 91大神在线观看线路一区| 亚洲欧美日韩国产| 亚洲福利免费| 日本午夜大片a在线观看| 国产精品一区高清| 五月亚洲婷婷 | 亚洲+小说+欧美+激情+另类| 久久久国产亚洲精品| 国产精品久久观看| 欧美aa在线视频| 欧美日韩一区自拍| 一区二区91| 免费人成在线不卡| 久久午夜视频| 亚洲欧美成人综合| 亚洲精品一二三区区别| 播放一区二区| 国产在线观看www| 精品99在线| 欧美精品91| 久久精品国产999大香线蕉| 国产欧美成人| 欧美一区成人| 国产私拍福利精品视频二区| 青青国产精品| 日韩精品免费视频人成| 色狠狠一区二区三区| 色狠狠一区二区三区| 亚洲免费毛片| 亚洲精品影视| 欧美日韩亚洲一区三区| 欧美一区在线观看视频| 日本欧美大码aⅴ在线播放| 91精品国产自产精品男人的天堂| 91亚洲精品视频在线观看| 日韩二区三区四区| 国产亚洲精aa在线看| 日本特黄久久久高潮| 蜜桃视频一区二区| 亚洲开心激情| 日本国产一区| 国产欧美88| 精品久久电影| 日韩精品一区二区三区免费观影| 亚洲高清二区| 另类亚洲自拍| 日本va欧美va瓶| 国产无遮挡裸体免费久久| 国产精品美女久久久久久不卡| 麻豆视频一区二区| 一区二区精品伦理...| 日韩欧美午夜| 欧美.日韩.国产.一区.二区 | 国产精品视频一区二区三区综合 | 久久精品国产999大香线蕉| 国产拍在线视频| 国产视频久久| 日本不卡中文字幕| 成人在线超碰| 在线视频日韩| 日韩激情啪啪| 美女在线视频一区| 欧美片第1页| 日韩中文字幕一区二区三区| 日韩和欧美一区二区三区| 久久久久伊人| 亚洲黄页一区| 欧美一区激情| 色黄视频在线观看| 久久亚洲色图| 国产精品视频一区二区三区四蜜臂 | 日韩av在线播放中文字幕| 免费一级欧美在线观看视频| 丝袜美腿诱惑一区二区三区 | 日韩美女精品| 在线天堂中文资源最新版| 中文精品在线| 久久精品72免费观看| 天堂а√在线最新版中文在线| 午夜亚洲福利在线老司机| 国产亚洲欧美日韩在线观看一区二区 | 亚洲激情婷婷| 欧美偷窥清纯综合图区| 日韩一区二区三区免费播放| 在线日韩成人| 国产精品13p| 日韩欧美中文在线观看| 精精国产xxxx视频在线播放 | 美女在线视频一区| 国产精品毛片在线| 蜜桃久久久久| 性欧美精品高清| 成人在线免费观看网站| 国产综合色产| 欧美激情视频一区二区三区在线播放| 亚洲性图久久| 国产免费av一区二区三区| 国产精品av久久久久久麻豆网| 久久国产精品色av免费看| 女人av一区| 精品国产亚洲一区二区三区在线| 中文欧美日韩| 国产美女高潮在线| 日韩高清国产一区在线| 午夜精品婷婷| a日韩av网址| 国产精品亚洲综合久久| 免费美女久久99|