🎁Free Shipping on Orders Over $59🎉
Wooden Picture Frames Collage Wall Decor
Wooden Picture Frames Collage Wall Decor
Wooden Picture Frames Collage Wall Decor
Wooden Picture Frames Collage Wall Decor
Wooden Picture Frames Collage Wall Decor
Wooden Picture Frames Collage Wall Decor
Wooden Picture Frames Collage Wall Decor
Wooden Picture Frames Collage Wall Decor
1 / 8
Wooden Picture Frames Collage Wall Decor
Wooden Picture Frames Collage Wall Decor
Wooden Picture Frames Collage Wall Decor
Wooden Picture Frames Collage Wall Decor
Wooden Picture Frames Collage Wall Decor
Wooden Picture Frames Collage Wall Decor
Wooden Picture Frames Collage Wall Decor
Wooden Picture Frames Collage Wall Decor
41% OFF
Fnkus

Wooden Picture Frames Collage Wall Decor

$19.99 $33.99
0 sold
QTY
Qty 1000 in stock

🎄If you want to dressed wall right up & make it a favorite spot, bring on the festive farmhouse-inspired picture frames to impressed your families, friends.🎄

Features

🐬Perfect Way to Display Multiple Photos

Simple design collage photo frames with 30 clips, 5 hemp rope, 3 magnets, and 1 blackboard, you can cut the length of hemp rope as you want, which satisfies simple DIY design. What's more, it's easy to change the picture or cards with the 30 clips.

🐬Functional Picture Organize Display Frames

This wall decor picture frames collage combined with a magnetic blackboard, and you can write some information on the blackboard, such as the theme of the picture that you want to show, or other messages.

🐬Awesome Collage Picture Frames for Decoration

Suitable for different-sized pictures, postcards, and paintings, it will be a good way to show your wonderful memories of graduation, wedding, travel, and so on.

It could be a great decoration for your home, office, dorm room, cafe, and other places.

🐬A Good Gift Idea

Fantastic picture collage frames will be a good choice for your family and friends as a gift. Very suitable for many kinds of parties, such as graduation, birthday party to hang and display pictures of your lovely memories.

Specifications

  • Material: Rope, wood
  • Color: Black
  • Style: modern and simple
  • Size:

Package Include

  • Wooden Picture Frames Collage Wall Decor*1
  • Magnet*3 PCS
  • Clip*30
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);