vue實現標籤雲效果

2022-01-16 09:01:26 字數 1930 閱讀 8917

最近想給自己的部落格上加上乙個3d標籤雲的效果,用來表示自己部落格文章的分組,網上找到了canvas實現的,還有a元素實現的解析3d標籤雲,我想讓標籤可以選擇和點選,又不想在標籤數量較多時操作a標籤導致效能問題,於是svg就成了乙個不錯的選擇。

貼上**:

}text>

a>

svg>

div>

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

data: 

computed:,

cy()

},

做好了上面的基礎,下面我們來初始化標籤資料:

created();

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 = '';//給標籤新增鏈結

tags.push(tag);

}this.tags = tags;//讓vue替我們完成檢視更新

},

到了這裡,我們就算了算座標,vue完成了檢視更新的工作,這時基本上就可以得到一副靜態的影象了:

下面就是通過改變每乙個tag的x,y的值來使球旋轉起來;實現方法是rotatex,rotatey函式:

rotatex(anglex)

},rotatey(angley)

},

這兩個函式就是根據標籤原來的座標和球旋轉的角度算出新的座標,最後在mounted鉤子下面,寫乙個animate函式,不斷呼叫這兩個函式,實現旋轉動畫

mounted(), 17)

},

全部**如下:

>

data: ,

computed:,

cy()

},created();

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 = '';

tags.push(tag);

}this.tags = tags;

},mounted(), 17)

},methods: {

rotatex(anglex){

var cos = math.

vue實現點選當前標籤高亮效果 推薦

實現點選按鈕使當前按鈕高亮,其他按鈕復原的效果 實現思路 在data中定義即將渲染的資料,及act程式設計客棧ive data active 定義高亮的標籤類名 active www.cppcns.com6 動態渲染按鈕的資料並動態的增加active類名 當active為當前name值時新增 新增點...

vue實現選中效果

好久沒有寫vue了,略有生疏,這個東西還是得多用。下午看到乙個需求,選擇相簿作為輪播圖顯示。介面返回相簿列表,使用者選一下再扔回去。直到我看到e.target.classname我就知道這個事情不簡單。資料驅動這個是我覺得和jquery不一樣的地方。jquery是點一下,加個class,移個clas...

vue實現輪播效果

效果如下 不好意思,圖有點大 功能 點選左側,右側出現相應的 同時左側邊框變顏色。for leftimg,index in leftimgs key index for leftimg,index in leftimgs key index c 如果左側不是,而是文字的話 可以把 width 130...