最近想給自己的部落格上加上乙個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...