Vue实现底部侧边工具栏的实例代码
程序员文章站
2022-10-15 14:19:16
下载地址: https://github.com/imxiaoer/floattoolbar
因为是个常见的功能,所以写个组件。效果图如下:
组件具体代码如下: t...
下载地址: https://github.com/imxiaoer/floattoolbar
因为是个常见的功能,所以写个组件。效果图如下:
组件具体代码如下: tool.vue
<template> <ul class="float-tool"> <li class="haschild"> <span class="tool-icon icon0"></span> <span>联系电话</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>
父组件的节点
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>
子组件的节点
总结
以上所述是小编给大家介绍的vue实现底部侧边工具栏的实例代码,希望对大家有所帮助