vue基于better-scroll仿京東分類列表
本文實(shí)例為大家分享了vue基于better-scroll仿京東分類列表的具體代碼,供大家參考,具體內(nèi)容如下
效果圖和目錄結(jié)構(gòu)
1、main.js(需要安裝router)
import Vue from 'vue' import App from './App.vue' import router from './router' import '../src/assets/js/mock' import axios from 'axios' axios.defaults.baseURL='http://mockjs.com/api' Vue.prototype.$http=axios Vue.config.productionTip = false new Vue({ router, render: h => h(App) }).$mount('#app')
2、router.js
如果字體圖標(biāo)引入錯誤,百度阿里字體圖標(biāo)引入方法
import Vue from 'vue' import Router from 'vue-router' import './assets/css/iconfont.css' //全局引入字體圖標(biāo) Vue.use(Router) export default new Router({ linkExactActiveClass:'active', mode: 'history', base: process.env.BASE_URL, routes: [ { path: '/', name: 'home', component: ()=>import('./views/home.vue') }, { path: '/class', name: 'class', component: () => import('./views/class.vue') }, { path: '/shopcart', name: 'shopcart', component: () => import('./views/shopcart.vue') }, { path:'/me', name:'me', component:()=>import('./views/me.vue') } ] })
3、App.vue
<template> <div id="app"> <router-view></router-view> <v-tabbar></v-tabbar> </div> </template> <script> import tabbar from '../components/tabbar'; export default { components:{ 'v-tabbar':tabbar, }, } </script> <style lang="scss"> * { margin: 0; padding: 0; } html { height: 100%; } body { height: 100%; background-color: #efeff4; } a { text-decoration: none; color: #000; } li { list-style: none; } .clearfix:after { content: '.'; display: block; clear: both; visibility: hidden; height: 0; font-size: 0; } #app { font-family: "Avenir", Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; height: 100%; } </style>
4、tabbar.vue
<template> <div class="tabbar"> <div class="tabbar"> <router-link class="tab_list" to="/" exact> <i class="iconfont"></i> <p>首頁</p> </router-link> <router-link class="tab_list" to="/class"> <i class="iconfont"></i> <p>分類</p> </router-link> <router-link class="tab_list" to="/shopcart"> <i class="iconfont"></i> <p>購物車</p> </router-link> <router-link class="tab_list" to="/me"> <i class="iconfont"></i> <p>我的</p> </router-link> </div> </div> </template> <style lang="scss" scoped> .tabbar { position: fixed; display: flex; bottom: 0; left: 0; width: 100%; height: 42px; padding-top: 8px; background-color: #fff; .tab_list { flex: 1; i { font-size: 18px; } p { font-size: 14px; } } .active { color: #ffaf77; } } </style> 5、class.vue <template> <div class="class"> <div class="head"> <i class="iconfont"></i> <span>分類</span> </div> <div class="main"> <div class="wrapper" ref="wrapper"> <ul class="content"> <!-- 分類列表 --> <li v-for="(item,index) in detialList" :key="index" @click="listClick(index)" :class="index===active?'active':''">{{item.list}}</li> </ul> </div> <div class="detialList_box"> <!-- 分類詳情列表 --> <ul class="detialList clearfix" v-for="(item,index) in detialList" v-show="index===active" :key="index"> <li class="detial_title">{{item.list}}</li> <li v-for="(item,index) in item.detial" :key="index"> <img :src="item.src" alt=""> <p>{{item.text}}</p> </li> </ul> <div class="padding_color"></div> </div> </div> </div> </template> <script> import BScroll from "better-scroll"; export default { data() { return { detialList: [ //分類數(shù)據(jù) { list:'保健品', detial:[ {src:require('../assets/images/shop1.png'),text:'愛他美'}, {src:require('../assets/images/shop1.png'),text:'愛他美'}, {src:require('../assets/images/shop1.png'),text:'愛他美'}, {src:require('../assets/images/shop1.png'),text:'愛他美'}, {src:require('../assets/images/shop1.png'),text:'愛他美'}, {src:require('../assets/images/shop1.png'),text:'愛他美'}, ] }, { list:'酒水', detial:[ {src:require('../assets/images/shop1.png'),text:'酒水'}, {src:require('../assets/images/shop1.png'),text:'酒水'}, {src:require('../assets/images/shop1.png'),text:'酒水'}, {src:require('../assets/images/shop1.png'),text:'酒水'}, {src:require('../assets/images/shop1.png'),text:'酒水'}, {src:require('../assets/images/shop1.png'),text:'酒水'}, ] }, { list:'茶葉', detial:[ {src:require('../assets/images/shop1.png'),text:'茶葉'}, {src:require('../assets/images/shop1.png'),text:'茶葉'}, {src:require('../assets/images/shop1.png'),text:'茶葉'}, {src:require('../assets/images/shop1.png'),text:'茶葉'}, {src:require('../assets/images/shop1.png'),text:'茶葉'}, {src:require('../assets/images/shop1.png'),text:'茶葉'}, ] }, { list:'農(nóng)產(chǎn)品', detial:[ {src:require('../assets/images/shop1.png'),text:'農(nóng)產(chǎn)品'}, {src:require('../assets/images/shop1.png'),text:'農(nóng)產(chǎn)品'}, {src:require('../assets/images/shop1.png'),text:'農(nóng)產(chǎn)品'}, {src:require('../assets/images/shop1.png'),text:'農(nóng)產(chǎn)品'}, {src:require('../assets/images/shop1.png'),text:'農(nóng)產(chǎn)品'}, {src:require('../assets/images/shop1.png'),text:'農(nóng)產(chǎn)品'}, ] }, ], active:0, detialtext:'保健品' }; }, methods: { listClick(index){ //顯示隱藏分類詳情 this.active=index; this.detialtext=index; } }, created() { // mockjs模擬數(shù)據(jù) // this.$http.get("/detial").then(res => { // this.detialList=res.data.detials // }); }, mounted() { this.$nextTick(() => { this.scroll = new BScroll(this.$refs.wrapper, { //better-scroll初始化 scrollY, //豎向滾動 click:true //滾動區(qū)域可觸發(fā)點(diǎn)擊事件 }); }); } }; </script> <style lang="scss" scoped> .class { height: 100%; .head { position: fixed; z-index: 999; top: 0; left: 0; height: 44px; width: 100%; line-height: 44px; text-align: center; color: #fff; background-color: #ff8c3c; i { position: absolute; left: 10px; } } .main { display: flex; height: 100%; .wrapper { overflow: hidden; width: 80px; height: 100%; background-color: #fff; .content { padding-top: 40px; padding-bottom: 80px; li { height: 40px; width: 80px; line-height: 40px; padding-left: 10px; text-align: left; background-color: #fff; border: 1px solid #efeff4; } .active { background-color: #efeff4; border-left: 2px solid #ff0000; } } } .detialList_box { flex: 1; overflow: hidden; margin: 0 8px; background-color: #fff; .detialList { padding-bottom: 20px; li { float: left; width: 33.3333333%; img { width: 100%; } } .detial_title{ height: 40px; width: 100%; line-height: 40px; margin-top: 40px; background-color: #efeff4; } } .padding_color { background-color: #efeff4; height: 100%; } } } } </style>
關(guān)于vue.js組件的教程,請大家點(diǎn)擊專題vue.js組件學(xué)習(xí)教程進(jìn)行學(xué)習(xí)。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- vue實(shí)現(xiàn)購物車功能(商品分類)
- Vue實(shí)現(xiàn)商品分類菜單數(shù)量提示功能
- vue分類篩選filter方法簡單實(shí)例
- 詳解Vue2 無限級分類(添加,刪除,修改)
- 淺談vue的iview列表table render函數(shù)設(shè)置DOM屬性值的方法
- vue如何通過id從列表頁跳轉(zhuǎn)到對應(yīng)的詳情頁
- Vue.js表單標(biāo)簽中的單選按鈕、復(fù)選按鈕和下拉列表的取值問題
- Vuejs第一篇之入門教程詳解(單向綁定、雙向綁定、列表渲染、響應(yīng)函數(shù))
- Vue 實(shí)現(xiàn)列表動態(tài)添加和刪除的兩種方法小結(jié)
- vue.js學(xué)習(xí)筆記之綁定style樣式和class列表
相關(guān)文章
vue 實(shí)現(xiàn) ios 原生picker 效果及實(shí)現(xiàn)思路解析
這篇文章主要介紹了vue 實(shí)現(xiàn) ios 原生picker 效果及實(shí)現(xiàn)思路解析,本文給大家介紹的非常詳細(xì),具有參考借鑒價值,需要的朋友可以參考下2017-12-12vue3使用el-radio-group獲取表格數(shù)據(jù)無法選中問題及解決方法
這篇文章主要介紹了vue3使用el-radio-group獲取表格數(shù)據(jù)無法選中問題及解決方法,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-05-05Vue+Echarts實(shí)現(xiàn)繪制多設(shè)備狀態(tài)甘特圖
這篇文章主要為大家詳細(xì)介紹了Vue如何結(jié)合Echarts實(shí)現(xiàn)繪制多設(shè)備狀態(tài)甘特圖,文中的示例代碼講解詳細(xì),有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03關(guān)于vue.js中實(shí)現(xiàn)方法內(nèi)某些代碼延時執(zhí)行
今天小編就為大家分享一篇關(guān)于vue.js中實(shí)現(xiàn)方法內(nèi)某些代碼延時執(zhí)行,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11Vue遞歸組件+Vuex開發(fā)樹形組件Tree--遞歸組件的簡單實(shí)現(xiàn)
這篇文章也是我自己開發(fā)的從無到有的過程,所以它可以為你提供一些Tree組件開發(fā)的思路,本文重點(diǎn)給大家介紹vue遞歸組件的簡單實(shí)現(xiàn),感興趣的朋友跟隨小編一起看看吧2019-04-04vue選項(xiàng)卡組件的實(shí)現(xiàn)方法
這篇文章主要為大家詳細(xì)介紹了vue選項(xiàng)卡組件的實(shí)現(xiàn)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03vue3+vite使用postcss-pxtorem、autoprefixer自適應(yīng)和自動添加前綴
這篇文章主要介紹了vue3+vite使用postcss-pxtorem、autoprefixer自適應(yīng)和自動添加前綴方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10