123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- import { __awaiter, __generator } from "tslib";
- import { Component, triggerEventOnly, getValueFromProps, } from '../_util/simply';
- import { getInstanceBoundingClientRect } from '../_util/jsapi/get-instance-bounding-client-rect';
- import { NoticeBarDefaultProps } from './props';
- Component(NoticeBarDefaultProps, {
- getInstance: function () {
- if (this.$id) {
- return my;
- }
- return this;
- },
- getBoundingClientRectWithId: function (prefix) {
- return __awaiter(this, void 0, void 0, function () {
- return __generator(this, function (_a) {
- switch (_a.label) {
- case 0: return [4 /*yield*/, getInstanceBoundingClientRect(this.getInstance(), "".concat(prefix).concat(this.$id ? "-".concat(this.$id) : ''))];
- case 1: return [2 /*return*/, _a.sent()];
- }
- });
- });
- },
- onTap: function () {
- var mode = getValueFromProps(this, 'mode');
- if (mode === 'link') {
- triggerEventOnly(this, 'tap');
- }
- if (mode === 'closeable') {
- if (typeof this.props.onTap !== 'function') {
- return;
- }
- this.setData({
- show: false,
- });
- triggerEventOnly(this, 'tap');
- }
- },
- startMarquee: function (state) {
- var loop = getValueFromProps(this, 'loop');
- var leading = 500;
- var duration = state.duration, overflowWidth = state.overflowWidth, viewWidth = state.viewWidth;
- var marqueeScrollWidth = overflowWidth;
- if (loop) {
- marqueeScrollWidth = overflowWidth + viewWidth;
- }
- var newMarqueeStyle = "transform: translate3d(".concat(-marqueeScrollWidth, "px, 0, 0); transition: ").concat(duration, "s all linear ").concat(typeof leading === 'number' ? "".concat(leading / 1000, "s") : '0s', ";");
- this.setData({
- marqueeStyle: newMarqueeStyle,
- });
- return newMarqueeStyle;
- },
- measureText: function (callback) {
- var _this = this;
- var fps = 40;
- var loop = getValueFromProps(this, 'loop');
- // 计算文本所占据的宽度,计算需要滚动的宽度
- setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {
- var marqueeSize, contentSize, overflowWidth, viewWidth, marqueeScrollWidth;
- return __generator(this, function (_a) {
- switch (_a.label) {
- case 0: return [4 /*yield*/, this.getBoundingClientRectWithId('.ant-notice-bar-marquee')];
- case 1:
- marqueeSize = _a.sent();
- return [4 /*yield*/, this.getBoundingClientRectWithId('.ant-notice-bar-content')];
- case 2:
- contentSize = _a.sent();
- overflowWidth = (marqueeSize &&
- contentSize &&
- marqueeSize.width - contentSize.width) ||
- 0;
- viewWidth = (contentSize === null || contentSize === void 0 ? void 0 : contentSize.width) || 0;
- marqueeScrollWidth = overflowWidth;
- if (loop) {
- marqueeScrollWidth = overflowWidth + viewWidth;
- }
- if (overflowWidth > 0) {
- callback({
- overflowWidth: overflowWidth,
- viewWidth: viewWidth,
- duration: marqueeScrollWidth / fps,
- });
- }
- return [2 /*return*/];
- }
- });
- }); }, 0);
- },
- // 文本滚动的计算
- resetMarquee: function (state) {
- var loop = getValueFromProps(this, 'loop');
- var viewWidth = state.viewWidth;
- var showMarqueeWidth = '0px';
- if (loop) {
- showMarqueeWidth = "".concat(viewWidth, "px");
- }
- var marqueeStyle = "transform: translate3d(".concat(showMarqueeWidth, ", 0, 0); transition: 0s all linear;");
- this.setData({
- marqueeStyle: marqueeStyle,
- });
- },
- onTransitionEnd: function () {
- var _this = this;
- var loop = getValueFromProps(this, 'loop');
- var trailing = 200;
- if (loop) {
- setTimeout(function () {
- _this.measureText(function (state) {
- _this.resetMarquee.call(_this, state);
- });
- }, trailing);
- }
- },
- }, {
- show: true,
- marqueeStyle: '',
- }, undefined, {
- didMount: function () {
- var _this = this;
- var enableMarquee = this.props.enableMarquee;
- if (enableMarquee) {
- this.measureText(function (state) {
- _this.startMarquee.call(_this, state);
- });
- }
- },
- didUpdate: function () {
- var _this = this;
- var enableMarquee = this.props.enableMarquee;
- // 这里更新处理的原因是防止notice内容在动画过程中发生改变。
- if (enableMarquee) {
- console.log(enableMarquee);
- this.measureText(function (state) {
- _this.startMarquee.call(_this, state);
- });
- }
- },
- pageEvents: {
- onShow: function () {
- var _this = this;
- if (this.props.enableMarquee) {
- this.setData({ marqueeStyle: '' });
- this.resetMarquee({
- overflowWidth: 0,
- duration: 0,
- viewWidth: 0,
- });
- this.measureText(function (state) {
- _this.startMarquee.call(_this, state);
- });
- }
- },
- },
- });
|