🎁Free Shipping on Orders Over $59🎉
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
1 / 24
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
Portable Mini Fan
20% OFF
Fnkus

Portable Mini Fan

$39.95 $49.99
0 sold
Color
Qty 999 in stock

💨💨

Portable Mini Fan

FEATURES

  • Small and Foldable - This portable small personal fan is foldable design, adjustable 180-degree folding on the table. After folding it, you can easily put it in your pocket, backpack, etc. Can be used as a handheld fan, mini desk fan or pocket fan. Perfect for use in the home, bedroom, office, school, desktop, camping or travel.
  • Hand-Free Design - This neck fan with a removable and adjustable lanyard. You can hang it around your neck, and free your hands when shopping, hiking, playing on the beach, traveling, etc.
  • Power Bank Function - 3000mAh rechargeable battery-operated fan, Type-c output port. It's not just a mini hand fan, but a convenient power Bank, that can charge phones in an emergency.
  • Phone Holder - The hidden mobile phone holder function is very practical. You can enjoy the coolness while doing your own things when you are at work, meeting, or watching dramas at home.
  • Strong Wind and Low Noise - This portable cute fan with large capacity batteries provides more than 10 working hours (depending on different speeds). It can adjust 4 wind speeds at will to meet any needs of you, just press the power button to change the wind speed setting. The wind changes from strong to weak.
  • New Upgrade - Added digital display function, which can display accurate power and gear position. The buttons and frame are made of electroplating, which is of better quality.

SPECIFICATIONS

  • Material: ABS
  • Weight: 190g
  • Package Size: 15*9.5**5cm

PACKAGE INCLUDED 

  • 1 × Portable Mini Fan
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);