Men's  Cotton Linen Casual Short Sleeve Shirt
Men's  Cotton Linen Casual Short Sleeve Shirt
Men's  Cotton Linen Casual Short Sleeve Shirt
Men's  Cotton Linen Casual Short Sleeve Shirt
Men's  Cotton Linen Casual Short Sleeve Shirt
Men's  Cotton Linen Casual Short Sleeve Shirt
Men's  Cotton Linen Casual Short Sleeve Shirt
Men's  Cotton Linen Casual Short Sleeve Shirt
Men's  Cotton Linen Casual Short Sleeve Shirt
Men's  Cotton Linen Casual Short Sleeve Shirt
Men's  Cotton Linen Casual Short Sleeve Shirt
Men's  Cotton Linen Casual Short Sleeve Shirt
1 / 12
Men's  Cotton Linen Casual Short Sleeve Shirt
Men's  Cotton Linen Casual Short Sleeve Shirt
Men's  Cotton Linen Casual Short Sleeve Shirt
Men's  Cotton Linen Casual Short Sleeve Shirt
Men's  Cotton Linen Casual Short Sleeve Shirt
Men's  Cotton Linen Casual Short Sleeve Shirt
Men's  Cotton Linen Casual Short Sleeve Shirt
Men's  Cotton Linen Casual Short Sleeve Shirt
Men's  Cotton Linen Casual Short Sleeve Shirt
Men's  Cotton Linen Casual Short Sleeve Shirt
Men's  Cotton Linen Casual Short Sleeve Shirt
Men's  Cotton Linen Casual Short Sleeve Shirt
mysite

Men's Cotton Linen Casual Short Sleeve Shirt

$28.99 $59.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!

   Applicable Scene: Daily

   Sleeve Length: Short

   Material: COTTON

   Applicable Season: Four Seasons

   Style: Casual

   Item Type: Tops

   Tops Type: shirt

   Sleeve Style: regular

   Hooded: No

   Fabric Type: Broadcloth

   Gender: MEN

   Color:Pink, blue, green, khaki, purple, red, yellow, white, gray,Sky Blue

   Size: S,M, L, XL, 2XL, 3XL, 4XL, 5XL

   Style: Sport,Fashion,Casual

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