博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uni-app学习(二)
阅读量:6997 次
发布时间:2019-06-27

本文共 7132 字,大约阅读时间需要 23 分钟。

1. uni-app学习(二)

1.1. 好用css记录

  1. 一定透明度的背景色background: rgba(255,255,255,.6);

1.2. 好用的代码段

  1. store(用户登录)
export default {    state: {        hasLogin: false, //登陆状态        loginProvider: "", //登陆方式 如 微信        openid: null, //应用id        address: {}, //收货地址        userinfo: {            nickName: "未登录",            headimg: "../../static/image/logo.png",            user_id: "123",            individuality: "爱你一万年",            address: "北京市西城区中南海大院1号",            sex: "男",            area: "北京-北京-东城区"        } //用户信息    },    getters: {        userinfo(state) {            return state.userinfo;        },        login(state) {            return state.hasLogin;        },        address(state) {            return state.address;        }    },    mutations: {        login(state, provider) {            state.hasLogin = true;            state.loginProvider = provider;        },        logout(state) {            state.hasLogin = false            state.openid = null        },        setOpenid(state, openid) {            state.openid = openid        },        setAddress(state, address) {            state.address = address;        },        setUserinfo(state, userinfo) {            state.userinfo = userinfo;        }    },    actions: {        isLogin: async function(context) {            return await new Promise((resolve, reject) => {                var hasLogin = context.state.hasLogin;                console.log(context)                if (!hasLogin) {                    uni.showModal({                        title: "您还未登陆,立即登陆?",                        content: "请登陆后进行访问",                        success(e) {                            if (e.confirm) {                                //登陆                                uni.navigateTo({                                    url: '../login/login'                                })                            } else {                                context.commit('logout', "退出")                                console.log(context.state)                                console.log("放弃登陆")                            }                        }                    })                    resolve(false)                } else {                    resolve(true)                }            })        }    }}
  1. 窗口宽高
export default{        state: {            screen:{                mode:true,//窗口宽度比高度 长                height:0,//窗口高度                width:0,//窗口宽度            }        },getters:{            screen(state){                    return state.screen;            }        },mutations: {            screen(state,screen){                var width=screen.width || 720;                var height=screen.height || 1440;                var mode=true;                if(width
// 监听窗口宽高变化(function screenListener(){    uni.onWindowResize((res) => {        that.$store.commit('screen',{width:res.size.windowWidth,height:res.size.windowHeight});//                  console.log('变化后的窗口宽度=' + res.size.windowWidth)//                  console.log('变化后的窗口高度=' + res.size.windowHeight)})})()
  1. store汇总 index.js
import Vue from 'vue'import Vuex from 'vuex'import user from "./store.js"import win from "./win.js"Vue.use(Vuex)const store = new Vuex.Store({      modules:{           user:user,           win:win                 }})export default store

1.3. storage封装

var Storage={    /**     * 异步存入缓存 可对象可数组     * k        string              键     * val      array|object|string 缓存的内容     * expires  int                 有效期     */    set(k,val,expires){        var type= typeof val;        var expires=expires || 300;        return uni.setStorage({key:k,data:{data:val,expires:expires+(Date.parse(new Date())/1000),type:type},success: function () {            console.log('保存成功')        }})    },get(k,Func=function(){}){        try{            uni.getStorage({key: k,            success: function (res) {                var data=res.data;                if(data.expires){                    if(data.expires> (Date.parse(new Date())/1000)){                        Func(data.data)                        return data.data;                    }                    // uni.removeStorage(k);                    try {                        uni.removeStorage(k);                        } catch (e) {                                // error                    }                }            }})                    }catch(e){            console.log(e)            return false;            //TODO handle the exception        }            return false;            },remove(k){        uni.removeStorage(k);    },reset(){        // 获取本地说有缓存信息 删除过期的,超长的,净化系统        uni.getStorageInfo({                    success: function (res) {                    console.log(res.keys);                    console.log(res.currentSize);                    console.log(res.limitSize);                }            });     }}var Sync={    set(k,val,expires){        var expires=expires || 300;        var type= typeof val;        if(type==='object'){            val =JSON.stringify(val)        }        return uni.setStorageSync(k,{data:val,expires:expires+(Date.parse(new Date())/1000),type:type})    },get(k){        try{            var data= uni.getStorageSync(k) || {};            // console.log(data)            if(data.expires){                if(data.expires> (Date.parse(new Date())/1000)){                    if(data.type==='object'){                        return  JSON.parse(data.data)                    }                    return data.data;                }                uni.removeStorageSync(k);                try {                            uni.removeStorageSync(k);                    } catch (e) {                            // error                    }            }        }catch(e){            console.log(e)            return false;            //TODO handle the exception        }                return false;            },reset(){        // 获取本地说有缓存信息 删除过期的,超长的,净化系统        try {            const res = uni.getStorageInfoSync();            console.log(res.keys);            console.log(res.currentSize);            console.log(res.limitSize);        } catch (e) {            // error        }    }}export default {    // CusBASE64: __BASE64,    set:Storage.set,//异步    get:Storage.get,    reset:Storage.reset,    setSync:Sync.set,//同步    getSync:Sync.get,    resetSync:Sync.reset    // encoder:base64decode  }

引入

import Storage from '@/common/utils/Storage.js'

1.4. 节点布局交叉状态

  1. uni.createIntersectionObserver,
  2. 作用:可以用来推断某些节点是否可以被用户看见、有多大比例可以被用户看见

1.5. TabBar操作

  1. uni.hideTabBar()
  2. 作用:隐藏TabBar,还有很多TabBar相关操作,参看
  3. 可以进行红点显示,角标显示等等

1.6. uni的节点选择器

  1. uni.createSelectorQuery(),可以用来选择特定节点进行操作,参看,用于懒加载图片
  2. 例子
uni.createSelectorQuery().selectAll('.lazy').boundingClientRect((images) => {                    images.forEach((image, index) => {                        if (image.top <= this.windowHeight) {                            this.list[image.dataset.index].show = true;                        }                    })                }).exec()
  1. 当然图片自身有个属性可以设置懒加载,只是有一定局限性,参考,使用lazy-load属性为true能达到同样的效果

1.7. 布局上遇到的问题

  1. 想实现类似饿了吗的悬浮框效果,即上移过程中,中间的某个组件框到顶部后不再上移,呈类似置顶效果
  2. 参考

转载于:https://www.cnblogs.com/sky-chen/p/11029047.html

你可能感兴趣的文章