zoukankan      html  css  js  c++  java
  • vue移动端开发全家桶

     一句命令搞定全家桶:  npm install vue-router vue-resource vuex --save 
    main.js配置:
    复制代码
    import Vue from 'vue'
    import VueResource from 'vue-resource'
    import VueRouter from 'vue-router'
    import Vuex from 'vuex'
    import App from './App.vue'
    Vue.use(VueResource)
    Vue.use(VueRouter)
    Vue.use(Vuex)
    new Vue({
      el: '#app',
      render: h => h(App)
    })
    复制代码

    其他预处理器sass/less、ui组件、插件按项目/需求各自喜好加载。

    rem 适配:(index.html引入)

    复制代码
    !function (window) {
    
        /* 设计图文档宽度 */
        var docWidth = 750;
    
        var doc = window.document,
            docEl = doc.documentElement,
            resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize';
    
        var recalc = (function refreshRem () {
            var clientWidth = docEl.getBoundingClientRect().width;
    
            /* 8.55:小于320px不再缩小,11.2:大于420px不再放大 */
            docEl.style.fontSize = Math.max(Math.min(20 * (clientWidth / docWidth), 11.2), 8.55) * 5 + 'px';
    
            return refreshRem;
        })();
    
        /* 添加倍屏标识,安卓为1 */
        docEl.setAttribute('data-dpr', window.navigator.appVersion.match(/iphone/gi) ? window.devicePixelRatio : 1);
    
        if (/iP(hone|od|ad)/.test(window.navigator.userAgent)) {
            /* 添加IOS标识 */
            doc.documentElement.classList.add('ios');
            /* IOS8以上给html添加hairline样式,以便特殊处理 */
            if (parseInt(window.navigator.appVersion.match(/OS (d+)_(d+)_?(d+)?/)[1], 10) >= 8)
                doc.documentElement.classList.add('hairline');
        }
    
        if (!doc.addEventListener) return;
        window.addEventListener(resizeEvt, recalc, false);
        doc.addEventListener('DOMContentLoaded', recalc, false);
    
    }(window);
    复制代码

    # 移动端点击事件300ms延迟
    建议使用 fastclisk 插件,在 webpack 入口文件 main.js 中如下配置:

    const FastClick = require('fastclick');
    document.addEventListener('DOMContentLoaded', function () {
        FastClick.attach(document.body);
    }, false);

    # 异步加载组件(以YDUI为例)
    打包构建应用时,Javascript 包会变得非常大,影响页面加载。为了提高效率,可以把不同路由对应的组件分割成不同的代码块,当路由被访问的时候才加载对应组件。
    可以通过 Vue 的 异步组件 和 Webpack 的 code splitting feature 实现:

    复制代码
    import Vue from 'vue';
    import VueRouter from 'vue-router';
    
    Vue.use(VueRouter);
    
    const router = new VueRouter({
        routes: [
            {
                path: '/XXX1',
                component: resolve => require(['./routers/XXX1.vue'], resolve) /* <== 主要代码是这 */
            },
            {
                path: '/XXX2',
                component: resolve => require(['./routers/XXX2.vue'], resolve) /* <== 主要代码是这 */
            }
        ]
    });
    
    import App from './app.vue';
    
    const app = new Vue({
        router,
        render: v => v(App)
    }).$mount('#app');
    复制代码

    # 页面切换加载中提示
    当用户网络较慢时,异步加载组件需要一定时间,此时显示加载中动画相对比较友好。 可以通过 vue-router 和 vuex 轻松实现:
    首先通过 vuex 定义一个状态(isLoading):

    复制代码
    import Vue from 'vue';
    import Vuex from 'vuex';
    
    const store = new Vuex.Store({
        state: {
            isLoading: false
        },
        mutations: {
            updateLoadingStatus(state, isLoading) {
                state.isLoading = isLoading;
            }
        }
    });
    
    const app = new Vue({
        store,
        router,
        render: v => v(App)
    }).$mount('#app');
    复制代码
    复制代码
    其次通过 vue-router 的 beforeEach 和 afterEach 更改 isLoading 状态:
    router.beforeEach((route, redirect, next) => {
        /* 显示加载中动画 */
        store.commit('updateLoadingStatus', true);
        next();
    });
    
    router.afterEach(route => {
        /* 隐藏加载中动画 */
        store.commit('updateLoadingStatus', false);
    });
    最后在 App.vue 里通过 isLoading 显示/隐藏加载中动画即可:
    <template>
        <div style="height: 100%;"><!-- 特别注意:若页面结构使用 yd-layout 组件时,这里需加上 height: 100%; -->
            <div v-show="isLoading">加载中</div>
    
            <router-view v-show="!isLoading"></router-view>
        </div>
    </template>
    
    <script type="text/babel">
        export default {
            computed: {
                isLoading() {
                    return this.$store.state.isLoading
                }
            }
        }
    </script>
    复制代码
  • 相关阅读:
    自己定义九宫格手势解锁
    2015程序猴的总结:不破楼兰终不还!
    Codeforces Round #402 (Div. 2)
    [整体二分]【学习笔记】【更新中】
    BZOJ 3110: [Zjoi2013]K大数查询 [整体二分]
    BZOJ 2738: 矩阵乘法 [整体二分]
    BZOJ 2527: [Poi2011]Meteors [整体二分]
    [偏序关系与CDQ分治]【学习笔记】
    BZOJ 2244: [SDOI2011]拦截导弹 [CDQ分治 树状数组]
    COGS 2479. [HZOI 2016]偏序 [CDQ分治套CDQ分治 四维偏序]
  • 原文地址:https://www.cnblogs.com/wangsongbai/p/10024476.html
Copyright © 2011-2022 走看看