window.onload = () => { _waEmbed(wa_btnSetting, wa_widgetSetting); }; Men's Thickened Towel Bottom, Terry Socks, Elite Socks, High Top Running, Outdoor Socks, Sports Socks
Men's Thickened Towel Bottom, Terry Socks, Elite Socks, High Top Running, Outdoor Socks, Sports Socks
Men's Thickened Towel Bottom, Terry Socks, Elite Socks, High Top Running, Outdoor Socks, Sports Socks
Men's Thickened Towel Bottom, Terry Socks, Elite Socks, High Top Running, Outdoor Socks, Sports Socks
Men's Thickened Towel Bottom, Terry Socks, Elite Socks, High Top Running, Outdoor Socks, Sports Socks
Men's Thickened Towel Bottom, Terry Socks, Elite Socks, High Top Running, Outdoor Socks, Sports Socks
Men's Thickened Towel Bottom, Terry Socks, Elite Socks, High Top Running, Outdoor Socks, Sports Socks
Men's Thickened Towel Bottom, Terry Socks, Elite Socks, High Top Running, Outdoor Socks, Sports Socks
Men's Thickened Towel Bottom, Terry Socks, Elite Socks, High Top Running, Outdoor Socks, Sports Socks
4 / 8
Men's Thickened Towel Bottom, Terry Socks, Elite Socks, High Top Running, Outdoor Socks, Sports Socks
Men's Thickened Towel Bottom, Terry Socks, Elite Socks, High Top Running, Outdoor Socks, Sports Socks
Men's Thickened Towel Bottom, Terry Socks, Elite Socks, High Top Running, Outdoor Socks, Sports Socks
Men's Thickened Towel Bottom, Terry Socks, Elite Socks, High Top Running, Outdoor Socks, Sports Socks
Men's Thickened Towel Bottom, Terry Socks, Elite Socks, High Top Running, Outdoor Socks, Sports Socks
Men's Thickened Towel Bottom, Terry Socks, Elite Socks, High Top Running, Outdoor Socks, Sports Socks
Men's Thickened Towel Bottom, Terry Socks, Elite Socks, High Top Running, Outdoor Socks, Sports Socks
Men's Thickened Towel Bottom, Terry Socks, Elite Socks, High Top Running, Outdoor Socks, Sports Socks
mysite

Men's Thickened Towel Bottom, Terry Socks, Elite Socks, High Top Running, Outdoor Socks, Sports Socks

$7.99 $25.99
0 sold
Color
Size
Qty 1000 in stock



You May Also Like Don't Like These?
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);