module.exports = {
// 判斷是 IOS 還是安卓
getPhoneType() {
var type = 'other'
switch (uni.getSystemInfoSync().platform) {
case 'android':
type = 'android'
break;
case 'ios':
type = 'ios'
break;
default:
break;
}
return type
},
// 處理手機號碼中間四位
phoneNumHide(phone) {
var reg = /^(\d{3})\d{4}(\d{4})$/;
phone = phone.replace(reg, "$1****$2");
return phone
},
// 處理文件路徑
getLocalFilePath(path) {
if (path.indexOf('_www') === 0 || path.indexOf('_doc') === 0 || path.indexOf('_documents') === 0 || path.indexOf('_downloads') === 0) {
return path
}
if (path.indexOf('file://') === 0) {
return path
}
if (path.indexOf('/storage/emulated/0/') === 0) {
return path
}
if (path.indexOf('/') === 0) {
var localFilePath = plus.io.convertAbsoluteFileSystem(path)
if (localFilePath !== path) {
return localFilePath
} else {
path = path.substr(1)
}
}
return '_www/' + path
},
// 圖片轉(zhuǎn) base64ToPath
pathToBase64(path) {
let that = this
return new Promise((resolve, reject) => {
if (typeof window === 'object' && 'document' in window) {
if (typeof FileReader === 'function') {
var xhr = new XMLHttpRequest()
xhr.open('GET', path, true)
xhr.responseType = 'blob'
xhr.onload = () => {
if (this.status === 200) {
let fileReader = new FileReader()
fileReader.onload = (e) => {
resolve(e.target.result)
}
fileReader.onerror = reject
fileReader.readAsDataURL(this.response)
}
}
xhr.onerror = reject
xhr.send()
return
}
var canvas = document.createElement('canvas')
var c2x = canvas.getContext('2d')
var img = new Image
img.onload = () => {
canvas.width = img.width
canvas.height = img.height
c2x.drawImage(img, 0, 0)
resolve(canvas.toDataURL())
canvas.height = canvas.width = 0
}
img.onerror = reject
img.src = path
return
}
if (typeof plus === 'object') {
plus.io.resolveLocalFileSystemURL(that.getLocalFilePath(path), (entry) => {
entry.file((file) => {
var fileReader = new plus.io.FileReader()
fileReader.onload = (data) => {
resolve(data.target.result)
}
fileReader.onerror = (error) => {
reject(error)
}
fileReader.readAsDataURL(file)
}, (error) => {
reject(error)
})
}, (error) => {
reject(error)
})
return
}
if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
wx.getFileSystemManager().readFile({
filePath: path,
encoding: 'base64',
success(res) {
resolve('data:image/png;base64,' + res.data)
},
fail(error) {
reject(error)
}
})
return
}
reject(new Error('not support'))
})
},
// base 64 轉(zhuǎn)文件路徑
base64ToPath(base64) {
return new Promise((resolve, reject) => {
if (typeof window === 'object' && 'document' in window) {
base64 = base64.split(',')
var type = base64[0].match(/:(.*?);/)[1]
var str = atob(base64[1])
var n = str.length
var array = new Uint8Array(n)
while (n--) {
array[n] = str.charCodeAt(n)
}
return resolve((window.URL || window.webkitURL).createObjectURL(new Blob([array], {
type: type
})))
}
var extName = base64.match(/data\:\S+\/(\S+);/)
if (extName) {
extName = extName[1]
} else {
reject(new Error('base64 error'))
}
var fileName = Date.now() + '.' + extName
if (typeof plus === 'object') {
var bitmap = new plus.nativeObj.Bitmap('bitmap' + Date.now())
bitmap.loadBase64Data(base64, () => {
var filePath = '_doc/uniapp_temp/' + fileName
bitmap.save(filePath, {}, () => {
bitmap.clear()
resolve(filePath)
}, (error) => {
bitmap.clear()
reject(error)
})
}, (error) => {
bitmap.clear()
reject(error)
})
return
}
if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
var filePath = wx.env.USER_DATA_PATH + '/' + fileName
wx.getFileSystemManager().writeFile({
filePath: filePath,
data: base64.replace(/^data:\S+\/\S+;base64,/, ''),
encoding: 'base64',
success() {
resolve(filePath)
},
fail(error) {
reject(error)
}
})
return
}
reject(new Error('not support'))
})
},
// 打開第三方地圖應(yīng)用
toMapAPP(latitude, longitude, name) {
let url = "";
if (plus.os.name == "Android") { // 判斷是安卓端
plus.nativeUI.actionSheet({ // 選擇菜單
title: "選擇地圖應(yīng)用",
cancel: "取消",
buttons: [{
title: "騰訊地圖"
}, {
title: "百度地圖"
}, {
title: "高德地圖"
}]
}, (e) => {
switch (e.index) {
// 下面是拼接 url,不同系統(tǒng)以及不同地圖都有不同的拼接字段
case 1:
// 注意 referer=xxx 的 xxx 替換成你在騰訊地圖開發(fā)平臺申請的 key
url = `qqmap://map/geocoder?coord=${latitude},${longitude}&referer=7ZDBZ-POOWJ-3PRFG-KCBCD-WAH5K-AVFVL`;
break;
case 2:
url =
`baidumap://map/marker?location=${latitude},${longitude}&title=${name}&coord_type=gcj02&src=andr.baidu.openAPIdemo`;
break;
case 3:
url = `androidamap://viewMap?sourceApplication=appname&poiname=${name}&lat=${latitude}&lon=${longitude}&dev=0`;
break;
default:
break;
}
if (url != "") {
url = encodeURI(url);
// plus.runtime.openURL(url, (e) => {}) // 調(diào)起手機APP應(yīng)用
plus.runtime.openURL(url, (e) => {
plus.nativeUI.alert("本機未安裝指定的地圖應(yīng)用");
});
}
})
} else {
// iOS上獲取本機是否安裝了百度高德地圖谴轮,需要在 manifest 里配置
// 在 manifest.json 文件 app-plus -> distribute -> apple -> urlschemewhitelist 點下添加
// (如urlschemewhitelist:["iosamap","baidumap","qqmap"])
plus.nativeUI.actionSheet({
title: "選擇地圖應(yīng)用",
cancel: "取消",
buttons: [{
title: "騰訊地圖"
}, {
title: "百度地圖"
}, {
title: "高德地圖"
}]
}, (e) => {
switch (e.index) {
case 1:
url = `qqmap://map/geocoder?coord=${latitude},${longitude}&referer=xxx`;
break;
case 2:
url =
`baidumap://map/marker?location=${latitude},${longitude}&title=${name}&content=${name}&src=ios.baidu.openAPIdemo&coord_type=gcj02`;
break;
case 3:
url =
`iosamap://viewMap?sourceApplication=applicationName&poiname=${name}&lat=${latitude}&lon=${longitude}&dev=0`;
break;
default:
break;
}
if (url != "") {
url = encodeURI(url);
plus.runtime.openURL(url, (e) => {
plus.nativeUI.alert("本機未安裝指定的地圖應(yīng)用");
});
}
})
}
},
// 獲取頁面路徑
getCurPage() {
var pages = getCurrentPages();
var page = pages[pages.length - 1]
return 'https://czjxmx.com/h5/#' + page.route
},
// 短震動
vibrate() {
let UIImpactFeedbackGenerator = plus.ios.importClass('UIImpactFeedbackGenerator');
let impact = new UIImpactFeedbackGenerator();
impact.prepare();
impact.init(1);
impact.impactOccurred();
},
// 獲取用戶cid
getUserCid() {
let clientInfo = plus.push.getClientInfo()
return clientInfo.clientid // 設(shè)備CID
},
// 數(shù)組內(nèi)是否包含
inArray(search, array) {
for (var i in array) {
if (array[i] == search) {
return true;
}
}
return false;
},
// 公眾號登錄鑒權(quán)--靜默授權(quán)
gzhLoginBase(url, type) {
// type : snsapi_base 靜默授權(quán) snsapi_userinfo 獲取用戶信息
let local = encodeURIComponent(url) // 獲取當(dāng)前頁面地址
let Appid = '你的APPID'
window.location.href =
"https://open.weixin.qq.com/connect/oauth2/authorize?appid=" +
Appid + // 你APP申請的APPId洲炊,每個app都有個ID是識別你app的方式
"&redirect_uri=" +
local +
"&response_type=code&scope=" + type + "&state=1#wechat_redirect";
},
// 判斷是否是微信瀏覽器
is_wx() {
let en = window.navigator.userAgent.toLowerCase()
// 匹配en中是否含有 MicroMessenger 字符串
if (en.match(/MicroMessenger/i) == 'micromessenger') {
return true
}
if (en.match(/MicroMessenger/i) != 'micromessenger') {
return false
}
},
// 隨機整數(shù)
random(lower, upper) {
return Math.floor(Math.random() * (upper - lower + 1)) + lower;
},
// 監(jiān)聽網(wǎng)絡(luò)
onNetWork() {
let func = (res) => {
if (res.networkType === 'none') {
uni.showToast({
title: '網(wǎng)絡(luò)異常,請先連接',
icon: 'none',
duration: 3000
});
}
}
uni.getNetworkType({
success: func
});
uni.onNetworkStatusChange(func);
},
// 數(shù)組置頂
toFirst(arr, index) {
if (index != 0) {
arr.unshift(arr.splice(index, 1)[0]);
}
return arr;
},
// 判斷地址是否包含前綴
httpLink(url) {
const Http = url.substr(0, 7).toLowerCase()
const Https = url.substr(0, 8).toLowerCase()
if (Http === "http://" || Https === "https://") {
return true
}
return false
},
// 獲取當(dāng)前頁面路由---包含參數(shù)
getNowPagePath() {
let routes = getCurrentPages(); // 獲取當(dāng)前打開過的頁面路由數(shù)組
if (routes.length == 0) {
return '/index/index'
}
let curRoute = routes[routes.length - 1].route // 獲取當(dāng)前頁面路由
let curParam = routes[routes.length - 1].options; // 獲取路由參數(shù)
// 拼接參數(shù)
let param = ''
for (let key in curParam) {
if (key != 'code') {
if (param == '') {
param += '?' + key + '=' + curParam[key]
} else {
param += '&' + key + '=' + curParam[key]
}
}
}
let page_url = '/' + curRoute + param
return page_url
},
// 獲取字符長度 中文2個字符响疚,英文一個字符
strlen(str) {
var len = 0;
for (var i = 0; i < str.length; i++) {
var c = str.charCodeAt(i);
// 單字節(jié)加1
if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) {
len++
} else {
len += 2
}
}
return len
},
// 字符空格過濾
trim(str) {
return str.replace(/^(\s|\u00A0)+/, '').replace(/(\s|\u00A0)+$/, '');
},
// 數(shù)字轉(zhuǎn)中文
toChinesNum(num) {
let changeNum = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
let unit = ["", "十", "百", "千", "萬"];
num = parseInt(num);
let getWan = (temp) => {
let strArr = temp.toString().split("").reverse();
let newNum = "";
for (var i = 0; i < strArr.length; i++) {
newNum = (i == 0 && strArr[i] == 0 ? "" : (i > 0 && strArr[i] == 0 && strArr[i - 1] == 0 ? "" : changeNum[strArr[i]] + (strArr[i] == 0 ? unit[0] : unit[i]))) + newNum;
}
return newNum;
}
let overWan = Math.floor(num / 10000);
let noWan = num % 10000;
if (noWan.toString().length < 4) {
noWan = "0" + noWan;
}
return overWan ? getWan(overWan) + "萬" + getWan(noWan) : getWan(num);
}
}
UNI-APP 一些常用方法
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門哥力,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事吩跋∧洌” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵锌钮,是天一觀的道長桥温。 經(jīng)常有香客問我,道長梁丘,這世上最難降的妖魔是什么侵浸? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮氛谜,結(jié)果婚禮上掏觉,老公的妹妹穿的比我還像新娘。我一直安慰自己混蔼,他們只是感情好履腋,可當(dāng)我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惭嚣,像睡著了一般遵湖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晚吞,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼缅糟!你這毒婦竟也來了挺智?” 一聲冷哼從身側(cè)響起,我...
- 正文 年R本政府宣布哄陶,位于F島的核電站,受9級特大地震影響哺壶,放射性物質(zhì)發(fā)生泄漏屋吨。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一山宾、第九天 我趴在偏房一處隱蔽的房頂上張望至扰。 院中可真熱鬧,春花似錦资锰、人聲如沸敢课。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽直秆。三九已至,卻和暖如春鞭盟,著一層夾襖步出監(jiān)牢的瞬間圾结,已是汗流浹背。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 官方的文檔沒有解釋手勢事件馋记。只有一些方法号坡,列舉出來方便使用: @click 組件被點擊@longpress 長按(...
- 注意:map組件如果放在uni-popup里面會有層級問題,造成不顯示的問題梯醒,我是直接放在根元素下面宽堆,控制顯隱解決...
- 記錄自己的學(xué)習(xí)之旅吧,也算是一種變相的監(jiān)督自己籽慢,將自己的學(xué)習(xí)之路記錄下來浸遗。每次學(xué)完,寫下這些箱亿,也算是一種復(fù)習(xí)跛锌。 正...
- 用vue-cli方式創(chuàng)建uni-app項目引入uview-ui報錯找不到,讓在.d.ts文件添加 declare ...