🎄📚✨Christmas Book Tree Suncatcher Ornament
🎄📚✨Christmas Book Tree Suncatcher Ornament
🎄📚✨Christmas Book Tree Suncatcher Ornament
🎄📚✨Christmas Book Tree Suncatcher Ornament
🎄📚✨Christmas Book Tree Suncatcher Ornament
🎄📚✨Christmas Book Tree Suncatcher Ornament
🎄📚✨Christmas Book Tree Suncatcher Ornament
🎄📚✨Christmas Book Tree Suncatcher Ornament
🎄📚✨Christmas Book Tree Suncatcher Ornament
🎄📚✨Christmas Book Tree Suncatcher Ornament
🎄📚✨Christmas Book Tree Suncatcher Ornament
🎄📚✨Christmas Book Tree Suncatcher Ornament
🎄📚✨Christmas Book Tree Suncatcher Ornament
🎄📚✨Christmas Book Tree Suncatcher Ornament
🎄📚✨Christmas Book Tree Suncatcher Ornament
🎄📚✨Christmas Book Tree Suncatcher Ornament
🎄📚✨Christmas Book Tree Suncatcher Ornament
🎄📚✨Christmas Book Tree Suncatcher Ornament
🎄📚✨Christmas Book Tree Suncatcher Ornament
🎄📚✨Christmas Book Tree Suncatcher Ornament
🎄📚✨Christmas Book Tree Suncatcher Ornament
🎄📚✨Christmas Book Tree Suncatcher Ornament
🎄📚✨Christmas Book Tree Suncatcher Ornament
🎄📚✨Christmas Book Tree Suncatcher Ornament
🎄📚✨Christmas Book Tree Suncatcher Ornament
🎄📚✨Christmas Book Tree Suncatcher Ornament
🎄📚✨Christmas Book Tree Suncatcher Ornament
🎄📚✨Christmas Book Tree Suncatcher Ornament

🎄📚✨Christmas Book Tree Suncatcher Ornament

Price

$33.99 $16.99
Save $17.00

style

Please select a style

size

Please select a size

Quantity

Worldwide shipping
Fast return
Sustainably made
Secure payments

🎅Celebrate the magic of Christmas and the joy of reading with this charming Christmas Book Tree Suncatcher Ornament!

💖This whimsical ornament, shaped like a stack of colorful books arranged in the form of a Christmas tree, brings warmth, creativity, and a love for reading into your home during the most magical time of year.

✨Hang it in a cozy reading nook, on the tree, or by a window where it can catch the winter light, creating beautiful reflections that’ll warm the heart. This suncatcher isn’t just a decoration—it’s a reminder to savor quiet moments, share stories, and embrace the spirit of giving.

🎁Looking for a thoughtful gift for the bookworm in your life? The Christmas Book Tree Suncatcher Ornament makes for a memorable and meaningful present. Whether it’s for a family member, friend, or colleague, this suncatcher is an elegant way to celebrate their love for reading while embracing the joy of Christmas. It’s an ideal gift for teachers, librarians, students, or anyone with a passion for books.

⭐Specification

  • Materials: Acrylic
  • Package Includes: 1*Christmas Book Tree Suncatcher Ornament
Customer Reviews
Here are what our customers say.
Write a Review
Customer Reviews
Wow you reached the bottom
Newest
Most liked
Highest ratings
Lowest ratings
×
class SpzCustomFileUpload extends SPZ.BaseElement { constructor(element) { super(element); this.uploadCount_ = 0; this.fileList_ = []; } buildCallback() { this.action = SPZServices.actionServiceForDoc(this.element); this.registerAction('upload', (data) => { this.handleFileUpload_(data.event?.detail?.data || []); }); this.registerAction('delete', (data) => { this.handleFileDelete_(data?.args?.data); }); this.registerAction('preview', (data) => { this.handleFilePreview_(data?.args?.data); }); this.registerAction('limit', (data) => { this.handleFileLimit_(); }); this.registerAction('sizeLimit', (data) => { this.handleFileSizeLimit_(); }); } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } setData_(count, file) { this.uploadCount_ = count; this.fileList_ = file; } handleFileUpload_(data) { data.forEach(i => { if(this.fileList_.some(j => j.url === i.url)) return; this.fileList_.push(i); }) this.uploadCount_++; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleFileUpload", { count: this.uploadCount_, files: this.fileList_}); if(this.fileList_.length >= 5){ document.querySelector('#review_upload').style.display = 'none'; } if(this.fileList_.length > 0){ document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '8px'; } } handleFileDelete_(index) { this.fileList_.splice(index, 1); this.uploadCount_--; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleFileDelete", { count: this.uploadCount_, files: this.fileList_}); document.querySelector('#review_upload').style.display = 'block'; if(this.fileList_?.length === 0){ document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '132px'; } } handleFilePreview_(index) { const finalPreviewData = this.fileList_[index]; const filePreviewModal = document.getElementById('filePreviewModal'); const fullScreenVideo = document.getElementById('fullScreenVideo'); const fullScreenImage = document.getElementById('fullScreenImage'); const previewModalClose = document.getElementById('previewModalClose'); const previewLoading = document.getElementById('previewLoading'); filePreviewModal.style.display = 'block'; previewLoading.style.display = 'flex'; if(finalPreviewData?.type === 'video'){ const media = this.mediaParse_(this.fileList_[index]?.url); fullScreenVideo.addEventListener('canplaythrough', function() { previewLoading.style.display = 'none'; }); fullScreenImage.src = ''; fullScreenImage.style.display = 'none'; fullScreenVideo.style.display = 'block'; fullScreenVideo.src = media.mp4 || ''; } else { fullScreenImage.onload = function() { previewLoading.style.display = 'none'; }; fullScreenVideo.src = ''; fullScreenVideo.style.display = 'none'; fullScreenImage.style.display = 'block'; fullScreenImage.src = finalPreviewData.url; } previewModalClose.addEventListener('click', function() { filePreviewModal.style.display = 'none'; }); } handleFileLimit_() { alert(window.AppReviewsLocale.comment_file_limit || 'please do not upload files more than 5'); this.triggerEvent_("handleFileLimit"); } handleFileSizeLimit_() { alert(window.AppReviewsLocale.comment_file_size_limit || 'File size does not exceed 10M'); } clear(){ this.fileList_ = []; this.uploadCount_ = 0; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleClear", { count: this.uploadCount_, files: this.fileList_}); document.querySelector('#review_upload').style.display = 'block'; } mediaParse_(url) { var result = {}; try { url.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (str, key, value) { try { result[key] = decodeURIComponent(value); } catch (e) { result[key] = value; } }); result.preview_image = url.split('?')[0]; } catch (e) {}; return result; } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, name, data); this.action.trigger(this.element, name, event); } } SPZ.defineElement('spz-custom-file-upload', SpzCustomFileUpload);
The review would not show in product details on storefront since it does not support to.