Men's Casual Stand Collar Fleece Sports Baseball Jacket
Men's Casual Stand Collar Fleece Sports Baseball Jacket
Men's Casual Stand Collar Fleece Sports Baseball Jacket
Men's Casual Stand Collar Fleece Sports Baseball Jacket
Men's Casual Stand Collar Fleece Sports Baseball Jacket
Men's Casual Stand Collar Fleece Sports Baseball Jacket
Men's Casual Stand Collar Fleece Sports Baseball Jacket
Men's Casual Stand Collar Fleece Sports Baseball Jacket
Men's Casual Stand Collar Fleece Sports Baseball Jacket
Men's Casual Stand Collar Fleece Sports Baseball Jacket
Men's Casual Stand Collar Fleece Sports Baseball Jacket
Men's Casual Stand Collar Fleece Sports Baseball Jacket
Men's Casual Stand Collar Fleece Sports Baseball Jacket
Men's Casual Stand Collar Fleece Sports Baseball Jacket
Men's Casual Stand Collar Fleece Sports Baseball Jacket
Men's Casual Stand Collar Fleece Sports Baseball Jacket
Men's Casual Stand Collar Fleece Sports Baseball Jacket
Men's Casual Stand Collar Fleece Sports Baseball Jacket
Men's Casual Stand Collar Fleece Sports Baseball Jacket
Men's Casual Stand Collar Fleece Sports Baseball Jacket
Men's Casual Stand Collar Fleece Sports Baseball Jacket
Men's Casual Stand Collar Fleece Sports Baseball Jacket
Men's Casual Stand Collar Fleece Sports Baseball Jacket
Men's Casual Stand Collar Fleece Sports Baseball Jacket
Men's Casual Stand Collar Fleece Sports Baseball Jacket
Men's Casual Stand Collar Fleece Sports Baseball Jacket

Men's Casual Stand Collar Fleece Sports Baseball Jacket

Price

$0.00 $58.27
Save $-58.27
Free shipping

color

Please select a color

size

Please select a size

Quantity

Free worldwide shipping
Free returns
Sustainably made
Secure payments
/** * 优惠码组件模型类 * 处理优惠码的显示和交互逻辑 */ class SpzCustomDiscountCodeModel extends SPZ.BaseElement { constructor(element) { super(element); // 复制按钮和内容的类名 this.copyBtnClass = "discount_code_btn" this.copyClass = "discount_code_value" } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { // 初始化服务 this.action_ = SPZServices.actionServiceForDoc(this.element); this.templates_ = SPZServices.templatesForDoc(this.element); this.xhr_ = SPZServices.xhrFor(this.win); } /** * 渲染优惠码组件 * @param {Object} data - 渲染数据 */ doRender_(data) { return this.templates_ .findAndRenderTemplate(this.element, Object.assign(this.getDefaultData(), data) ) .then((el) => { this.clearDom(); this.element.appendChild(el); // 绑定复制代码功能 this.copyCode(el, data); }); } /** * 获取渲染模板 * @param {Object} data - 渲染数据 */ getRenderTemplate(data) { const renderData = Object.assign(this.getDefaultData(), data); return this.templates_ .findAndRenderTemplate(this.element, renderData) .then((el) => { this.clearDom(); return el; }); } /** * 清除DOM内容 */ clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } /** * 获取默认数据 * @returns {Object} 默认数据对象 */ getDefaultData() { return { isMobile: appDiscountUtils.judgeMobile(), isRTL: appDiscountUtils.judgeRTL(), image_domain: this.win.SHOPLAZZA.image_domain, copyBtnClass: this.copyBtnClass, copyClass: this.copyClass } } /** * 复制优惠码功能 * @param {Element} el - 当前元素 */ copyCode(el) { const copyBtnList = el.querySelectorAll(`.${this.copyBtnClass}`); if (copyBtnList.length > 0) { copyBtnList.forEach(item => { item.onclick = async () => { // 确保获取正确的元素和内容 const codeElement = item.querySelector(`.${this.copyClass}`); if (!codeElement) return; // 获取纯文本内容 const textToCopy = codeElement.innerText.trim(); // 尝试使用现代API,如果失败则使用备用方案 try { if (navigator.clipboard && navigator.clipboard.writeText) { await navigator.clipboard.writeText(textToCopy); } else { throw new Error('Clipboard API not available'); } // 显示复制成功提示 this.showCopySuccessToast(textToCopy, el); } catch (err) { console.error('Modern clipboard API failed, trying fallback...', err); // 使用备用复制方案 this.fallbackCopy(textToCopy, el); } const discountId = item.dataset["discountId"]; // 是否跳转落地页配置 const redirection = item.dataset["redirection"] === "true"; // 跳转到落地页 if (redirection && appDiscountUtils.inProductBody(this.element)) { this.win.open(`/promotions/discount-default/${discountId}`); } } }) } } /** * 使用 execCommand 的复制方案 * @param {string} codeText - 要复制的文本 * @param {Element} el - 当前元素 */ fallbackCopy(codeText, el) { const textarea = this.win.document.createElement('textarea'); textarea.value = codeText; // 设置样式使文本框不可见 textarea.style.position = 'fixed'; textarea.style.left = '-9999px'; textarea.style.top = '0'; // 添加 readonly 属性防止移动端虚拟键盘弹出 textarea.setAttribute('readonly', 'readonly'); this.win.document.body.appendChild(textarea); textarea.focus(); textarea.select(); try { this.win.document.execCommand('copy'); // 显示复制成功提示 this.showCopySuccessToast(codeText, el); } catch (err) { console.error('Copy failed:', err); } this.win.document.body.removeChild(textarea); } /** * 创建 Toast 元素 * @returns {Element} 创建的 Toast 元素 */ createToastEl_() { const toast = document.createElement('ljs-toast'); toast.setAttribute('layout', 'nodisplay'); toast.setAttribute('hidden', ''); toast.setAttribute('id', 'discount-code-toast'); toast.style.zIndex = '1051'; return toast; } /** * 挂载 Toast 元素到 body * @returns {Element} 挂载的 Toast 元素 */ mountToastToBody_() { const existingToast = this.win.document.getElementById('discount-code-toast'); if (existingToast) { return existingToast; } const toast = this.createToastEl_(); this.win.document.body.appendChild(toast); return toast; } /** * 复制成功的提醒 * @param {string} codeText - 要复制的文本 * @param {Element} el - 当前元素 */ showCopySuccessToast(codeText, el) { const $toast = this.mountToastToBody_(); SPZ.whenApiDefined($toast).then(toast => { toast.showToast("Discount code copied !"); this.codeCopyInSessionStorage(codeText); }); } /** * 复制优惠码成功后要存一份到本地存储中,购物车使用 * @param {string} codeText - 要复制的文本 */ codeCopyInSessionStorage(codeText) { try { sessionStorage.setItem('other-copied-coupon', codeText); } catch (error) { console.error(error) } } } // 注册自定义元素 SPZ.defineElement('spz-custom-discount-code-model', SpzCustomDiscountCodeModel);
/** * Custom discount code component that handles displaying and managing discount codes * @extends {SPZ.BaseElement} */ class SpzCustomDiscountCode extends SPZ.BaseElement { constructor(element) { super(element); // API endpoint for fetching discount codes this.getDiscountCodeApi = "\/api\/storefront\/promotion\/code\/list"; // Debounce timer for resize events this.timer = null; // Current variant ID this.variantId = "946c9944-1eb6-4043-89f8-8c5db1c08fa3"; // Store discount code data this.discountCodeData = {} } /** * Check if layout is supported * @param {string} layout - Layout type * @return {boolean} */ isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } /** * Initialize component after build */ buildCallback() { this.templates_ = SPZServices.templatesForDoc(); this.viewport_ = this.getViewport(); // Bind methods to maintain context this.render = this.render.bind(this); this.resize = this.resize.bind(this); this.switchVariant = this.switchVariant.bind(this); } /** * Setup component when mounted */ mountCallback() { this.getData(); // Add event listeners this.viewport_.onResize(this.resize); this.win.document.addEventListener('dj.variantChange', this.switchVariant); } /** * Cleanup when component is unmounted */ unmountCallback() { this.viewport_.removeResize(this.resize); this.win.document.removeEventListener('dj.variantChange', this.switchVariant); // 清除定时器 if (this.timer) { clearTimeout(this.timer); this.timer = null; } } /** * Handle resize events with debouncing */ resize() { if (this.timer) { clearTimeout(this.timer) this.timer = null; } this.timer = setTimeout(() => { if (appDiscountUtils.inProductBody(this.element)) { this.render(); } else { this.renderSkeleton(); } }, 200); } /** * Handle variant changes * @param {Event} event - Variant change event */ switchVariant(event) { const variant = event.detail.selected; if (variant.product_id == '2cba4b44-5a22-4bfc-9362-7329b1002dbd' && variant.id != this.variantId) { this.variantId = variant.id; this.getData(); } } /** * Fetch discount code data from API */ getData() { if (appDiscountUtils.inProductBody(this.element)) { const reqBody = { product_id: "2cba4b44-5a22-4bfc-9362-7329b1002dbd", variant_id: this.variantId, product_type: "default", } if (!reqBody.product_id || !reqBody.variant_id) return; this.discountCodeData = {}; this.win.fetch(this.getDiscountCodeApi, { method: "POST", body: JSON.stringify(reqBody), headers: { "Content-Type": "application/json" } }).then(async (response) => { if (response.ok) { let data = await response.json(); if (data.list && data.list.length > 0) { data.list[0].product_setting.template_config = JSON.parse(data.list[0].product_setting.template_config); // Format timestamps to local timezone const zone = this.win.SHOPLAZZA.shop.time_zone; data.list = data.list.map(item => { if(+item.ends_at !== -1) { item.ends_at = appDiscountUtils.convertTimestampToFormat(+item.ends_at, zone); } item.starts_at = appDiscountUtils.convertTimestampToFormat(+item.starts_at, zone); return item; }); } this.discountCodeData = data; this.render(); } else { this.clearDom(); } }).catch(err => { console.error("discount_code", err) this.clearDom(); }); } else { this.renderSkeleton(); } } /** * Clear component DOM except template */ clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } /** * Render discount codes with formatted dates */ render() { // Render using discount code model SPZ.whenApiDefined(document.querySelector('#spz_custom_discount_code_model')).then(renderApi => { renderApi.doRender_({ discountCodeData: this.discountCodeData }) }).catch(err => { this.clearDom(); }) } renderSkeleton() { // Render template for non-product pages this.templates_ .findAndRenderTemplate(this.element, { isMobile: appDiscountUtils.judgeMobile() }) .then((el) => { this.clearDom(); this.element.appendChild(el); }) .catch(err => { this.clearDom(); }); } } // Register custom element SPZ.defineElement('spz-custom-discount-code', SpzCustomDiscountCode);

Men's Casual Stand Collar Fleece Sports Baseball Jacket

Product Overview: The Men's Casual Stand Collar Fleece Sports Baseball Jacket combines sporty flair with cozy comfort, perfect for everyday wear. This jacket features a classic baseball silhouette with modern updates, crafted from soft fleece material to keep you warm and stylish. Ideal for casual outings, athletic activities, or layering in cooler weather, this jacket offers both functionality and fashion.

Key Features:

  1. Premium Fleece Fabric:

    • Made from high-quality fleece, known for its softness, warmth, and lightweight properties.
    • Provides excellent insulation while remaining breathable, ensuring comfort in various weather conditions.
    • The fabric is durable and resistant to wear and tear, maintaining its appearance and feel over time.
  2. Stand Collar Design:

    • Features a stand collar that adds a touch of sophistication while providing extra neck coverage and warmth.
    • The collar design enhances the jacket's sporty look and complements the baseball-inspired style.
    • Offers a comfortable fit around the neck, protecting against chilly winds.
  3. Classic Baseball Jacket Style:

    • Embraces the timeless baseball jacket silhouette, featuring a front button closure and ribbed cuffs and hem.
    • The design includes traditional details such as contrast piping and a sporty cut, adding to its classic appeal.
    • Perfect for achieving a casual, athletic look with a nod to vintage sportswear.
  4. Casual Fit:

    • Designed with a relaxed, casual fit that allows for ease of movement and layering.
    • Provides a comfortable, non-restrictive feel, making it suitable for various activities and outfits.
    • The fit is ideal for everyday wear, whether you're running errands, heading to the gym, or hanging out with friends.
  5. Functional Pockets:

    • Equipped with multiple pockets, including front welt pockets and an interior pocket, for practical storage solutions.
    • Pockets are designed to securely hold small essentials such as keys, phone, or wallet.
    • The design ensures that your items are easily accessible while keeping your hands warm.
  6. Stylish Color Options:

    • Available in a range of stylish colors that suit various personal tastes and outfit choices.
    • The color options are designed to complement the classic baseball jacket style and enhance its versatility.
    • Perfect for pairing with jeans, chinos, or athletic wear for a coordinated look.
  7. Versatile Styling:

    • Ideal for a wide range of casual occasions, from sports activities to relaxed outings.
    • Can be layered over t-shirts, hoodies, or sweatshirts for added warmth and style.
    • The jacket's versatile design allows it to be dressed up or down depending on the occasion.
  8. Durable Construction:

    • Features reinforced stitching and quality craftsmanship to ensure longevity and durability.
    • The fleece material is resistant to pilling and retains its softness and shape even after repeated use.
    • Easy to care for, with simple washing instructions to maintain its appearance and comfort.
  9. Comfort and Warmth:

    • The fleece fabric offers a cozy, insulated feel, making it perfect for cooler weather.
    • The stand collar adds an extra layer of warmth around the neck, enhancing overall comfort.
    • Designed to keep you warm and comfortable while maintaining a stylish, sporty look.
  10. Ideal for Layering:

    • The jacket’s fit and design make it an excellent layering piece for various weather conditions.
    • Can be worn over base layers for added warmth or as a standalone piece in milder weather.
    • Versatile enough to be integrated into different outfits, from casual to sporty looks.

Style Tips:

  • Sporty Casual: Pair with joggers and sneakers for a relaxed, athletic look.
  • Weekend Wear: Combine with jeans and a casual t-shirt for an effortless weekend outfit.
  • Layered Look: Wear over a hoodie and chinos for a stylish layered ensemble.

Why Choose This Jacket?

  • The Men's Casual Stand Collar Fleece Sports Baseball Jacket is the perfect blend of comfort, style, and functionality. With its high-quality fleece fabric, classic baseball design, and versatile fit, it’s an essential addition to any casual wardrobe. Whether you're hitting the field or just enjoying a day out, this jacket ensures you look great and stay warm.