Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
5 / 16
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat
mysite

Breathable Duck Tongue Mesh Sports Quick Drying Hat, Sports Quick Drying Hat

$14.99 $39.99
0 sold
Color
Size
Qty 1000 in stock

Product Category: Peaked Cap

Hat Brim Style: Large Eaves

Function: Ventilation

Style: Original Design

Treatment Process: Machine Embroidery

Classification Of Popular Elements: Ethnic/National Style

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);