FlappyChase Interactive Cat Toy
FlappyChase Interactive Cat Toy
FlappyChase Interactive Cat Toy
FlappyChase Interactive Cat Toy
FlappyChase Interactive Cat Toy
FlappyChase Interactive Cat Toy
FlappyChase Interactive Cat Toy
FlappyChase Interactive Cat Toy
FlappyChase Interactive Cat Toy
1/9
FlappyChase Interactive Cat Toy
FlappyChase Interactive Cat Toy
FlappyChase Interactive Cat Toy
FlappyChase Interactive Cat Toy
FlappyChase Interactive Cat Toy
FlappyChase Interactive Cat Toy
FlappyChase Interactive Cat Toy
FlappyChase Interactive Cat Toy
FlappyChase Interactive Cat Toy
1/9

FlappyChase Interactive Cat Toy

$23.99
$49.99
Save $26.00
Model
Please select a model
Quantity
/** @private {string} */ class SpzCustomAnchorScroll extends SPZ.BaseElement { static deferredMount() { return false; } constructor(element) { super(element); /** @private {Element} */ this.scrollableContainer_ = null; } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { this.viewport_ = this.getViewport(); this.initActions_(); } setTarget(containerId, targetId) { this.containerId = '#' + containerId; this.targetId = '#' + targetId; } scrollToTarget() { const container = document.querySelector(this.containerId); const target = container.querySelector(this.targetId); const {scrollTop} = container; const eleOffsetTop = this.getOffsetTop_(target, container); this.viewport_ .interpolateScrollIntoView_( container, scrollTop, scrollTop + eleOffsetTop ); } initActions_() { this.registerAction( 'scrollToTarget', (invocation) => this.scrollToTarget(invocation?.caller) ); this.registerAction( 'setTarget', (invocation) => this.setTarget(invocation?.args?.containerId, invocation?.args?.targetId) ); } /** * @param {Element} element * @param {Element} container * @return {number} * @private */ getOffsetTop_(element, container) { if (!element./*OK*/ getClientRects().length) { return 0; } const rect = element./*OK*/ getBoundingClientRect(); if (rect.width || rect.height) { return rect.top - container./*OK*/ getBoundingClientRect().top; } return rect.top; } } SPZ.defineElement('spz-custom-anchor-scroll', SpzCustomAnchorScroll); const STRENGTHEN_TRUST_URL = "/api/strengthen_trust/settings"; class SpzCustomStrengthenTrust extends SPZ.BaseElement { constructor(element) { super(element); this.renderElement_ = null; } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { this.xhr_ = SPZServices.xhrFor(this.win); const renderId = this.element.getAttribute('render-id'); SPZCore.Dom.waitForChild( document.body, () => !!document.getElementById(renderId), () => { this.renderElement_ = SPZCore.Dom.scopedQuerySelector( document.body, `#${renderId}` ); if (this.renderElement_) { this.render_(); } this.registerAction('track', (invocation) => { this.track_(invocation.args); }); } ); } render_() { this.fetchData_().then((data) => { if (!data) { return; } SPZ.whenApiDefined(this.renderElement_).then((apis) => { apis?.render(data); document.querySelector('#strengthen-trust-render-1539149753700').addEventListener('click',(event)=>{ if(event.target.nodeName == 'A'){ this.track_({type: 'trust_content_click'}); } }) }); }); } track_(data = {}) { const track = window.sa && window.sa.track; if (!track) { return; } track('trust_enhancement_event', data); } parseJSON_(string) { let result = {}; try { result = JSON.parse(string); } catch (e) {} return result; } fetchData_() { return this.xhr_ .fetchJson(STRENGTHEN_TRUST_URL) .then((responseData) => { if (!responseData || !responseData.data) { return null; } const data = responseData.data; const moduleSettings = (data.module_settings || []).reduce((result, moduleSetting) => { return result.concat(Object.assign(moduleSetting, { logos: (moduleSetting.logos || []).map((item) => { return moduleSetting.logos_type == 'custom' ? this.parseJSON_(item) : item; }) })); }, []); return Object.assign(data, { module_settings: moduleSettings, isEditor: window.self !== window.top, }); }); } } SPZ.defineElement('spz-custom-strengthen-trust', SpzCustomStrengthenTrust);
SKU:
Weight: 0kg
Barcode:

🐾Captivate Your Cat For Hours!

With an incredible lifelike design, FlappyChase flaps its wings and emits vivid chirping sounds, instantly grabbing your cat's attention. It’s irresistible fun your feline will thank you for!

⚡️Energy-Saving & Long-Lasting

FlappyChase activates upon contact and stops when playtime ends, keeping your cat motivated and stimulated for long periods of time. No more bored stares!😸

🪶Premium Materials and Sturdy Design!

Made with natural cotton and soft plush, FlappyChase is safe, durable, and built to withstand your cat’s bites and scratches. Guaranteed to become their new favourite companion!

🔋Rechargeable and Easy to Clean!

The FlappyChase charges in under an hour via USB and provides up to 200 movement cycles. With a removable motor, it’s simple to clean, practical, and built with longevity in mind!