uni-app学习(二)
1. uni-app学习(二)
1.1. 好用css记录
- 一定透明度的背景色
background: rgba(255,255,255,.6);
1.2. 好用的代码段
- 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)
}
})
}
}
}
- 窗口宽高
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<height){
mode=false;
}
state.screen={
mode,
width,
height
};
}
},actions: {
}
}
// 监听窗口宽高变化
(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)
})
})()
- 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. 节点布局交叉状态
- uni.createIntersectionObserver,地址
- 作用:可以用来推断某些节点是否可以被用户看见、有多大比例可以被用户看见
1.5. TabBar操作
- uni.hideTabBar()
- 作用:隐藏TabBar,还有很多TabBar相关操作,参看这里
- 可以进行红点显示,角标显示等等
1.6. uni的节点选择器
- uni.createSelectorQuery(),可以用来选择特定节点进行操作,参看这里,用于懒加载图片
- 例子
uni.createSelectorQuery().selectAll('.lazy').boundingClientRect((images) => {
images.forEach((image, index) => {
if (image.top <= this.windowHeight) {
this.list[image.dataset.index].show = true;
}
})
}).exec()
- 当然图片自身有个属性可以设置懒加载,只是有一定局限性,参考这里,使用
lazy-load属性为true能达到同样的效果
1.7. 布局上遇到的问题
- 想实现类似饿了吗的悬浮框效果,即上移过程中,中间的某个组件框到顶部后不再上移,呈类似置顶效果
- 参考这个
uni-app学习(二)的更多相关文章
- emberjs学习二(ember-data和localstorage_adapter)
emberjs学习二(ember-data和localstorage_adapter) 准备工作 首先我们加入ember-data和ember-localstorage-adapter两个依赖项,使用 ...
- DjangoRestFramework学习二之序列化组件、视图组件 serializer modelserializer
DjangoRestFramework学习二之序列化组件.视图组件 本节目录 一 序列化组件 二 视图组件 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 序列化组 ...
- Android JNI学习(二)——实战JNI之“hello world”
本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...
- day 82 Vue学习二之vue结合项目简单使用、this指向问题
Vue学习二之vue结合项目简单使用.this指向问题 本节目录 一 阶段性项目流程梳理 二 vue切换图片 三 vue中使用ajax 四 vue实现音乐播放器 五 vue的计算属性和监听器 六 ...
- day 90 DjangoRestFramework学习二之序列化组件
DjangoRestFramework学习二之序列化组件 本节目录 一 序列化组件 二 xxx 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 序列化组件 首先按照 ...
- day 88 DjangoRestFramework学习二之序列化组件、视图组件
DjangoRestFramework学习二之序列化组件.视图组件 本节目录 一 序列化组件 二 视图组件 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 序列化组件 ...
- day 81 Vue学习二之vue结合项目简单使用、this指向问题
Vue学习二之vue结合项目简单使用.this指向问题 本节目录 一 阶段性项目流程梳理 二 vue切换图片 三 vue中使用ajax 四 vue实现音乐播放器 五 vue的计算属性和监听器 六 ...
- Android实战:手把手实现“捧腹网”APP(二)-----捧腹APP原型设计、实现框架选取
Android实战:手把手实现"捧腹网"APP(一)-–捧腹网网页分析.数据获取 Android实战:手把手实现"捧腹网"APP(二)-–捧腹APP原型设计.实 ...
- ReactJS入门学习二
ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...
- TweenMax动画库学习(二)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) Tw ...
随机推荐
- Oracle存储过程常用语法及其使用
1.什么是存储过程 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行.它可以接受参数.输出参数,并可以返回单个或多个 ...
- JAVA web 框架集合
“框架”犹如滔滔江水连绵不绝, 知道有它就好,先掌握自己工作和主流的框架: 在研究好用和新框架. 主流框架教程分享在Java帮帮-免费资源网 其他教程需要时间制作,会陆续分享!!! 152款框架,你还 ...
- JS中把其他类型转换成字符串的三种方法
1.toString()方法 toString()方法返回的是相应值的字符串表现 数值.布尔值.对象和字符串值都有toString()方法,但是null和undefined值没有这个方法 例子: va ...
- python接口自动化框架
接口测框架 安装教程 需要3.5及以上版本的python pip install -r requirements.txt 使用说明 运行manage.py创建项目 创建的项目在projects目录下 ...
- PyCharm编写的代码生成可执行文件操作步骤
1.打开Pycharm.2.打开Terminal(快捷键Alt + F12) 3.安装pyinstaller工具输入:pip install pyinstaller4.生成本项目可执行文件Termin ...
- React和Redux的开发经验之谈
1.显示控制用state,共享数据用redux,觉得可以不用redux的就不要用 2.表单项集中的地方,推荐用高阶组件,单个表单项,不推荐用高阶组件 3.涉及对服务数据的处理,在redux的model ...
- 2013(1)需求工程, 需求开发, 需求分析, 面向对象需求分析, UML,需求建模
案例一 某软件公司拟为物流企业开发一套库存管理系统,该系统的部分需求陈述如下: (1) 库存管理系统主要包括货物入库管理.货物出库管理.仓库管理.统计报表和系统管理等功能. (2) 库存管理系统的用户 ...
- [BZOJ2186]沙拉公主的困惑
[BZOJ2186]沙拉公主的困惑 题面 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定 ...
- 【转】JavaScript 高性能数组去重
原文地址:https://www.cnblogs.com/wisewrong/p/9642264.html 一.测试模版 数组去重是一个老生常谈的问题,网上流传着有各种各样的解法 为了测试这些解法的性 ...
- ASP.NET Core的无状态身份认证框架IdentityServer4
Identity Server 4是IdentityServer的最新版本,它是流行的OpenID Connect和OAuth Framework for .NET,为ASP.NET Core和.NE ...