Personalized Song Shadow Box with Photo

$35.99
$70.99
Save $35.00

Produced in the US,the UK,and AU

Fast turnaround

Color Of Frame : Black
Global delivery
Free Shipping Over $49!
Sustainably made
Quantity
/** @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);
Description
    • The Most Meaningful Valentine's Day Gift

      🎁 Selling Out Soon!

       🌹Introduction about this product

      Introducing our Custom Music Flowers Frame with Anniversary, the perfect gift for any music and flower lover! This beautiful frame features a stunning bouquet of handcrafted paper flowers, arranged in a delicate and intricate design, which is sure to catch the eye and warm the heart.

      🌺 Handcrafted paper flowers, scan for music

      But that's not all - the real magic of this frame lies in its ability that you can scan the code to listen to your favorite song anytime, anywhere..Simply choose a meaningful tune that reminds you and your loved one of your most cherished memories.

      💖Personalized message area included

      And to make this gift even more special, we've included a customizable message area where you can add a personalized note for your loved one, making it the perfect gift for anniversaries, birthdays, or any other special occasion.

      💐High-quality materials, long-lasting keepsake

      Our Custom Music Flowers Frame with Anniversary is made with the highest quality materials, ensuring that it will be a cherished keepsake for years to come. It's the perfect way to show your love and appreciation to someone special, and a unique and thoughtful gift that they're sure to treasure forever. Order yours today and make someone's day extra special!

      How to Custom

      1. Upload any photo to start customizing your Custom Music Plaque Night Light

      2. Add any song name, phrase, or text.

      3. Add any artist name, phrase, or text.

      4. Optional: Add a song and the artist name so that we can add the song code. You can also enter a specific song link if you prefer.

      5. Add a text of your want.

      6. Select the anniversary.

      Note❗❗❗

      We may need to adjust the layout of the photo slightly to make it fit. Each order is handmade by us and takes between 2-5 working days to complete.

      Our Guarantee:

      We truly believe that we offer some of the most innovative and inspirational products in the world, and we want to make sure we back it up with a risk-free ironclad 90-day guarantee.

      If you don't have a positive experience for ANY reason, contact us and we will make sure that ALL your concerns are addressed and you leave 100% satisfied and smiling

      We have 24/7 Ticket and Email Support. Please contact us via e-mail or our contact form if you need assistance we're here for you.

      Our service mailbox: service@Buyhimgift.com

Shipping & Return

How It Works

1 - Production (2 to 5 days): After we receive your order, we shift into production mode. During busy seasons, the process typically takes 1-2 days longer. Please understand.

2 - Shipping (7-14 Days or Faster): Want to get your item faster? Select the 'Expedited VIP' option after adding your product to the cart for the fastest shipping method we can provide. There are also different shipping options available at checkout.

Delivery

Please note that it is the customer's responsibility to provide us with a correct and complete shipping address. If your shipping address is different from your billing address, please specify this during checkout.

After we begin to deliver your order, we will send you a Shipping Notification email, including the information of your Order ID and Tracking Shipping Number. You can check the status of your order online by logging into the Track My Order page with your Order ID and email.

Please Note: If you do not receive our order notification email, please check your spam box, or please contact us to provide the email address you used to place your order. If you have any other questions regarding shipping, please contact our Customer Service Representatives.

  • The above time frame is only applicable for orders to the US with standard shipping methods.

  • International orders: It may take 2-5 days longer due to the customs clearance process.

*Due to unpredictable postal service delays, specified delivery dates are not guaranteed.

  • For more information about Shipping and Delivery, visit here.

  • Learn more about Returns and Refunds here.

Satisfaction Guarantee

We want you to be satisfied with the products you buy from us. 

We have 24/7/365 ticket and email support. Please contact us at service@forlovergift.com if you need any assistance.

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.