@forchange/aui
Version:
ai-boss 业务 ui 组件库
192 lines (155 loc) • 6.03 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var React = _interopRequireWildcard(require("react"));
var _antd = require("antd");
require("./style/carousel.css");
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
class Carousel extends React.Component {
constructor(...args) {
super(...args);
_defineProperty(this, "state", {
currentPage: 1,
// 当前页数
contentWidth: 0,
// 容器宽度
cardWidthArr: [],
// 卡片宽度数组
scrollWidthArr: [],
// 滑动长度数组
spaceWidth: Number(this.props.auiSpaceWidth) || 21
});
_defineProperty(this, "componentDidMount", () => {
window.addEventListener('resize', this.updateSize);
this.updateSize();
});
_defineProperty(this, "componentWillUnmount", () => {
window.removeEventListener('resize', this.updateSize);
});
_defineProperty(this, "updateSize", () => {
this.setState({
scrollWidthArr: [],
cardWidthArr: []
});
try {
const ele = document.getElementById('carousel-content');
const cardWidthArr = [];
if (ele && ele.children.length > 0) {
// 整体宽度
this.setState({
contentWidth: ele.offsetWidth
});
for (let i = 0; i < ele.children.length; i++) {
if (i !== ele.children.length - 1) {
cardWidthArr.push(ele.children[i].clientWidth);
}
}
}
this.setState({
cardWidthArr: [...this.state.cardWidthArr, ...cardWidthArr]
}, () => {
// 空白卡片宽度,卡片可能宽度不一致,需要计算。
const emptyDiv = document.getElementById('carousel-empty');
if (emptyDiv) {
emptyDiv.style.width = this.getEmptyWidth();
}
});
} catch (e) {
console.log('监听浏览器事件出错', e);
_antd.message.warning('轮播图渲染错误,请联系开发');
}
});
_defineProperty(this, "getEmptyWidth", () => {
const cardSpaceWidth = this.state.spaceWidth;
const scrollWidthArr = [];
let total = 0; // 空白内容总长度
this.state.cardWidthArr.map((item, index) => {
total += item + cardSpaceWidth;
if (total - cardSpaceWidth > this.state.contentWidth) {
scrollWidthArr.push(total - item - cardSpaceWidth);
total = item + cardSpaceWidth; // 卡片长度重新计算
}
if (index === this.state.cardWidthArr.length - 1 && total - cardSpaceWidth === this.state.contentWidth) {
total = 0;
}
});
this.setState({
scrollWidthArr: [...this.state.scrollWidthArr, ...scrollWidthArr]
});
return this.state.contentWidth - total + 'px';
});
_defineProperty(this, "scrollLeft", () => {
const ele = document.getElementById('carousel-content');
ele.scrollLeft = this.getScrollLengthLeft();
if (this.state.currentPage > 1) {
this.setState({
currentPage: this.state.currentPage - 1
});
}
});
_defineProperty(this, "scrollRight", () => {
const ele = document.getElementById('carousel-content');
ele.scrollLeft = this.getScrollLengthRight();
if (this.state.currentPage < this.state.scrollWidthArr.length + 1) {
this.setState({
currentPage: this.state.currentPage + 1
});
}
});
_defineProperty(this, "getScrollLengthRight", () => {
let scrollLength = 0;
for (let page = 0; page < this.state.currentPage; page++) {
scrollLength += this.state.scrollWidthArr[page];
}
return scrollLength;
});
_defineProperty(this, "getScrollLengthLeft", () => {
if (this.state.currentPage === 1) {
return 0;
}
let scrollLength = 0;
for (let page = 0; page < this.state.currentPage - 2; page++) {
scrollLength += this.state.scrollWidthArr[page];
}
return scrollLength;
});
}
render() {
return React.createElement("div", {
className: "aui-carousel"
}, React.createElement("div", {
className: `${this.state.currentPage === 1 ? 'carousel-disabled' : ''}`
}, React.createElement(_antd.Icon, {
type: "left",
onClick: this.scrollLeft
})), React.createElement("div", {
className: "content",
id: "carousel-content"
}, Array.isArray(this.props.children) ? this.props.children.map(child => child) : '', React.createElement("div", {
id: "carousel-empty"
})), React.createElement("div", {
className: `${this.state.currentPage - 1 === this.state.scrollWidthArr.length ? 'carousel-disabled' : ''}`
}, React.createElement(_antd.Icon, {
type: "right",
onClick: this.scrollRight
})));
}
}
var _default = Carousel;
exports.default = _default;