🎁Free Shipping on Orders Over $59🎉
Funny Gift Knitted Positive Potato Gift Box
Funny Gift Knitted Positive Potato Gift Box
Funny Gift Knitted Positive Potato Gift Box
Funny Gift Knitted Positive Potato Gift Box
Funny Gift Knitted Positive Potato Gift Box
Funny Gift Knitted Positive Potato Gift Box
2 / 6
Funny Gift Knitted Positive Potato Gift Box
Funny Gift Knitted Positive Potato Gift Box
Funny Gift Knitted Positive Potato Gift Box
Funny Gift Knitted Positive Potato Gift Box
Funny Gift Knitted Positive Potato Gift Box
Funny Gift Knitted Positive Potato Gift Box
50% OFF
Fnkus

Funny Gift Knitted Positive Potato Gift Box

$9.99 $19.99
0 sold
Style
Pack
Qty 1000 in stock

Crochet Positive Potato, Be Proud Of The Work You Do,Thank You Gift,Handmade Cute Crochet Potato,Leaving Gift,Christmas

搞笑礼物针织正土豆礼盒

【Handmade Crafts】

  • This doll is handmade from 100% cotton yarn using plush and black embroidery floss for skin-friendly comfort. We can guarantee the super high quality of the potatoes.
  • This beautiful heart shaped keepsake decoration is the perfect gift to be treasured forever!

搞笑礼物针织正土豆礼盒

【Lovely gift】

  • Cute little potatoes can be used as book bag hangers, pendants and table decorations. You can adopt this potato doll for Christmas, Thanksgiving and New Year's Day or give it to friends, classmates and girlfriends.
  • Cute little potato shape, we hope the words on the card in the hands of the cute little potato will make you happy all day long! If you want to give it as a gift to your friends or family, we truly hope it will bring them good mood!

【A variety of matches to choose from】

  1. Fine ceramic memorial heart, can be personalized as needed. Optional gift box available.
  2. Funny knitted potato
  3. Both (as shown in the picture with a beautiful gift box).

Size:

  • Ceramic Heart: 8 x 7.5cm/3.15inch x 2.95inch
  • Potato: about 7 x 6cm / 2.7 x 2.4inch

 可爱毛线正土豆娃娃个性陶瓷形象5

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