zoukankan      html  css  js  c++  java
  • uni-app学习(二)

    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,//窗口高度
    				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<height){
    					mode=false;
    				}
    				state.screen={
    					mode,
    					width,
    					height
    				};
    			}
    			
    		},actions: {
    
    		}
    }
    
    // 监听窗口宽高变化
    (function screenListener(){
    	uni.onWindowResize((res) => {
    		that.$store.commit('screen',{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. 参考这个
  • 相关阅读:
    mysql 优化
    二叉查找树(BST)、红黑树、B-树、B+树
    HashMap,ConcurrentHashMap 原理分析
    2019_京东JAVA实习生招聘机试第一题
    2019年今日头条机试_JAVA后台岗_第二题
    2019年今日头条机试_JAVA后台岗_第一题
    C++_pthread read-write lock_读写锁_visual studio 2015下配置
    Winsock2_WSADATA
    leetcode_1011. Capacity To Ship Packages Within D Days_binary search二分
    leetcode_684. Redundant Connection
  • 原文地址:https://www.cnblogs.com/sky-chen/p/11029047.html
Copyright © 2011-2022 走看看