123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- // #ifdef H5
- import { DOM } from '../component/h5-dom';
- import init from '../vueRouter/init';
- // #endif
- import { warn } from '../helpers/warn';
- class Patch {
- constructor(H5) {
- this.H5 = H5;
- this.isLoading = true;
- this.loadingCount = 0; // 在APP.vue中进行跳转时,DOMContentLoaded过慢。使用索引来判断
- }
- on(fun, args, callback) {
- if (this.H5) {
- return this[fun](args);
- }
- if (callback) {
- callback();
- }
- }
- /**
- *把vueRouter的生命周期代理过来
- * @param {Object} Router
- * @param {Object} vueRouter
- * @param {VueComponent} vueVim
- */
- // eslint-disable-next-line
- registerHook(Router, vueRouter, vueVim) {
- init(Router, vueRouter, vueVim);
- }
- /**
- * H5 专属 history.back API
- * @param {Number} backLayer 需要返回的层级必须是正整数
- * 2020年1月14日14:39:38 修复 https://github.com/SilurianYang/uni-simple-router/issues/73
- */
- // eslint-disable-next-line
- historyBack({ backLayer, delta = { from: 'navigateBack' } } = {}) {
- const pages = getCurrentPages();
- const page = pages[pages.length - 1];
- const { onBackPress } = page.$options;
- if (onBackPress != null && onBackPress.constructor === Array) {
- const callFun = onBackPress[onBackPress.length - 1];
- const isNext = callFun.call(page, delta);
- if (isNext) {
- return true;
- }
- }
- // eslint-disable-next-line
- history.go(-backLayer);
- }
- /**
- * 把加载动画添加到dom下面,为什么一定要先添加,后移除。保证动画的连续性
- */
- appendHTML({
- style,
- html,
- script,
- }) {
- window.addEventListener('DOMContentLoaded', () => {
- const body = document.querySelector('body');
- body.appendChild(style);
- body.appendChild(html);
- body.appendChild(script);
- this.toogle('startLodding', true);
- });
- }
- /**
- * 页面是否加载完毕触发对应事件
- */
- toogle(toogle, DOMContentLoaded = false) {
- if (DOMContentLoaded && this.loadingCount !== 0) {
- this.loadingCount += 1;
- return false;
- }
- try {
- this.loadingCount += 1;
- if (this.isLoading) {
- window[toogle]();
- }
- } catch (error) {
- warn('你使用了 addRoutes API 提前进行了生命周期 并触发了startLodding');
- }
- }
- async setLoadingStatus({
- loading,
- replaceStyle,
- resetStyle,
- }) {
- this.isLoading = loading;
- if (loading) { // 确认需要加载样式 开始插入节点
- const userStyle = resetStyle();
- const userStyleKeys = Object.keys(userStyle);
- for (let i = 0; i < userStyleKeys.length; i += 1) {
- const key = userStyleKeys[i];
- let html = userStyle[key];
- if (key === 'style' && !replaceStyle) { // 开发者设置为追加style
- html = DOM[key].innerHTML + html;
- }
- DOM[key].innerHTML = html;
- }
- this.appendHTML(DOM);
- }
- }
- }
- export default Patch;
|