🎁Free Shipping on Orders Over $59🎉
Gopher Outdoor Ultrasonic Repeller - Solar Powered
Gopher Outdoor Ultrasonic Repeller - Solar Powered
Gopher Outdoor Ultrasonic Repeller - Solar Powered
Gopher Outdoor Ultrasonic Repeller - Solar Powered
Gopher Outdoor Ultrasonic Repeller - Solar Powered
Gopher Outdoor Ultrasonic Repeller - Solar Powered
Gopher Outdoor Ultrasonic Repeller - Solar Powered
Gopher Outdoor Ultrasonic Repeller - Solar Powered
Gopher Outdoor Ultrasonic Repeller - Solar Powered
Gopher Outdoor Ultrasonic Repeller - Solar Powered
Gopher Outdoor Ultrasonic Repeller - Solar Powered
Gopher Outdoor Ultrasonic Repeller - Solar Powered
Gopher Outdoor Ultrasonic Repeller - Solar Powered
Gopher Outdoor Ultrasonic Repeller - Solar Powered
1 / 14
Gopher Outdoor Ultrasonic Repeller - Solar Powered
Gopher Outdoor Ultrasonic Repeller - Solar Powered
Gopher Outdoor Ultrasonic Repeller - Solar Powered
Gopher Outdoor Ultrasonic Repeller - Solar Powered
Gopher Outdoor Ultrasonic Repeller - Solar Powered
Gopher Outdoor Ultrasonic Repeller - Solar Powered
Gopher Outdoor Ultrasonic Repeller - Solar Powered
Gopher Outdoor Ultrasonic Repeller - Solar Powered
Gopher Outdoor Ultrasonic Repeller - Solar Powered
Gopher Outdoor Ultrasonic Repeller - Solar Powered
Gopher Outdoor Ultrasonic Repeller - Solar Powered
Gopher Outdoor Ultrasonic Repeller - Solar Powered
Gopher Outdoor Ultrasonic Repeller - Solar Powered
Gopher Outdoor Ultrasonic Repeller - Solar Powered
40% OFF
Fnkus

Gopher Outdoor Ultrasonic Repeller - Solar Powered

$29.99 $49.99
0 sold
Type
Qty 996 in stock

  • SAY GOODBYE TO UNWELCOMED GOPHERS! With the help of Pest Destruct - Ultrasonic Gopher Pest Repeller you can get rid of gophers within 72 hours. Coverage Area: 30 feet to 2425 square feet.
  • ENVIRONMENTAL FRIENDLY AND EASY TO USE: Naturally drives gophers and other animals out without killing them. Made of anti-UV and waterproof material, suitable for all weather conditions. SOLAR energy technology, charge itself under sun, wireless and rechargeable. Don't worry about getting new batteries anymore! Repeller features FLASHING light to scare the animals. 
  • CHEMICAL FREE! Protect your home from unwanted gophers without the use of dangerous and messy chemicals, pesticides, sprays, or traps that can harm you, and your family. No Dead animals!
  • NEW EFFECTIVE TECHNOLOGY! The Pest Destruct - Ultrasonic Gopher Repeller uses improved electromagnetic technology to protect you from unwanted animals and pests. It emits a range of powerful, deep-penetrating ultrasonic sounds to scare away a wide variety of pests and animals. Equipped with an infrared motion sensor, the repeller is activated as soon as an animal is detected
  • QUALITY GUARANTEE! Our goal is your 100% satisfaction. This is why we provide a quality guarantee on the Pest Destruct - Ultrasonic Gopher and Pest Repeller. Contact us if you’re unhappy with your purchase. We’ll be glad to help.
  • Product Size: 5.6" x 5" x 3.75"
    Spike: 12.6"
    Package Size: 6.06" x 5.70" x 3.95"
    Weight: 0.68 Lbs.

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