当前位置: 首页 > wzjs >正文

贵州网站备案查询做网站平台公司有哪些

贵州网站备案查询,做网站平台公司有哪些,wordpress页面视频播放器,农家乐怎么做网站前情 uni-app是我比较喜欢的跨平台框架,它能开发小程序/H5/APP(安卓/iOS),重要的是对前端开发友好,自带的IDE可视化的运行和打包也让开发体验也非常棒,公司项目就是主推uni-app,为了用户体验对于耗时操作,…

前情

uni-app是我比较喜欢的跨平台框架,它能开发小程序/H5/APP(安卓/iOS),重要的是对前端开发友好,自带的IDE可视化的运行和打包也让开发体验也非常棒,公司项目就是主推uni-app,为了用户体验对于耗时操作,如接口请求或者异步的API调用都会添加loading效果

原生API使用持性

uni-app项目本身自带有原生交互反馈的API,如showToast、showLoading、showModal、showActionSheet,各有应用场景,而其中showLoading就是用于显示一个加载中效果的,同时跟他配套的还有hideLoading,用于隐藏已经显示的loading效果

showLoading特性:永远只会有一个,如果同时调用多次只会显示最后调用的那一个

hideLoading特性:调用它会关掉页面上的正在显示的loading

思考:

  • 因特性引起的一些使用问题

假设一个场景,我页面上同时调起二个接口,一个接口都会调起一个loading ,最后显示的是后调接口的loading,但是此时前一个接口回来了,会调用hideLoading接口,就会隐藏loading,其实第二个接口还没有回来,导致loading被关了,测试代码如下:

const test0 = () => {uni.showLoading({title: '加载中...0',mask: true});setTimeout(() => {uni.hideLoading();}, 1000);
}const test1 = () => {uni.showLoading({title: '加载中...1',mask: true});setTimeout(() => {uni.hideLoading();}, 2000);
}
test0();
test1();
  • 使用体验问题

在我们做接口请求的时候,接口速度是会受用户的网速影响,网速好就接口返回快,网络差就接口返回慢,这里会有一个问题,如果用户网络好那loading会闪一下就没了,用户都没看到是什么东西,在一定层面上给用户带来不好的体验

解决方案

  • 解决因特性引起的使用问题

因hideLoading并不会识别当前显示是由谁唤起的loading,导致无法识别当前要隐藏的是哪一个Loading,那我们就封装下代码,记录已经唤起的loading,在调用loading的时候通过传参指定要隐藏的是哪一个 loading就行了

  • 优化体验问题

我们无法确认用户的网络状态,那我们在唤起loading的时候是否可以做一个延时显示,假设我们延时为300ms,如果发现300ms内有唤起当前loading的hideloading调用,那当前loading也就不用显示了,但是这又有一个问题,如果网络正好回复时间了310,那一样是闪一下,所以我们再加一个loading的最小显示时间

uni-app项目一想到要全局操作,首选第一想到就是事件通信了,此处我们基于uni-app自带的事件通信 o n 、 on、 onemit来实现一个能解决上面缺陷的loading显示与隐藏方案,完整代码如下:

//  用于存储记录当前已有loading
let loadingObj = {};
// loading需要显示的基准时间
let loadingDelayShow = 300;
// loading显示的最小时间
let loadingDelayHide = 1000;
let loadingTimer = {};// 默认 loading 配置
const loadingOptionsDefault = {mask: true
}/*** 初始化loading* 基于事件通知实现 loading 的显示与隐藏*/
export const initLoading = (options = '数据加载中...') => {// 监听显示 loading 事件uni.$off('showLoading');// optionsIn是loading的配置,参考showLoading的配置,// 其中key用于存储当前是什么哪一个loading,用于与hideLoading配合使用uni.$on('showLoading', (optionsIn = options, key) => {console.log('---- showLoading ----:', optionsIn, key);// 如果传入的是字符串,则将其作为 titleconst loadingOptions = typeof optionsIn === 'string' ? { ...loadingOptionsDefault, title: optionsIn }: { ...loadingOptionsDefault, ...optionsIn };if (!loadingObj[key]) {loadingObj[key] = {show: false,startTime: Date.now()};}// 如果300ms内又调用了hideloading,则无需显示loadingloadingTimer[key] = setTimeout(() => {if (loadingObj[key] && !loadingObj[key].show) {loadingObj[key].show = true;loadingObj[key].startTime = Date.now();uni.showLoading({...loadingOptions});}}, loadingDelayShow);});// 监听隐藏 loading 事件uni.$off('hideLoading');uni.$on('hideLoading', (key) => {if (loadingObj[key]) {loadingObj[key].show = false;clearTimeout(loadingTimer[key]);}if (isCanHide(key)) {const { startTime } = loadingObj[key];if (Date.now() - startTime >= loadingDelayHide) {resetLoading();} else {setTimeout(() => {if (isCanHide(key)) {resetLoading();}}, loadingDelayHide - (Date.now() - startTime));}}});// 监听重置 loading 事件uni.$off('resetLoading');uni.$on('resetLoading', () => {try {resetLoading();} catch (err){console.log('---- resetLoading ----', err);}});
}// 判断要不要隐藏loading
const isCanHide = (key) => {if (!loadingObj[key].show && Object.keys(loadingObj).length === 1) {return true;}// 或者所有的loading对象的show都是falsefor (const key in loadingObj) {if (loadingObj[key].show) {return false;}}return true;
}const resetLoading = () => {loadingObj = {}uni.hideLoading();
}// 导出事件名称常量
export const LOADING_EVENTS = {SHOW: 'showLoading',HIDE: 'hideLoading',RESET: 'resetLoading'
};// 导出默认对象,包含事件名称常量
export default {LOADING_EVENTS
};

使用方式:

在项目根目录main.js中初始化

import { initLoading } from '@/utils/loading';
initLoading()

在需要的地方调用

// 显示loading
uni.$emit('showLoading', '提交订单中...', 'xxx');// 隐藏loading
uni.$emit('hideLoading', 'xxx'); 

使用注意事项

  • 其中xxx是key,要确保唯一,实在是怕重复的话可以引入第三方的uuid来做
  • 显示与隐藏要配套使用,不然记录的loading不会清空或者状态不会变,会导致问题

小结

这是我的 uni-app项目的loading使用方案,已使用在生产中,还没有发现什么问题,如果后续发现什么问题再做更新吧,解决方案千千万,世上没有最好,只有更好,如果你有更好的解决方案,可以分享出来,或者你发现此方案有什么问题,也可以提出来一起探讨。


文章转载自:

http://Ic2zhkk0.qymqh.cn
http://3pcDJfSU.qymqh.cn
http://K5E5Y5Un.qymqh.cn
http://nKx677Lm.qymqh.cn
http://FNopMBL8.qymqh.cn
http://gojZPUhN.qymqh.cn
http://nkz1kEfm.qymqh.cn
http://REtix1jv.qymqh.cn
http://YGmfiYpb.qymqh.cn
http://4AjfV19v.qymqh.cn
http://cUu7SBN2.qymqh.cn
http://QGzPv15h.qymqh.cn
http://iv8YnMg3.qymqh.cn
http://A22C5I2k.qymqh.cn
http://8CSpLnoE.qymqh.cn
http://gkdVoPcZ.qymqh.cn
http://BNFZzorX.qymqh.cn
http://H147OTOs.qymqh.cn
http://lXEhvqJ2.qymqh.cn
http://jbSdKW0r.qymqh.cn
http://F8WSrQwa.qymqh.cn
http://JoOM5OUP.qymqh.cn
http://XJuxHaZS.qymqh.cn
http://buxOqhC1.qymqh.cn
http://DFtCoI8s.qymqh.cn
http://187HZuS0.qymqh.cn
http://SPDM8d5T.qymqh.cn
http://L6ctbcGT.qymqh.cn
http://VPuNJt0Y.qymqh.cn
http://esysm100.qymqh.cn
http://www.dtcms.com/wzjs/686722.html

相关文章:

  • 网站推广专业专业企业网站开发公司
  • notepad做网站足球世界排名国家
  • 外贸网站seo推广方案建设银行辽宁分行报名网站
  • 建设部网站查询造价师证件赶集网官网首页
  • 网站系统怎么做的怎么自己做画册网站
  • 网站用户群太平洋建设集团有限公司网站
  • 做lol数据的网站漳州做网站最便宜
  • 建设网站需要做哪些工作内容手机wap 网站
  • 站酷网素材什么平台可以免费打广告
  • 郑州网站seo优化个人在国外网站做电商
  • 建设网站需要学习什么开发一个页面多少钱
  • 网站一般用什么语言网站开发登录链接
  • 广州网站制作哪家强成都企业网站设计服务商
  • 台州网站注册 公司网站推广前景怎么样
  • 爱站网挖掘关键词iis7搭建asp网站
  • 模型外包网站凡科网站建设教学视频
  • 网站图片轮播怎么弄wordpress电影系统
  • 具有价值的网站制作吉林手机版建站系统信息
  • 嘉兴备案网站建设域名购买平台哪个好
  • 关于企业网站建设的市场比质比价调查报告网站团队组成
  • 网站展示重点全网营销的概念和特点
  • 网站案例分析湖南做照片的网站有哪些
  • 天猫网站设计特点青岛注册公司流程
  • 给人做网站的公司阿里云虚拟主机做2个网站吗
  • 做网站设计师工资多少备案网站
  • 河南广宇建设集团有限公司网站网站建设地图怎么设置
  • 北京中御建设公司网站阿里巴巴官网下载安装
  • 把里面的dede和plugins这2个文件夹覆盖到你的网站根目录做ppt模板下载网站
  • 160 国际英文网站如何做自己的淘宝优惠券网站
  • 手机网站建设cz35网站开发工程师是什么内容