🎁Free Shipping on Orders Over $59🎉
Pre-Sale Golf Training Mat for Swing Detection Batting
Pre-Sale Golf Training Mat for Swing Detection Batting
Pre-Sale Golf Training Mat for Swing Detection Batting
Pre-Sale Golf Training Mat for Swing Detection Batting
Pre-Sale Golf Training Mat for Swing Detection Batting
Pre-Sale Golf Training Mat for Swing Detection Batting
Pre-Sale Golf Training Mat for Swing Detection Batting
Pre-Sale Golf Training Mat for Swing Detection Batting
Pre-Sale Golf Training Mat for Swing Detection Batting
Pre-Sale Golf Training Mat for Swing Detection Batting
Pre-Sale Golf Training Mat for Swing Detection Batting
1 / 11
Pre-Sale Golf Training Mat for Swing Detection Batting
Pre-Sale Golf Training Mat for Swing Detection Batting
Pre-Sale Golf Training Mat for Swing Detection Batting
Pre-Sale Golf Training Mat for Swing Detection Batting
Pre-Sale Golf Training Mat for Swing Detection Batting
Pre-Sale Golf Training Mat for Swing Detection Batting
Pre-Sale Golf Training Mat for Swing Detection Batting
Pre-Sale Golf Training Mat for Swing Detection Batting
Pre-Sale Golf Training Mat for Swing Detection Batting
Pre-Sale Golf Training Mat for Swing Detection Batting
Pre-Sale Golf Training Mat for Swing Detection Batting
60% OFF
Fnkus

Pre-Sale Golf Training Mat for Swing Detection Batting

$23.95 $59.99
0 sold
Qty 992 in stock

  •  MASTER YOUR SWING PATH: Improve your golf swing by mastering your divot.A divot tells you everything about your swing. Seeing an instant representation of your divot, helps you build muscle memory for that perfect swing.

  • SAVE TIME & MONEY TO PRACTICE: Setup the DivotDaddy indoors or outdoors in seconds. Save your lawn from unwanted divots. Get more out of your range session with detailed divot data.

FEATURES

  • Durability - thin yet sturdy sole prevents rips against the hardest swings. Also, we put extra effort into the sequins so they will never fly off.
  • Versatility - Use it anywhere, no velcro needed and a stake for outdoor usage is provided. It also comes with a clip for your golf bag.
  • Precision - Clearer divot than grass. Your divot is more precise and clear than anywhere else. This means greater improvements on your swing.
  • Higher limits - Don't just swing like you're practicing, swing like you mean it. The PRO can withstand your hardest swing, if not, we'll give you your money back.

SPECIFICATIONS

  • Weight: 500g
  • Color: Green
  • Size: 

    PACKAGE

    • 1 * Golf Training Mat for Swing Detection Batting
    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);