Vue實現(xiàn)底部側邊工具欄的實例代碼
下載地址: https://github.com/imxiaoer/FloatToolBar
因為是個常見的功能,所以寫個組件。效果圖如下:


組件具體代碼如下: tool.vue
<template>
<ul class="float-tool">
<li class="hasChild">
<span class="tool-icon icon0"></span>
<span>聯(lián)系電話</span>
<div class="txtbox">
<span>請撥 102-0012-9242</span>
</div>
</li>
<li>
<span class="tool-icon icon1"></span>
<span>QQ 客服</span>
</li>
<li class="hasChild">
<span class="tool-icon icon2"></span>
<span>APP下載</span>
<div class="picbox">
<img src="./wechat.jpg" alt="微信二維碼">
</div>
</li>
<li class="hasChild">
<span class="tool-icon icon3"></span>
<span>關注微信</span>
<div class="picbox">
<img src="./wechat.jpg" alt="微信二維碼">
</div>
</li>
<li onclick="window.scrollTo(0, 0)">
<span class="tool-icon icon4"></span>
<span>返回頂部</span>
</li>
</ul>
</template>
<script type="text/ecmascript-6">
export default {
}
</script>
<style lang="stylus" rel="stylesheet/stylus">
.float-tool
position: fixed
right: 10px
bottom: 10px
z-index: 99
width: 55px
font-size: 12px
li
position: relative
margin-bottom: 5px
width: 55px
height: 55px
text-align: center
color: #FFF
background-color: #6b4ec2
cursor: pointer
&.hasChild:hover > div
display: block
.tool-icon
display: block
width: 55px
height: 35px
background: url('icons.png') no-repeat
.icon0
background-position: center -153px
.icon1
background-position: center 5px
.icon2
background-position: center -50px
.icon3
background-position: center -102px
.icon4
background-position: center -312px
.txtbox
display: none
position: absolute
top: 0px
right: 65px
width: 150px
height: 45px
line-height: 45px
font-size: 14px
padding: 5px
background-color: #6b4ec2
&:after
display: block
position: absolute
right: -5px
top: 22px
content: ''
width: 0
height: 0
border-width: 7px 0 7px 7px
border-style: solid
border-color: transparent transparent transparent #6b4ec2
.picbox
display: none
position: absolute
top: -30px
right: 65px
width: 100px
height: 100px
padding: 5px
background-color: #6b4ec2
img
width: 100%
height: 100%
&:after
display: block
position: absolute
right: -5px
top: 50px
content: ''
width: 0
height: 0
border-width: 7px 0 7px 7px
border-style: solid
border-color: transparent transparent transparent #6b4ec2
</style>
下載地址: https://github.com/imxiaoer/FloatToolBar
補充:下面看下vue 側邊導航欄遞歸顯示 的實例代碼。
import axios from "axios";
import tabs1 from "../tab_content/tab1.vue";
import myTree from "./items.vue";
export default {
data() {
return {
theModel: [],
};
props: ["tabs"]
},
components: { myTree },
methods: {
tabsvalue(data){
console.log(data)
this.$emit("get-data",data)
}
},
watch: {
},
created() {
axios
.get("../../../static/nav.json")
// .get("。。。")
.then(
function(response) {
var arr = response.data.dActionList;
var zNodes = [];
var farternode = [];
for (var i in arr) {
if (arr[i].desktop == "0" && arr[i].parentId != null) {
farternode.push(arr[i]);
}
if (arr[i].parentId && arr[i].desktop == "1") {
zNodes.push(arr[i]);
}
}
var childNodes = function getChildNodes(
parentId,
zNodes,
nodes,
child,
parentItem
) {
if (!parentId || !zNodes) return nodes;
var childNode = [];
for (var k in zNodes) {
if (zNodes[k].parentId == parentId) {
if (child) {
childNode.push(zNodes[k]);
} else {
nodes.push(zNodes[k]);
}
childNodes(zNodes[k].id, zNodes, nodes, true, zNodes[k]);
}
}
if (childNode.length > 0 && child) {
parentItem.children = childNode;
}
return nodes;
};
for (var j in farternode) {
farternode[j]["children"] = [];
var nodes = [];
nodes = childNodes(farternode[j].id, zNodes, nodes, false, null);
farternode[j].children = nodes;
}
console.log(farternode);
console.log(nodes);
this.theModel = farternode;
}.bind(this)
)
.catch(function(error) {
console.log(error);
});
console.log(this.$refs.tabsdata)
}
};
父組件 的js
<template> <div id="navto"> <my-tree v-for="menuItem in theModel" :key="menuItem.id" :model="menuItem" @data-tabsvalue="tabsvalue"></my-tree> </div> </template>
父組件的節(jié)點
import tabs from '../compont/tabs.vue'
export default {
name: 'treeMenu',
props:["model"],
data () {
return {
folderIcon: 'folder',
isDynamicFolder: false,
isOpen: false,
}
},
computed: {
isFolder () {
return !!(this.model.children && this.model.children.length)
}
},
watch: {
isDynamicFolder () {
this.isOpen = true
this.folderIcon = 'folder-open'
}
},
methods: {
tabsvalue(data){
this.$emit("data-tabsvalue",data)
},
run(data){
if(!data.children){
this.tabsvalue(data)
console.log(data.text);
console.log(data.url)
}
},
toggle () {
this.isOpen = !this.isOpen
this.folderIcon = this.isOpen ? 'folder-open' : 'folder'
}
}
}
子組件的js
<template>
<li>
<span @click="toggle">
<i :class="['icon', (isFolder || isDynamicFolder) ? folderIcon : 'file-text']"></i>
<span class="mousestyle">{{ model.text}}</span>
</span>
<!-- <transition name="mybox" > -->
<ul v-if="isOpen">
<span v-for="item in model.children" :key="item.id" @click.stop="run(item)">
<tree-menu :model="item" @data-tabsvalue="tabsvalue">
</tree-menu>
</span>
</ul>
<!-- </transition> -->
</li>
</template>
子組件的節(jié)點
總結
以上所述是小編給大家介紹的Vue實現(xiàn)底部側邊工具欄的實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關文章
Vue如何實現(xiàn)el-table多選樣式變?yōu)閱芜x效果
這篇文章主要介紹了Vue如何實現(xiàn)el-table多選樣式變?yōu)閱芜x效果,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
el-form-item?prop屬性動態(tài)綁定不生效問題及解決
這篇文章主要介紹了el-form-item?prop屬性動態(tài)綁定不生效問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
Vue報錯error:0308010C:digital?envelope?routines::unsupported
這篇文章主要給大家介紹了關于Vue報錯error:0308010C:digital?envelope?routines::unsupported的解決方法,文中通過圖文將解決的辦法介紹的非常詳細,需要的朋友可以參考下2022-11-11
深入淺析Vue中mixin和extend的區(qū)別和使用場景
Vue中有兩個較為高級的靜態(tài)方法mixin和extend,接下來給大家介紹Vue中mixin和extend的區(qū)別和使用場景,感興趣的朋友一起看看吧2019-08-08
VUE DEMO之模擬登錄個人中心頁面之間數(shù)據(jù)傳值實例
今天小編就為大家分享一篇VUE DEMO之模擬登錄個人中心頁面之間數(shù)據(jù)傳值實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10

