water_xcx/miniprogram_npm/tdesign-miniprogram/navbar/navbar.js

160 lines
5.7 KiB
JavaScript
Raw Normal View History

2025-04-15 15:44:51 +08:00
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
import { SuperComponent, wxComponent } from '../common/src/index';
import config from '../common/config';
import props from './props';
const { prefix } = config;
const name = `${prefix}-navbar`;
let Navbar = class Navbar extends SuperComponent {
constructor() {
super(...arguments);
this.externalClasses = [
't-class',
't-class-title',
't-class-left',
't-class-center',
't-class-left-icon',
't-class-home-icon',
't-class-capsule',
't-class-nav-btn',
];
this.timer = null;
this.options = {
addGlobalClass: true,
multipleSlots: true,
};
this.properties = props;
this.observers = {
visible(visible) {
const { animation } = this.properties;
const visibleClass = `${name}${visible ? '--visible' : '--hide'}`;
this.setData({
visibleClass: `${visibleClass}${animation ? '-animation' : ''}`,
});
if (this.timer) {
clearTimeout(this.timer);
}
if (animation) {
this.timer = setTimeout(() => {
this.setData({
visibleClass,
});
}, 300);
}
},
fixed(fixed) {
this.setData({
fixedClass: fixed ? `${name}--fixed` : '',
});
},
background(background) {
const list = [];
if (background)
list.push(`background: ${background}`);
this.setData({
contentStyle: list.join(';'),
});
},
'homeIcon, leftIcon'() {
this.calcLeftBtn();
},
'title,titleMaxLength'() {
const { title } = this.properties;
const titleMaxLength = this.properties.titleMaxLength || Number.MAX_SAFE_INTEGER;
let temp = title.slice(0, titleMaxLength);
if (titleMaxLength < title.length)
temp += '...';
this.setData({
showTitle: temp,
});
},
};
this.data = {
hasHomeIcon: false,
hasBackIcon: false,
classPrefix: name,
fixedClass: `${name}--fixed`,
contentStyle: '',
boxStyle: '',
opacity: 0.1,
ios: false,
showTitle: '',
};
this.methods = {
calcLeftBtn() {
const { homeIcon, leftIcon } = this.properties;
let home = false;
let back = false;
if (homeIcon)
home = true;
if (leftIcon)
back = true;
this.setData({
hasHomeIcon: home,
hasBackIcon: back,
});
},
goHome() {
this.triggerEvent('go-home');
},
goBack() {
const { delta } = this.data;
const that = this;
this.triggerEvent('go-back');
if (delta > 0) {
wx.navigateBack({
delta,
fail(e) {
that.triggerEvent('fail', e);
},
complete(e) {
that.triggerEvent('complete', e);
},
success(e) {
that.triggerEvent('success', e);
},
});
}
},
};
}
attached() {
this.calcLeftBtn();
let rect = null;
if (wx.getMenuButtonBoundingClientRect) {
rect = wx.getMenuButtonBoundingClientRect();
}
if (!rect)
return;
wx.getSystemInfo({
success: (res) => {
const ios = !!(res.system.toLowerCase().search('ios') + 1);
const navbarHeight = ios ? 44 : 48;
const boxStyleList = [];
boxStyleList.push(`--narbar-padding-top:${(rect.bottom + rect.top) / 2 - navbarHeight / 2}px;`);
if (rect && (res === null || res === void 0 ? void 0 : res.windowWidth)) {
boxStyleList.push(`--navbar-right:${res.windowWidth - rect.left}px;`);
}
boxStyleList.push(`--capsule-height:${rect.height}px;`);
boxStyleList.push(`--capsule-width:${rect.width}px;`);
boxStyleList.push(`--navbar-height:${navbarHeight}px;`);
this.setData({
ios,
boxStyle: boxStyleList.join(';'),
});
},
fail: (err) => {
console.error('navbar 获取系统信息失败', err);
},
});
}
};
Navbar = __decorate([
wxComponent()
], Navbar);
export default Navbar;