window.onload = () => { _waEmbed(wa_btnSetting, wa_widgetSetting); }; Men's solid colored linen short sleeved lapel shirt
Men's solid colored linen short sleeved lapel shirt
Men's solid colored linen short sleeved lapel shirt
Men's solid colored linen short sleeved lapel shirt
Men's solid colored linen short sleeved lapel shirt
Men's solid colored linen short sleeved lapel shirt
Men's solid colored linen short sleeved lapel shirt
3 / 6
Men's solid colored linen short sleeved lapel shirt
Men's solid colored linen short sleeved lapel shirt
Men's solid colored linen short sleeved lapel shirt
Men's solid colored linen short sleeved lapel shirt
Men's solid colored linen short sleeved lapel shirt
Men's solid colored linen short sleeved lapel shirt
mysite

Men's solid colored linen short sleeved lapel shirt

$21.99 $53.99
0 sold
Color
Size
Qty 1000 in stock

Buy 2 Get Extra 10% OFF

Buy 4 Get Extra 15% OFF & FREE SHIPPING

Refresh Your Look And Stay In Fashion!

Fabric Name: Cotton Blend

Material Function: Breathable Machine Washable High Color Fastness

Style: Cardigan

Pattern: Loose Fitting

Collar Type: Lapel Collar

Sleeve Length: Short Sleeved

Applicable Scenarios: Daily

Suitable For The Season: Four Seasons

Workmanship: Pleating

Size Chat

Tag
Size
LengthChestWaist
cm | inchcm | inchcm | inch
M72.5cm | 28''104cm | 41''104cm | 41''
L75.0cm | 29''112cm | 44''112cm | 44''
XL78.0cm | 30''122cm | 48''122cm | 48''
2XL78.5cm | 31''132cm | 52''132cm | 52''
3XL78.5cm | 31''142cm | 56''142cm | 56''
4XL78.5cm | 31''152cm | 60''152cm | 60''
5XL78.5cm | 31''163cm | 64''163cm | 64''
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);