yl-view
Version:
一个基于uniapp的ui框架
186 lines (178 loc) • 4.91 kB
JavaScript
/**
* 进行延时,以达到可以简写代码的目的,比如
* await sleep(20)将会阻塞20ms
*/
function sleep(value = 30) {
return new Promise((resolve) => {
setTimeout(() => {
resolve()
}, value)
})
}
// 获取设备信息
function sys() {
// #ifdef MP-WEIXIN
return {
...uni.getSystemSetting(),
...uni.getAppAuthorizeSetting(),
...uni.getDeviceInfo(),
...uni.getWindowInfo(),
...uni.getAppBaseInfo()
}
// #endif
// #ifndef MP-WEIXIN
return uni.getSystemInfoSync()
// #endif
}
// 防抖
function throttle(func, delay) {
let prev = Date.now();
return function() {
let context = this;
let args = arguments;
let now = Date.now();
if (now - prev >= delay) {
func.apply(context, args);
prev = Date.now();
}
}
}
// 添加rpx单位
function addUnitRpx(value) {
if (/\d$/.test(value)) {
return value + 'rpx'
} else {
return value
}
}
// 以-连接的命名转为驼峰命名
function camelName(str) {
var arr = str.split("-"); //用split()函数来进行分割字符串arr里面包括【border,bottom,color】
for (var i = 1; i < arr.length; i++) { //从数组的第二项开始循环,charAt(0)找到第一个字母。substring(1)截掉第一个字母。
arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].substring(1); //循环之后把得到的字符赋给arr。【border,Bottom, Color】
}
return arr.join(""); //用join方法来拼接,空拼接。就变成borderBottomColor
}
// 查询节点信息
// 目前此方法在支付宝小程序中无法获取组件跟接点的尺寸,为支付宝的bug
// 解决办法为在组件根部再套一个没有任何作用的view元素
function ylGetRect(selector, _this, all) {
let query = null
// #ifdef MP-ALIPAY
query = uni.createSelectorQuery()
// #endif
// #ifndef MP-ALIPAY
query = uni.createSelectorQuery().in(_this)
// #endif
return new Promise((resolve) => {
query[all ? 'selectAll' : 'select'](selector)
.boundingClientRect((rect) => {
if (all && Array.isArray(rect) && rect.length) {
resolve(rect)
}
if (!all && rect) {
resolve(rect)
}
})
.exec()
})
}
// 获取父组件的参数,因为支付宝小程序不支持provide/inject的写法
// this.$parent在非H5中,可以准确获取到父组件,但是在H5中,需要多次this.$parent.$parent.xxx
// 这里默认值等于undefined有它的含义,因为最顶层元素(组件)的$parent就是undefined,意味着不传name
// 值(默认为undefined),就是查找最顶层的$parent
function $parent(name = undefined) {
let parent = this.$parent
// 通过while历遍,这里主要是为了H5需要多层解析的问题
while (parent) {
// 父组件
if (parent.$options && parent.$options.name !== name) {
// 如果组件的name不相等,继续上一级寻找
parent = parent.$parent
} else {
return parent
}
}
return false
}
function $children(name = undefined) {
let childrens = this.$children
let childs = []
if (childrens.length) {
for (let i = 0; i < childrens.length; i++) {
let children = childrens[i]
if (children.$options && children.$options.name !== name) {
// 如果组件的name不相等,继续上一级寻找
childs = [...childs, ...$children.call(children, name)]
} else {
childs = [...childs, children]
}
}
return childs
}
return []
}
/**
* @description error提示
* @param {*} err 错误内容
*/
function error(err) {
// 开发环境才提示,生产环境不会提示
if (process.env.NODE_ENV === 'development') {
console.error(`yl-view提示:${err}`)
}
}
/**
* @description error提示
* @param {*} err 错误内容
*/
function log(err) {
// 开发环境才提示,生产环境不会提示
if (process.env.NODE_ENV === 'development') {
console.log(`yl-view提示:${err}`)
}
}
/**
* 显示消息提示框
* @param {String} title 提示的内容,长度与 icon 取值有关。
* @param {Number} duration 提示的延迟时间,单位毫秒,默认:2000
*/
function toast(title, duration = 2000) {
uni.showToast({
title: String(title),
icon: 'none',
duration
})
}
/**
* 将sass导出的字体变量?%取消
* @param {String} title 提示的内容,长度与 icon 取值有关。
* @param {Number} duration 提示的延迟时间,单位毫秒,默认:2000
*/
function replace(value, suffix) {
if (uni.$yl.test.string(value)) {
return value.replace(`/${prefix}/g`, suffix)
} else {
return value
}
}
/**
* 生成唯一标识
*/
function getUid() {
return `Uni_${Math.ceil(Math.random() * 10e5).toString(36)}`
}
export default {
sys,
sleep,
ylGetRect,
$parent,
$children,
throttle,
addUnitRpx,
camelName,
error,
log,
toast,
getUid
}