123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- import { NoticeBarDefaultProps } from './props';
- import { log } from '../_util/console';
- import '../_util/assert-component2';
- Component({
- props: NoticeBarDefaultProps,
- data: {
- show: true,
- marqueeStyle: '',
- animatedWidth: 0,
- overflowWidth: 0,
- duration: 0,
- viewWidth: 0,
- },
- didMount: function () {
- var enableMarquee = this.props.enableMarquee;
- this.showError();
- if (enableMarquee) {
- this.measureText(this.startMarquee.bind(this));
- }
- },
- didUpdate: function () {
- var enableMarquee = this.props.enableMarquee;
- this.showError();
- // 这里更新处理的原因是防止notice内容在动画过程中发生改变。
- if (enableMarquee) {
- this.measureText(this.startMarquee.bind(this));
- }
- },
- pageEvents: {
- onShow: function () {
- this.resetState();
- },
- },
- methods: {
- resetState: function () {
- var _this = this;
- if (this.props.enableMarquee) {
- this.setData({
- marqueeStyle: '',
- animatedWidth: 0,
- overflowWidth: 0,
- duration: 0,
- viewWidth: 0,
- }, function () {
- _this.resetMarquee();
- _this.measureText(_this.startMarquee.bind(_this));
- });
- }
- },
- showError: function () {
- var actions = this.props.actions;
- if (!Array.isArray(actions) && typeof actions !== 'undefined') {
- log.warn('NoticeBar', "\u5F53\u524D\u5B9A\u4E49\u7684 actions \u7684\u7C7B\u578B\u4E3A ".concat(typeof actions, "\uFF0C\u4E0D\u7B26\u5408\u5C5E\u6027\u5B9A\u4E49\uFF0C\u5E94\u8BE5\u4E3A\u6570\u7EC4\uFF0C\u5982\uFF1Aactions=\"{{['\u503C', '\u503C']}}"));
- }
- },
- onTap: function () {
- var _a = this.props, mode = _a.mode, onTap = _a.onTap;
- if (mode === 'link' && typeof onTap === 'function') {
- return onTap();
- }
- if (mode === 'closeable' && typeof onTap === 'function') {
- this.setData({
- show: false,
- });
- return onTap();
- }
- },
- // 文本滚动的计算
- resetMarquee: function () {
- var loop = this.props.loop;
- var viewWidth = this.data.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,
- });
- },
- startMarquee: function () {
- var loop = this.props.loop;
- var leading = 500;
- var _a = this.data, duration = _a.duration, overflowWidth = _a.overflowWidth, viewWidth = _a.viewWidth;
- var marqueeScrollWidth = overflowWidth;
- if (loop) {
- marqueeScrollWidth = overflowWidth + viewWidth;
- }
- var marqueeStyle = "transform: translate3d(".concat(-marqueeScrollWidth, "px, 0, 0); transition: ").concat(duration, "s all linear ").concat(typeof leading === 'number' ? "".concat(leading / 1000, "s") : '0s', ";");
- if (this.data.marqueeStyle !== marqueeStyle) {
- this.setData({
- marqueeStyle: marqueeStyle,
- });
- }
- },
- onTransitionEnd: function () {
- var _this = this;
- var loop = this.props.loop;
- var trailing = 200;
- if (loop) {
- setTimeout(function () {
- _this.resetMarquee();
- _this.measureText(_this.startMarquee.bind(_this));
- }, trailing);
- }
- },
- measureText: function (callback) {
- var _this = this;
- var fps = 40;
- var loop = this.props.loop;
- // 计算文本所占据的宽度,计算需要滚动的宽度
- setTimeout(function () {
- my.createSelectorQuery()
- .select(".ant-notice-bar-marquee-".concat(_this.$id))
- .boundingClientRect()
- .select(".ant-notice-bar-content-".concat(_this.$id))
- .boundingClientRect()
- .exec(function (ret) {
- var _a;
- // eslint-disable-next-line max-len
- var overflowWidth = (ret &&
- ret[0] &&
- ret[1] &&
- ret[0].width -
- ret[1].width) ||
- 0;
- var viewWidth = ((_a = ret[1]) === null || _a === void 0 ? void 0 : _a.width) || 0;
- var marqueeScrollWidth = overflowWidth;
- if (loop) {
- marqueeScrollWidth = overflowWidth + viewWidth;
- }
- if (overflowWidth > 0) {
- _this.setData({
- overflowWidth: overflowWidth,
- viewWidth: viewWidth,
- duration: marqueeScrollWidth / fps,
- });
- callback();
- }
- });
- }, 0);
- },
- },
- });
|