P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders
P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders

P/SWC with HC-AH 26 non-residents receiving rehabilitative psychiatric disorders

Price

$4.05 $4.05
Save $0.00
Free shipping

color

Please select a color

size

Please select a size

Quantity

Free worldwide shipping
Free returns
Sustainably made
Secure payments


More To Love





Aliexpress Recommendations

Sign up and save

Entice customers to sign up for your mailing list with discounts or exclusive offers. Include an image for extra impact.
Thanks for subscribing
No Thanks
const TAG = 'spz-custom-painter-button-animation'; const MAX_ITERATION_COUNT = 99999999; const SITE = (window.C_SETTINGS && window.C_SETTINGS.routes && window.C_SETTINGS.routes.root) || ''; const ADD_TO_CART_ANIMATION_SETTING = `${SITE}/api/marketing_atmosphere_app/add_to_cart_btn_animation/setting`; class SpzCustomPainterButtonAnimation extends SPZ.BaseElement { /**@override */ static deferredMount() { return false; } /** @param {!SpzElement} element */ constructor(element) { super(element); /** @private {!../../src/service/xhr-impl.Xhr} */ this.xhr_ = SPZServices.xhrFor(this.win); /** @private {Object} */ this.data_ = null; /** @private {Element} */ this.addToCartButton_ = null; /** @private {boolean} */ this.productAvailable_ = true; /** @private {number} */ this.timerId_ = null; /** @private {number} */ this.animationExecutionCount_ = 0; /** @private {boolean} */ this.selectedVariantAvailable_ = true; /** @private {number} */ this.delay_ = 5000; /** @private {number} */ this.iterationCount_ = 5; /** @private {string} */ this.animationClass_ = ''; } /** @override */ isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } /** @override */ buildCallback() { this.productAvailable_ = this.element.hasAttribute('product-available'); this.selectedVariantAvailable_ = this.element.hasAttribute('selected-variant-available'); } /** @override */ mountCallback() { this.render_(); } /** @private */ render_() { if (!this.productAvailable_) { return; } this.fetch_().then((data) => { if (!data) { return; } this.data_ = data; this.animationClass_ = `painter-${data.animation_name}-animation`; this.iterationCount_ = data.animation_iteration_count === 'infinite' ? MAX_ITERATION_COUNT : data.animation_iteration_count; const animationDuration = 1; const animationDelay = data.animation_delay || 5; this.delay_ = (animationDuration + animationDelay) * 1000; this.handleButtonEffect_(); }); } /** * @param {JsonObject} data * @return {(null|Object)} * @private */ parseJson_(data) { try { return JSON.parse(data); } catch (e) { return null; } } /** * @return {Promise} * @private */ fetch_() { return this.xhr_.fetchJson(ADD_TO_CART_ANIMATION_SETTING).then((data) => { if (!data || !data.enabled) { return null; } return this.parseJson_(data.detail); }); } /** @private */ getAddToCartButton_() { this.addToCartButton_ = SPZCore.Dom.scopedQuerySelector( document.body, '[data-section-type="product"] [role="addToCart"], [data-section-type="product_detail"] [role="addToCart"], [data-section-type="product_detail"] [data-click="addToCart"], [data-section-type="product"] [data-click="addToCart"]' ); } /** @private */ restartAnimation_() { this.addToCartButton_.classList.remove(this.animationClass_); this.addToCartButton_./* OK */ offsetWidth; this.addToCartButton_.classList.add(this.animationClass_); this.animationExecutionCount_++; } /** @private */ clearTimer_() { this.win.clearInterval(this.timerId_); this.timerId_ = null; } /** @private */ setupTimer_() { this.timerId_ = this.win.setInterval(() => { this.restartAnimation_(); if (this.animationExecutionCount_ >= this.iterationCount_) { this.removeAnimationClass_(); this.clearTimer_(); } }, this.delay_); } /** @private */ restartTimer_() { if (this.animationExecutionCount_ >= this.iterationCount_) { this.removeAnimationClass_(); return; } this.setupTimer_(); } /** @private */ listenVariantChange_() { SPZUtils.Event.listen(self.document, 'dj.variantChange', (e) => { const selectedVariant = e.detail && e.detail.selected; if (!selectedVariant) { return; } const {available} = selectedVariant; if (this.selectedVariantAvailable_ !== available) { this.selectedVariantAvailable_ = available; this.clearTimer_(); if (available) { this.restartTimer_(); } } }); } /** @private */ removeAnimationClass_() { this.win.setTimeout(() => { this.addToCartButton_.classList.remove(this.animationClass_); }, 1000); } /** @private */ handleButtonEffect_() { this.getAddToCartButton_(); if (!this.addToCartButton_) { return; } if (this.selectedVariantAvailable_) { ++this.animationExecutionCount_; this.addToCartButton_.classList.add(this.animationClass_); if (this.iterationCount_ === 1) { this.removeAnimationClass_(); return; } this.setupTimer_(); } this.listenVariantChange_(); } } SPZ.defineElement(TAG, SpzCustomPainterButtonAnimation);