Bright Colorful Bird Hanging Planter Yard Decor
Bright Colorful Bird Hanging Planter Yard Decor
Bright Colorful Bird Hanging Planter Yard Decor
Bright Colorful Bird Hanging Planter Yard Decor
Bright Colorful Bird Hanging Planter Yard Decor
Bright Colorful Bird Hanging Planter Yard Decor
Bright Colorful Bird Hanging Planter Yard Decor
Bright Colorful Bird Hanging Planter Yard Decor
Bright Colorful Bird Hanging Planter Yard Decor
Bright Colorful Bird Hanging Planter Yard Decor
Bright Colorful Bird Hanging Planter Yard Decor
Bright Colorful Bird Hanging Planter Yard Decor
1 / 12
Bright Colorful Bird Hanging Planter Yard Decor
Bright Colorful Bird Hanging Planter Yard Decor
Bright Colorful Bird Hanging Planter Yard Decor
Bright Colorful Bird Hanging Planter Yard Decor
Bright Colorful Bird Hanging Planter Yard Decor
Bright Colorful Bird Hanging Planter Yard Decor
Bright Colorful Bird Hanging Planter Yard Decor
Bright Colorful Bird Hanging Planter Yard Decor
Bright Colorful Bird Hanging Planter Yard Decor
Bright Colorful Bird Hanging Planter Yard Decor
Bright Colorful Bird Hanging Planter Yard Decor
Bright Colorful Bird Hanging Planter Yard Decor
40% OFF

Bright Colorful Bird Hanging Planter Yard Decor

$26.99 $45.21
0 sold
Style
Size
Qty 1000 in stock
/** @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);

    Decorate your patio with these bright planters. Make your yard unique and ready for  summer!

    Fancy "Flo" the Flamingo - The bright pink Flamingo was asked for by many customers the last year and has finally made its debut on the market. Fancy Flo is made with recyclable plastic with UV protection. Flo will be shipped with (1) beak, (1) body, (6) pink tail feathers, and (1) shiny zinc colored outdoor chain.

    Gabby - Natural colored Green Parrot that has always been a customer favorite. :) Gabby is a natural colored green parrot with a bright red beak and six multi-colored tails. A one of a kind, unique hanging planter that brings vibrant colors and fun to any venue. Recyclable plastic with custom ordered UV protection to ensure lasting brightness to all the colors.

    Tango the Teal Parrot - Tango is an awesome looking Teal body parrot with a royal blue beak and six multi-colored tails. The bright teal body and cobalt blue beak look awesome together. Multi-colored tails gives it that extra 'pop'.

    Purple Parrot Patty - An awesome and fun parrot. Its very deep purple body and yellow beak are happy and fun.

    Rudy The Rooster - This awesome looking rooster was asked for by multiple customers. So here we have it. Bright and lots of fun. :)

    Riley the Red Rooster - Bright red body/yellow crown makes a statement. Brings plenty of smiles and questions- "Where did you get that?"

    Betty the Blue Rooster - Betty is a beautiful, bright cobalt blue Rooster with a deep red crown and yellow beak. Definitely eye catching!

    • Recyclable plastic with UV protection.
    • Each planter will be shipped with (1) beak, (1) body, (6) Multi-colored tail feathers, and (1) zinc colored adjustable outdoor chain. Each planter will come packaged in a colorful netting.
    • All planters have 3 pre-drilled holes for drainage and hold up to 1 gallon of soil.
    • Dimensions: 24x9x7 (LxWxH)
    • All of our planters, I'm proud to say: Made in USA.

    You may also like Don't Like These?
    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);