123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- import dayjs from "dayjs";
- import Api from "../model/api";
- /**
- * 节流函数
- * @param {Function} callback 需要被节流的函数
- * @param {Number} duration 距离上次执行超过多少毫秒才会执行被节流的函数
- * @returns
- */
- function throttle(callback, duration = 500) {
- // 最后执行函数时的时间戳
- let lastTime = 0
- return function () {
- // 获取当前时间戳
- const now = new Date().getTime()
- console.log(`上次时间:${lastTime} 这次时间${now} 时间差${now - lastTime}`)
- // 判断当前时间距离上一次执行函数的时间是否超过了duration设定的毫秒数
- if (now - lastTime >= duration) { // 超过了
- // 因为我们需要在 page 中做 this.setData(),所以需要借助 call()
- // 利用 call()方法,实现保留原函数的 this 指向,利用JavaScript的arguments对象实现动态接收参数
- callback.call(this, ...arguments);
- // callback(...arguments)
- // 更新最后执行函数时的时间戳
- lastTime = now;
- console.log("执行throttle")
- }
- // 没超过,啥也不干
- }
- }
- /**
- * 获取事件回调参数的自定义属性
- * @param {Object} event
- * @param {String} target
- */
- function getDataSet(event, target) {
- if (target) {
- return event.currentTarget.dataset[target]
- } else {
- return event.currentTarget.dataset
- }
- }
- /**
- * 获取自定义组件事件参数
- * @param {Object} event
- * @param {String} target
- * @returns {*}
- */
- function getEventParam(event, target) {
- if (target) {
- return event.detail[target]
- } else {
- return event.detail
- }
- }
- /**
- * 吐司
- * @param msg
- */
- function toast(msg) {
- wx.showToast({
- title: msg,
- icon: 'none'
- })
- }
- /**
- * 显示加载框
- * @param msg
- */
- function showLoading(msg) {
- if (msg == undefined) {
- msg = '加载中...'
- }
- wx.showLoading({
- title: msg,
- mask: true
- });
- }
- /**
- * 判断是否手机
- * @param phone
- * @returns {boolean}
- */
- function isMobile(phone) {
- if (!phone.trim()) {
- return false;
- }
- const reg = /^1[0-9]{10}$/;
- if (!reg.test(phone)) {
- return false
- }
- return true
- }
- /**
- * 随机生成uuid - 引入时间戳 (36位字符串)
- * @returns {string}
- */
- function getUuid() {
- let d = new Date().getTime();
- return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
- const r = (d + Math.random() * 16) % 16 | 0;
- d = Math.floor(d / 16);
- return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);
- });
- }
- /**
- * 是否数字
- * @param value
- * @returns {boolean}
- */
- function isNumber(value) {
- return typeof value === 'number' && !isNaN(value);
- }
- /**
- * 格式化标准时间 YYYY-MM-DD HH:mm:ss
- * @param str
- * @returns {string}
- */
- function formatTime(str) {
- return dayjs(str).format("YYYY-MM-DD HH:mm:ss")
- }
- /**
- * 格式化日月年 YYYY-MM-DD YYYY年MM月DD日
- * @param str
- * @returns {string}
- */
- function formatYMD(str) {
- return dayjs(str).format("YYYY-MM-DD")
- }
- function formatYMD2(str) {
- return dayjs(str).format("YYYY年MM月DD日")
- }
- /**
- * 处理小程序richtext 显示图片自适应问题
- * @param content
- * @returns {*}
- */
- function handleRichTextImgAuto(content) {
- return content.replace(/\<img/gi, '<img style="max-width:100%;height:auto')
- }
- export {
- throttle,
- getDataSet,
- getEventParam,
- toast,
- showLoading,
- isMobile,
- getUuid,
- isNumber,
- formatTime,
- formatYMD,
- formatYMD2,
- handleRichTextImgAuto,
- }
|