HIBESTGOODS
Log in
Create an account
0
Home
Sunglasses
Nail Beauty
Nail Gel Polish
Nail patches
Nail accessories
Nail equipment
More links
Home
Sunglasses
Nail Beauty
Nail Beauty
Nail Gel Polish
Nail patches
Nail accessories
Nail equipment
Log in
Wear a Hot Girl Nail Stickers Wear Nail Tip Short Detachable Nail Sticker Finished Product Nail Stickers Nail Tip
Price
$3.56
$3.56
Save
$0.00
Free shipping
color
Lf050 Milk Tea [Glue]]
Lf055 ECG [Glue]]
Lf057 Gradient Milk Tea [Glue]]
Lf059 Blue Sky and White Clouds [Glue]]
Lf060 French Leopard Print [Glue]]
Lf061 Milk Tea Three-Dimensional Butterfly [Glue]]
Lf062 Nude Three-Dimensional Butterfly [Glue]]
Lf063 Fairy Bow [Glue]]
Lf064 Gradient Love [[Glue] Glue]]
Lf065 Green Spring Color [Glue] [Glue]]
Lf066 Cute Small Flower [Glue] [Glue]]
Lf067 Pink Blush [Glue]]
Lf068 Temperament Blue Method [Glue Style]]
Lf069 Elegant Green Leaf [Glue]]
Lf070 Dark Plum Blooming Flower [Glue]]
Lf074 Flesh Color Bow [Glue]]
Lf075 Gray Metal [Glue]]
Lf080 Powder Transparent Gradient [Glue Type]]
Lf081 Meat Powder Small Edge [Glue Type]]
Lf082 Cows Pattern [Glue Type]]
Lf083 Temperament Pure Color [Glue Type]]
Lf089 Cute Strawberry [Glue]]
Lf092 Temperament Pure Color [Glue Type]]
Lf099 Polka Dotted Strawberry [Glue Type]]
Lf102 Wine Red Bow [Glue]]
Lf103 Milk Tea White Bow [Glue]]
Lf105 Aurora Bow [Glue]]
Lf107 Gradient Dark Plum Milk Tea [Glue]]
Lf112 Aurora Blue Method [Glue Type]]
Lf113 Aurora Solid Color Bow [Glue]]
Lf114 Aurora Solid Color Bow [Glue]]
Lf118 Lovely Pink Peach [Glue]]
Lf119 Wine Red Aurora [Glue]]
Lf120 Peach Pink Gradient [Glue]]
Lf121 Solid Color Bow [Glue]]
Lf131 Gradient Small Flower [Glue]]
Please select a color
size
Wear Armor
Please select a size
Quantity
Add to cart -
$3.56
Buy it now
Free worldwide shipping
Free returns
Sustainably made
Secure payments
Description
Back to Nail painting
Sign up and save
Entice customers to sign up for your mailing list with discounts or exclusive offers. Include an image for extra impact.
SUBSCRIBE
Thanks for subscribing
No Thanks
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);