Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (2024)

\r\n

Ends in<\/span><\/div>\r\n

00<\/div>\r\n

d:<\/span><\/div>\r\n

00<\/div>\r\n

h:<\/span><\/div>\r\n

00<\/div>\r\n

m:<\/span><\/div>\r\n

00<\/div>\r\n

s<\/span><\/div>\r\n<\/div>\r\n

<\/div>\r\n<\/div>\r\n<\/div>","reachable_head_content":"","reachable_head_content_mobile":"","reachable_ship_days":10,"coupon_head_content":"","coupon_head_content_mobile":"","is_hot":1,"is_new":1,"title_head":"","tag_data":{"suffix_image":"","id":15},"coupon_data":{"id":0,"is_detail_show":0,"prompt":"","deduct":0,"deduct_after":"12.00"},"total_review":0}; if(search&&Array.isArray(product)&&product.length>0){ $('.vi-hd .search-user-div .search-input').val(search) } let useHotFlag=false; let searchKeyList; const searchKeyStr= $('.search-content .search-input').data('searchword'); if(searchKeyStr){ searchKeyList=decodeURIComponent(searchKeyStr).split('___'); } const productId=Number(window.product_id)||0; const inputPlaceHolder= $('.vi-hd .search-user-div .search-input').attr('placeholder'); const preStoageKeywordObejct=JSON.parse( sessionStorage.getItem('search-keyword')) ||{}; const preStoageKeyword= preStoageKeywordObejct[productId]||'' if( Array.isArray(searchKeyList)&&searchKeyList.length>0&&!searchKeyList.includes(preStoageKeyword)){ const randomNumber = Math.floor(Math.random() * searchKeyList.length); $('.vi-hd .search-user-div .search-input').attr('placeholder',searchKeyList[randomNumber]) sessionStorage.setItem('search-keyword',JSON.stringify({...preStoageKeywordObejct,[productId]:searchKeyList[randomNumber]})); useHotFlag=true; } if( Array.isArray(searchKeyList)&&searchKeyList.length>0&&searchKeyList.includes(preStoageKeyword)){ $('.vi-hd .search-user-div .search-input').attr('placeholder',preStoageKeyword); useHotFlag=true; } if( Array.isArray(searchKeyList)&&searchKeyList.length==0){ sessionStorage.setItem('search-keyword',JSON.stringify({...preStoageKeywordObejct,[productId]:''})); } if(useHotFlag){ $('.vi-hd .search-user-div .search-input').attr('data-usehot',true); }else{ if(!inputPlaceHolder){ $('.vi-hd .search-user-div .search-input').attr('placeholder',"Search for anything...") } } if(productId){ setProductSearchIcon('reset'); $('.vi-hd .search-user-div .search-content .search-input').hover(function(){ if(productId){ setProductSearchIcon('set') } },function(){ if(productId){ setProductSearchIcon('reset') } }) } if(if_search_suggest) { $(document).on('input',".search-user-div .search-input",getSuggestive) // _$(".vi-hds .search-input")[0].addEventListener('input', getSuggestive); } $('.vi-hd .search-user-div .confirm').hover(function(){ $('.vi-hd .search-user-div .search-content .search-input').css('border','1px solid #333') if(productId){ setProductSearchIcon('set') } },function(){ $('.vi-hd .search-user-div .search-content .search-input').css('border',''); if(productId){ setProductSearchIcon('reset') } }) searchBoxEvent(); } function setProductSearchIcon(handle='set'){ const productId=Number(window.product_id)||0; if(handle==='set'){ $('.vi-hd .search-user-div .search-content .confirm').css('background','#333') $('.vi-hd .search-user-div .search-content .confirm').css('color','#fff') $('.vi-hd .search-user-div .search-content .confirm').css('border','1px solid #333') $('.vi-hd .search-user-div .search-content .confirm').css('border-left','unset') } if(handle==='reset'&&productId&&!isKeepSearchHover){ $('.vi-hd .search-user-div .search-content .confirm').css('background','#fff') $('.vi-hd .search-user-div .search-content .confirm').css('color','#333') $('.vi-hd .search-user-div .search-content .confirm').css('border','1px solid #d5d5d5') $('.vi-hd .search-user-div .search-content .confirm').css('border-left','unset') } } _$('.vi-hd').on('mouseover','.head-user .iconfont',function(){ $(this).addClass(act); }); _$('.vi-hd').on('mouseout','.head-user .iconfont',function(){ $(this).removeClass(act); }); var poolRunSwiper = function (cls) { setTimeout(function(){ if (_$.isFunction(_$.funcPool['runSwiper']||'')) { var container = _$(cls+' .swiper-container'); if (container.length>0) { _$.funcPool['runSwiper'](_$(cls+' .swiper-container')); } } else { poolRunSwiper(cls); } },200); } setTimeout(getNotice,1) function getNotice(){ _$.ajaxHtml('/index/noticeYang',{ajax_param:1},function(html,state){ var styleElement = $('#style-notice'); styleElement.append('.vi-hd{top:40px;}'); styleElement.append('.vi-hdm{top:100px;}'); styleElement.append('.head-notice-top{margin-top: 154px;}'); styleElement.append('.wrapper .container{margin-top:154px;}'); styleElement.append('.landing-nav.fixed-nav{top: 154px;}'); styleElement.append('.wrapper .search-glo-wrapper-top{margin-top: 180px;}') if (state!=1 || html.trim() == '') { _$('#style-notice').remove(); _$('.vi-top').addClass('d-none'); // console.log('notice error'); return false; } _$('.vi-top').removeClass('d-none'); _$('.head-top-mode').html(html); var limitHeight = 45; var hiddenMerge = function (note) { var h = note.find('.title')[0].scrollHeight || note.find('.title')[0].offsetHeight; if (h>limitHeight) { var text = note.find('.text'),str = text.text(); str = str.toString().slice(0, str.length-6) + '...'; text.text(str); hiddenMerge(note); } } _$('.head-top-mode').find('.notice-hashref').each(function(){ hiddenMerge(_$(this)); if(_$(this).hasClass('product-notice')){ // _$('.vi-top-close').remove(); _$('.head-top-mode').setStyle({'width':'100%'}); if(_$(this).find('.countdown').length > 0){ runCountdown(); } } }); poolRunSwiper('.head-top-mode'); }); } var init; function runCountdown() { var countdownList = _$('.countdown'); if (countdownList.length > 0) { countdownList.each(function () { var item = _$(this), value = item.closest('.product-notice').data('value') || 0; value = parseInt(value); if (value < 1) { return true; } var daysItem = item.find('.days'), hoursItem = item.find('.hours'), minItem = item.find('.min'), secItem = item.find('.sec'); var has_day = daysItem.length > 0 ? 1 : 0; var ret = countDown(value, has_day); if (secItem.length < 1) { return true; } var retRun = function (ret) { daysItem.length > 0 ? daysItem.text(pre0(ret[0])) : ''; hoursItem.text(pre0(ret[1])); minItem.text(pre0(ret[2])); secItem.text(pre0(ret[3])); } retRun(ret); init = setInterval(function () { value--; ret = countDown(value, has_day); retRun(ret); if(value == 0){ clearInterval(init); setTimeout(function(){ window.location.reload(); },500) return false; } }, 1000); }); } } window.head_runCountdown=runCountdown; function countDown(val, hasday) { if (val < 0) { clearInterval(init); return false; } hasday = hasday || 0; var days = 0, hours = 0, min = 0, sec = 0; val = parseInt(val); if (val > 0) { if (hasday) { days = Math.floor(val / (60 * 60 * 24)); hours = Math.floor(val / (60 * 60) % 24); } else { hours = Math.floor(val / (60 * 60)); } min = Math.floor(val / 60 % 60); sec = Math.floor(val % 60); } return [days, hours, min, sec]; } function pre0(i) { if (i < 10) { return ('0' + i).slice(-2); } else { return i; } } _$('.vi-top').on('click','.vi-top-close',function(){ _$.ajaxJson('/index/noticeClose',{ajax_param:1},function(res,state){ if (state!=1) { return false; } _$('.vi-top').remove(); _$('#style-notice').remove(); }); }); _$('.sign-out').on('click',function(){ _$.loading(); _$.ajaxJson('/user/logout',{'express':1},function(res,state){ _$.closeLoading(); if(state!=1){return false;} location.reload(); }); }); window['callie_custom_i18n']={ network_is_abnormal: "Network is abnormal.Please try again" } function listenerHeadCart(){ let minCartEl; let setTimeoutFlag; let mounseEvent=false; let outLineDiv; let miniCartGoodsId; let loadSuccess=false; let addCartEl=[0,0]; const el=document.querySelector('.head-cart'); if(!el){ return } el.addEventListener('mouseenter',function(){ generateMiniCart() clearTimeout(setTimeoutFlag); showMiniCart(); }) el.addEventListener("mouseleave", function() { if( window['minicart']&&window['minicart']['popupShow']===true){ return } setTimeoutFlag= setTimeout(() => { if(!outLineDiv){ return } closeMiniCart(); }, 500); }); function minCartEenter(){ clearTimeout(setTimeoutFlag); } function minCartOuter(){ if(window['minicart']&& window['minicart']['popupShow']===true){ return } setTimeoutFlag= setTimeout(() => { if(!outLineDiv){ return } closeMiniCart(); }, 500); } function generateMiniCart(){ if(!outLineDiv){ outLineDiv=document.createElement('div'); outLineDiv.className='outline-div'; outLineDiv.setAttribute('data-theme','pc_yang') outLineDiv.style.width='500px' outLineDiv.style.backgroundColor='#ffffff' outLineDiv.innerHTML=`

Basket Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (1)

` const topNameEl= document.querySelector('.head-cart'); const rect= topNameEl.getBoundingClientRect(); outLineDiv.style.position ='fixed'; outLineDiv.style.top=(rect.bottom+10)+'px'; outLineDiv.style.right=(window.innerWidth - rect.right)+'px'; outLineDiv.style.transform=`translateX(30px)`; outLineDiv.style['z-index']='12'; document.querySelector('body').appendChild(outLineDiv); showMiniCart(); minCartEl=document.querySelector('#min-cart-template'); if(!mounseEvent){ mounseEvent=true; outLineDiv.addEventListener('mouseenter',minCartEenter); outLineDiv.addEventListener('mouseleave',minCartOuter); outLineDiv.querySelector('.title-close').addEventListener('click',function(){ closeMiniCart(); }) } if(!loadSuccess){ loadSuccess=true; loadMinCartHtml({parentEl:outLineDiv,rectHeight:rect.top+'px'}); return } } } window.addToCartShowMinCart= async function addToCartShowMinCart(goodsId){ getAddCartPosition(); await awaitAnimateCartIcon(); miniCartGoodsId=goodsId; if(!outLineDiv){ generateMiniCart(); waitiMiniCartLoad().then(()=>{ setTimeoutFlag= setTimeout(() => { closeMiniCart(); }, 3000); }) }else{ if(goodsId){ outLineDiv.querySelector('#min-cart-template').setAttribute('data-goodsId',goodsId) } window['minicart']['isInit']=false; if( typeof window['minicart']['initFn']==="function"){ window['minicart']['initFn']() } await waitiMiniCartLoad(); showMiniCart(); outLineDiv.querySelector('.content-scroll').scrollTop=0; setTimeoutFlag= setTimeout(() => { closeMiniCart(); }, 3000); } } function waitiMiniCartLoad(){ return new Promise((resolve)=>{ const flag = setInterval(function(){ if( window['minicart']&& window['minicart']['isInit']){ clearInterval(flag); resolve(true) } },100) }) } function loadMinCartHtml(params){ const minCartEl=document.querySelector('#min-cart-template'); if(minCartEl){ return } _$.ajaxJson('/cart/miniCart',{ajax_param:1},async function(html){ const el= document.createElement('div'); el.innerHTML=html; const css= el.querySelector('#min-cart-css'); const template= el.querySelector('#min-cart-template'); const script= el.querySelector('#min-cart-script'); document.body.appendChild(css); const createScript= document.createElement('script'); createScript.innerHTML=script.textContent; template.style.width='100%'; params.parentEl.appendChild(template); document.body.appendChild(createScript); if(miniCartGoodsId){ template.setAttribute('data-goodsId',miniCartGoodsId) } el.remove(); const contentScrollHeight=`calc( 100vh - 342px - ${params.rectHeight} )`; template.querySelector('.content-scroll').setAttribute('data-height',contentScrollHeight); template.querySelector('.content-scroll').setAttribute('data-emptyHeight','30vh'); await waitiMiniCartLoad(); params.parentEl.querySelector('.loading-div').remove(); }) } function showMiniCart(){ if(outLineDiv.style.display&&outLineDiv.style.display!=='none'){ return } const topNameEl= document.querySelector('.head-cart'); if(topNameEl){ const rect= topNameEl.getBoundingClientRect(); outLineDiv.style.top=(rect.bottom+10)+'px'; } // document.body.classList.add('modal-open'); outLineDiv.style.display='unset'; setTimeout(() => { outLineDiv.classList.add('outline-div-show'); traceFun.traceParams.currentPageType='minicart'; loadTrace(); if( window['minicart']&&typeof window['minicart']['retryExposureElementFn']==="function"){ window['minicart']['retryExposureElementFn'](); } }, 300); } window.closeMiniCart=function closeMiniCart(){ outLineDiv.classList.remove('outline-div-show'); // document.body.classList.remove('modal-open'); setTimeout(() => { outLineDiv.style.display='none'; traceFun.traceParams.currentPageType=''; }, 300); unloadTrace(); miniCartGoodsId=''; if(outLineDiv.querySelector('#min-cart-template')){ outLineDiv.querySelector('#min-cart-template').setAttribute('data-goodsId',''); } if(typeof window.backDataLayer ==="function"){ window.backDataLayer(); } } let pageloadTime=0; let pageloadBizCode=''; function loadTrace(){ var bizcode = 'minicart'; var event = { eventCode: 'pageload', eventBizCode: bizcode ? bizcode : 'callie_page', } pageloadBizCode = bizcode; pageloadTime = Date.now(); traceFun.eventReport(event, {}); } function unloadTrace(){ var bizcode ='minicart'; var event = { eventCode: 'pageunload', eventBizCode: bizcode ? bizcode : 'callie_page', } if (bizcode && bizcode === pageloadBizCode && pageloadTime > 0) { event.pageStayTime = Date.now() - pageloadTime; } traceFun.eventReport(event, {}, true); } function animateCartIcon(resolve){ let iconEl= document.querySelector('.vi-hd .menu-num__cart'); if(!iconEl){ iconEl=document.querySelector('.vi-hd .head-cart .iconfont'); } const moveIcon= window.document.createElement('div'); moveIcon.className='cart-num'; document.querySelector('.vi-hd').appendChild(moveIcon); const rect=iconEl.getBoundingClientRect(); moveIcon.style.width='50px'; moveIcon.style.height='50px'; moveIcon.style.borderRadius='50%'; moveIcon.style.position='fixed'; const finalCoordinates=[(rect.top+rect.bottom)/2-10,(rect.left+rect.right)/2-10]; const startCoordinates=addCartEl; const distanceY= startCoordinates[0]-finalCoordinates[0]; const distanceX= finalCoordinates[1]-startCoordinates[1]; const maxDistance= Math.max(distanceY,distanceX); const num= maxDistance/25; const topStepNum=distanceY/num; const leftStepNum=distanceX/num; const widthStepNum=50/num; let moveIconWidth=50; move(); function move(){ //top right if(startCoordinates[0]>finalCoordinates[0]||startCoordinates[1]

finalCoordinates[0]){ startCoordinates[0]=startCoordinates[0]-topStepNum>finalCoordinates[0]?startCoordinates[0]-topStepNum:finalCoordinates[0]; } if(startCoordinates[1]16){ moveIconWidth=moveIconWidth-widthStepNum>16?moveIconWidth-widthStepNum:16; } setTimeout(() => { moveIcon.style.top=startCoordinates[0]+'px'; moveIcon.style.left=startCoordinates[1]+'px'; moveIcon.style.width=moveIconWidth+'px'; moveIcon.style.height=moveIconWidth+'px'; move(); }, 16); }else{ moveIcon.remove(); resolve(); } } } function awaitAnimateCartIcon(){ return new Promise((resolve)=>{ animateCartIcon(resolve) }) } function getAddCartPosition(){ const addBtn=window.document.querySelector('.buy .add-cart'); if(addBtn){ const rect= addBtn.getBoundingClientRect(); addCartEl=[(rect.top+rect.height/2),(rect.left+rect.width/2)]; } } } function getSearchList(){ const container = document.querySelector('.slist'); const items = container.querySelectorAll('li'); const visibleRows = 2; const itemMargin = 10; const containerWidth = container.offsetWidth; let totalWidth = 0, totalRows = 1; let visibleItemCount = 0; items.forEach(item => { totalWidth += item.offsetWidth + itemMargin; if (totalWidth <= containerWidth) { visibleItemCount++; } else if(totalRows < visibleRows) { totalRows ++; visibleItemCount++; totalWidth = item.offsetWidth + itemMargin < containerWidth ? item.offsetWidth + itemMargin : 0; } }); if (visibleItemCount < items.length) { items.forEach((item, index) => { if (index >= visibleItemCount) { $(item).addClass('d-none'); } }); const moreElement = document.createElement('span'); moreElement.classList.add('more-history'); moreElement.innerHTML = 'more'; container.appendChild(moreElement); const rect = moreElement.getBoundingClientRect(); const listRect = container.getBoundingClientRect() let isInViewport = rect.top >= 0 && rect.left >= 0 && rect.bottom <= listRect.bottom && rect.right <= listRect.right; if(!isInViewport){ let visibleLength = $('.slist li:not(".d-none")').length; $('.slist').find('li:not(".d-none")').eq(visibleLength - 1).addClass('d-none'); } } if(visibleItemCount === items.length){ const _containRect = container.getBoundingClientRect(); const height1= _containRect.height; const maxHeight= $(container).css('max-height'); $(container).css('max-height','none'); const containRect = container.getBoundingClientRect(); if(height1 { const replacedText = item.replace(regex, function(match){ return ''+match+''; }); html += `

${replacedText}

`; }); $('.vi-hds .association .association-list').empty().append(html); } var searchTime = null; function getSuggestive() { clearTimeout(searchTime); var key = $.trim($(".search-user-div .search-input").val()); searchTime = setTimeout(() => { if(key == '') { $('.vi-hds .trending').removeClass('d-none').siblings('.association').addClass('d-none'); } else { _$.ajaxJson('/category/searchSuggestedApi',{'search':key},function(result,state){ if(result.status && result.data.length > 0 && key == $.trim($(".search-user-div .search-input").val()) != ''){ setAssociationList(result.data, key); $('.vi-hds .association').removeClass('d-none').siblings('.trending').addClass('d-none'); } else { $('.vi-hds .trending').removeClass('d-none').siblings('.association').addClass('d-none'); } }); } }, 200) } $(document).on('click','.search-box .association-list .association-words-item',function(){ search($(this).find('a').attr('title'), 'search_suggestive', 'clickSuggestive'); }); hoverHotSearch() function hoverHotSearch(){ $('.search-box .vi-hds .olist .search-hot').each(function(){ const hoverColor=$(this).data('hovercolor')||'#E9E9E9'; const bgColor=$(this).data('bgcolor'); if(hoverColor){ $(this).hover(function(){ $(this).css('background-color',hoverColor) },function(){ if(bgColor){ $(this).css('background-color',bgColor) }else{ $(this).css('background-color','#f6f6f6') } }) } }) } observerTraceReport(); function observerTraceReport(){ if(!traceFun){ retrun } traceFun.observerExposureByName(['search-box .search-recommond-item'],['select_item'],function(bizCode, el){ if(bizCode==='select_item'){ const eventExtraNumber= $(el).data('index'); bizCode='search_recommend' traceEventReport('exposure',bizCode, 1, '', {}, '', eventExtraNumber); } }) $('.search-box .search-recommond-item').each(function(){ $(this).click(function(){ const eventExtraNumber= $(this).data('index'); traceEventReport('click','search_select_recommend', 1, '', {}, '', eventExtraNumber); }) }) } function traceEventReport(eventCode,bizcode, state, FailMsg, eventParams, eventExtra = '', eventExtraNumber = 0, eventExtraNum1 = 0) { var event = { eventCode: eventCode, eventBizCode: bizcode, eventState: state, eventFailReason: FailMsg, eventExtra: eventExtra, eventExtraNumber: eventExtraNumber, eventExtraNum1: eventExtraNum1, } if (typeof traceFun !== 'undefined') { traceFun.eventReport(event, eventParams, true); } } });})(customJs);

Photo Custom

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (2)

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (3)

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (4)

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (5)

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (6)

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (7)

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (8)

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (9)

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (10)

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (11)

Preview

1/10

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (12)

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (13)

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (14)

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (15)

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (16)

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (17)

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (18)

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (19)

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (20)

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (21)

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (22)

£12.00

(0)

Buy More Save More

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (23)

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (24)

pay in 4 interest-free over 20.00

Gift Box

Your item(s) will be sent in a gift box.

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (26)

Greeting Card

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (27)

{{currencyPosition(item.price)}}

Greeting Card

{{cardDetailLength}} Left

Subtotal:

£12.00

Members can get 12 points for purchasing this item

Add To Basket

99 Day
Returns

Secure
Shopping

Privacy
Guaranteed

SHIPPING & RETURNS

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (30) Delivery

Delivery Time = Processing Time (Generally 1-5 business days) + Shipping Time

Standard Shipping

£4.0

8-10Days

Expedited Shipping

£6.0

6-8Days

Urgent Shipping

£18.0

4-6Days

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (31) 99-Day Return

Should you not be totally satisfied with your items, we offer 99 day returns and exchanges service to ensure you are left as happy as possible.

Please see here for the full list of terms and conditions for our refund and exchange policy.

Product Info

Specification

[HEARTS DESIGN]: Each tattoo features a charming connect-the-hearts design that symbolizes love, affection, and unity. The intricate details and vibrant colours make these tattoos truly eye-catching and appealing. Whether you're attending a music festival or a birthday party or want to add flair to your everyday style, these tattoos will make a statement.

[PERSONALIZED TOUCH]: What sets these tattoos apart is the ability to Personalise them with 1 to 5 names. Imagine the joy and surprise on your loved ones' faces when they see their names beautifully displayed within the heart design. It's a fantastic way to showcase your love and create a cherished memory that will last a lifetime.

[DURABLE AND WATERPROOF]: Don't worry about these temporary tattoos fading or smudging during all the festival fun. They are made with high-quality, non-toxic, and waterproof materials that ensure long-lasting wear for 2-8 days. Whether dancing in the rain, splashing in the pool, or sweating it out on the dance floor, these tattoos will stay vibrant and intact, allowing you to enjoy the festivities without any worries.

[EASY APPLICATION AND REMOVAL]: Applying these tattoos is a breeze! Dry the desired area, place the tattoo facedown, and dampen the back with a wet cloth for about 30 seconds. Gently peel off the paper, and voila! You're ready to flaunt your Personalised temporary tattoo. When the party is over, the tattoos can be easily removed with baby oil or alcohol tablets applied wet, ensuring a hassle-free cleanup.

[VERSATILE PARTY FAVORS]: These tattoos make fantastic party favors for various celebrations. Whether it's a family reunion, a wedding, a couple's retreat, or a friendship gathering, these tattoos will add a touch of excitement. They can also be used as icebreakers, conversation starters, or team-building activities, making them a versatile addition to any event.

[KINDLY NOTE]: These temporary tattoos are arranged on A4 paper and contain multiple tattoo stickers on a single one sheetr, making them easy to cut and use.

Specification
Material: Sticker
Measurement: Single Tattoo Sticker Height - 1"(2.5cm), 1.5"(3.8cm), 2"(5cm)
Feature: Non-toxicity, Skin-safe, Easy to apply and remove, Fun and temporary expression, Waterprrof and sweatproof, Family heart
Note
Customized Area: Front Printing
Package: We will choose an appropriate box for packaging based on the actual size of the product to ensure that you receive your products in the best condition.
Care: • Avoid getting the temporary tattoo wet for at least a few hours after application.• Refrain from rubbing or scratching the tattoo, as it may cause the design to fade or peel off prematurely.• When cleaning the area around the tattoo, use a mild soap and water.• Prolonged exposure to direct sunlight can fade the temporary tattoo.• When you want to remove the temporary tattoo, gently rub it with baby oil, rubbing alcohol.
Warm Tips: • Please be aware that the preview may be slightly different from the physical item in terms of color due to our lighting at our product photoshoot or your device’s display.• Due to differences in measurement methods, there may be slight discrepancies in dimensions. Please refer to the actual product.• Transportation may cause slight deformation, but it won't affect the product's quality and functionality.

ABOUT US

About Callie Contact us Terms and Conditions Blog Sitemap

CUSTOMER SERVICE

FAQ Returns Policy Privacy Policy Payment Methods Klarna

CONTACT US

Messenger

Email:support-uk@callie.com

2:00am to 11:00am Monday to Saturday (BST)

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (32) Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (33) Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (34) Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (35) Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (36) Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (37) Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (38) Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (39) Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (40) Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (41) Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (42)

Safety Assurance

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (43)

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (44)

United Kingdom

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (45)

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (46)

United States

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (48)

France

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (49)

Germany

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (50)

United Kingdom

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (52)

Italy

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (53)

Netherlands

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (54)

Spain

OPEN UNIQUE TRADING LIMITED

WORKSHOP 29 ON 5TH FLOOR CAREER AND KENSON INDUSTRIAL MANSION 58 HUNG TO RD KWUNTONG KL

Copyright © 2017-2024, CALLIE All Rights Reserved.

Product

1/1

1/10

${tempText}

` parentElement.appendChild(temp) setTimeout(function () { let offsetWidth = temp.offsetWidth let seatElement = temp.getElementsByClassName('font-scaling-seat')[0] let textElement = temp.getElementsByClassName('font-scaling-text')[0] let seatWidth = seatElement.offsetWidth textElement.style.width = seatWidth+'px' let leftpx = (offsetWidth - seatWidth) / 2 let ratio = (offsetWidth / seatWidth) textElement.style.transform = 'scale(' + (ratio > 1 ? 1 : ratio) + ')' textElement.style.left = leftpx + 'px' temp.style.right = '' temp.style.position = '' textElement.style['line-height'] = '20px' }) } fontScalingHeight(parentElement, text, className, width, height, fontSize) { width = width || '100%' parentElement.innerHTML = '' let temp = document.createElement('div') temp.classList.add('font-scaling-content') temp.style.width = width temp.style.right = '-100vw' temp.style.position = 'fixed' temp.style.height = height let globalRatio = window.innerHeight / 667 globalRatio = globalRatio > 1 ? 1 : globalRatio temp.innerHTML = `

${text}

${text}

` parentElement.appendChild(temp) setTimeout(function () { let offsetWidth = temp.offsetWidth; let seatElement = temp.getElementsByClassName('font-scaling-seat')[0]; let textElement = temp.getElementsByClassName('font-scaling-text')[0]; textElement.style['white-space'] = 'normal'; let seatWidth = seatElement.offsetWidth; let ratio = (offsetWidth * 2 / seatWidth) ratio = ratio >= 1 ? 1 : ratio textElement.style.top = '0px' textElement.style['font-size'] = Math.floor(fontSize * ratio) + 'px'; temp.style.right = '' temp.style.position = '' }) } getKeysWithPrefix(prefix) { let keysWithPrefix = []; for (let i = 0; i < localStorage.length; i++) { let key = localStorage.key(i); if (key.startsWith(prefix)) { keysWithPrefix.push(key); } } return keysWithPrefix; } initSVGA() { let that = this if (!window.SVGA && this.svgaFile) { let script = document.createElement('script'); script.type = 'text/javascript'; script.async = true script.onload = function () { that.initAnimation() } script.src = 'https://d2d36hyavd3mb7.cloudfront.net/assets/js/svga.min.js'; document.body.appendChild(script); } else if (this.svgaFile) { this.initAnimation() } } playAnimation() { if (this.player && this.player._videoItem && this.player._videoItem.frames) { this.player && this.player.startAnimation(0, true) this.activeCanvas.style['display'] = 'block' this.autoPlayer = false } else { this.autoPlayer = true } } // 预加载图片 preloadImages(images) { let that = this if (!images || !images.length) { return } let img = new Image() img.src = images[0] if (images.length > 1) { img.onload = function () { that.preloadImages(images.slice(1)) } } } isHandheldDeviceByTouchEventSupport() { return 'ontouchstart' in window || (typeof window.DocumentTouch !== 'undefined' && document instanceof DocumentTouch); } openLink(url) { var param = ''; let newTab = window.open('about:blank'); if (newTab) { newTab.location.href = url + (param != '' ? '?' + this.trim(param, '&') : ''); } else { setTimeout(() => { this.openLink(url) }) } } } class ActivePopup extends BaseObject { constructor(id) { super() this.setObject(activePopupData) this.init(id) } init(id) { if (id) { this.id = id this.class = this.camelToKebab(id) this.createMask() this.insertContentCSS() } else { console.error('activePopup init() id is empty') } } insertContentCSS() { let string = ` #${this.id} { display: none; width: 100vw; height: 100vh; position: fixed; top: 0; left: 0; background: rgba(0,0,0,0.8); z-index: 20; } .${this.class}-frame { display: flex; align-items: center; justify-content: center; border-radius: 6px; flex-direction: column; height:100%; widht:100%; } .${this.class}-view { display: flex; align-items: center; justify-content: center; border-radius: 6px; flex-direction: column; } ` this.addCSS(string) } createMask() { let that = this let maskHtml = `

` this.insertElement(document.body, maskHtml) this.mask = document.getElementById(this.id) this.view = document.getElementsByClassName(`${this.class}-view`)[0] this.frame = document.getElementsByClassName(`${this.class}-frame`)[0] this.mask.addEventListener('click', function (e) { if (e.target === that.frame && that.activeInfo.state >= 2) that.close() }) this.view.addEventListener('click', function () {}) } open() { returnBlock.pushStateToHistory(this.id.toLowerCase()) this.mask.style.display = 'block' this.afterOpen && this.afterOpen() document.body.classList.add('active-parent--hidden') } close() { returnBlock.close() this.hide() } hide() { this.mask.style.display = 'none' document.body.classList.remove('active-parent--hidden') this.afterClose && this.afterClose() } popup(options) { options = { ...options, class: this.class + '-popup', } options.content = options.content + `Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (55)` if (window.innerWidth <= 480) { options.area = ['100%', '80%'] options.offset = 'b' options.maxRate = ['100vh', '80vh'] } else { options.area = ['80%', '80%'] options.maxRate = ['938px', '80vh'] } calliePopup.modal(options) returnBlock.pushStateToHistory(DialogType.POPUP, true); } } class MotherDayActive extends ActivePopup { constructor(id, activeInfo) { super(id); this.setObject(motherDayData) this.initData(activeInfo) this.afterInit() } initData(data) { this.titleImage = data.img this.localStorageStateId = 'motherDayActive' + data.id this.handleLocalstorage(data.id) this.cardIconInfo = { itemBackBg: data.rear_img, itemFrontBg: data.win_img || `${cdnUrl}front-default-icon.png`, lightIcon: data.win_light_img, cardList: data.prize_data, isAllowGuest: data.is_allow_guest, id: data.id, } this.preloadImages([this.cardIconInfo.itemFrontBg, this.cardIconInfo.lightIcon]) this.successImage = data.win_tips_img this.failImage = data.not_win_tips_img this.activeInfo.shareLink = data.share_link this.activeInfo.state = localStorage.getItem(this.localStorageStateId) >= 2 ? 2 : 0 this.activeInfo.notWinLink = data.not_win_link this.activeInfo.isAllowGuest = data.is_allow_guest this.activeInfo.winLink = data.win_link this.activeInfo.rulesContent = data.rules this.activeInfo.loginState = data.is_login this.activeInfo.usePrizeLink = data.use_prize_link this.activeInfo.id = data.id this.svgaFile = data.start_countdown_img if (data.record && data.record.share_time) { this.activeInfo.shareState = true } if (data.record) { this.activeInfo.drawTimes = data.record.num || 0 } } handleLocalstorage() { let that = this let array = this.getKeysWithPrefix('motherDayActive') array.forEach(function (item, index) { if (item != that.localStorageStateId) localStorage.removeItem(item) }) } afterInit() { this.createContent() if (this.activeInfo.state == 0) this.initSVGA() this.initPage() this.initResize() } initResize() { let that = this let baseHeight = 667 let baseWidth = 375 let calcFun = this.throttle(function () { let resizeHeight = window.innerHeight let resizeWidth = window.innerWidth that.ratio = Math.min(resizeHeight / baseHeight, resizeWidth / baseWidth) that.frame.style.transform = 'scale(' + that.ratio + ')' }, 10) calcFun() window.addEventListener('resize', function (e) { calcFun() }) } createContent() { let contentClassName = 'card-drawing-content' let popupClassName = 'popup-close' let failImage = '' let contentHtml = `

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (56)

${this.Remaining_Draws_Today.replace('{}','')} 0

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (57)

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (58)

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (59)

` this.insertElement(this.view, contentHtml) this.content = this.mask.getElementsByClassName(contentClassName)[0] this.buttonList = this.mask.getElementsByClassName('button-item') this.buttonResult = this.mask.getElementsByClassName('card-drawing-button-result')[0] this.cardDrawingTop = this.mask.getElementsByClassName('card-drawing-top')[0] this.cardDrawingResultTop = this.mask.getElementsByClassName('card-drawing-result-top')[0] this.shareButtonElement = document.getElementById('shareButton') this.drawTimes = document.getElementById('drawTimes') this.popupCloseElement = document.getElementById('popupClose') this.onClick('popupClose', 'close') this.onClick('myPrize', 'openMyPrize') this.onClick('rules', 'openRules') this.onClick('shareButton', 'shareButton') this.onClick('cardDrawingResult', 'cardDrawingResult') } openRules() { this.popup({ title: this.draw_rules, content: this.activeInfo.rulesContent }) } openMyPrize() { let that = this this.request(`/promotion/lotteryPrize?lottery_id=${this.activeInfo.id}`).then(function (res) { // res = mockDataList.data if (res && res.recordList) { that.setPrizeList(res.recordList) let content = that.setMyPrize() that.popup({ title: that.My_Prize, content, }) that.setScroll(`${that.class}-coupon-list`) let button = document.getElementsByClassName(`${that.class}-coupon-button`) that.forEachElement(button, function (item) { that.fontScaling(item, that.use_prize, '', '78px') item.addEventListener('click', function (e) { returnBlock.close() returnBlock.close() // console.log(item,'1111') window.location.replace(item.dataset.link) }) }) } }) } setPrizeList(list) { let prizeList = [] list.forEach(function (item) { let itemList = [] let currency_symbol = item.prize_data.currency_symbol item.prize_data.data.forEach(function (itemItems) { itemList.push( currency_symbol + itemItems.coupon.value ) }) prizeList.push({ time: item.lottery_time_text, couponList: itemList }) }) this.prizeList = prizeList } getPrizeInfo(index) { let that = this return new Promise(function (reslove, reject) { that.request(`/promotion/lottery`, { lottery_id: that.activeInfo.id }).then(function (res) { that.activeInfo.resultState = res.prize.data && res.prize.data.length > 0 ? 1 : 0 let currency_symbol = res.prize.currency_symbol that.activeInfo.drawTimes = res.num let list = that.setResultList(res.prize.data || [], currency_symbol) reslove({ sum: currency_symbol + res.prize.sum, list }) let eventState = traceFun.eventReport({ eventCode: 'custom', eventBizCode: 'carddraw_participated_result', eventExtraNumber: [1, 2][that.activeInfo.resultState] }, {}, true); }, function (error) { reslove({ sum: '', list: [] }) }) }) } setResultList(data, currency_symbol) { let list = [] data.forEach(function (item, index) { list.push(currency_symbol + item.coupon.value) }) return list } setMyPrize() { let that = this let content = '' if (this.prizeList.length > 0) { this.prizeList.forEach(function (item, index) { let list = that.setCouponList(item.couponList); content = content + `

${item.time}

${list}

` }) } else { content = `

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (60)

${this.No_prize}

` } return content } setCouponList(couponList) { let that = this let list = '' couponList.forEach(function (couponItem) { list = list + `

${couponItem}

` }) return list } shareButton() { let that = this if (!this.activeInfo.shareState) { this.request(`/promotion/lotteryShare?lottery_id=${this.activeInfo.id}`).then(function (res) { that.changeShareState(true) that.changeDrawTimes(res.num) // that.openLink(that.activeInfo.shareLink, '', true) // window.open(that.activeInfo.shareLink, '', true) }) } else { // that.openLink(that.activeInfo.shareLink, '', true) // window.open(this.activeInfo.shareLink, '', true) } } cardDrawingResult() { this.close() // resultState let isSuccess = this.activeInfo.resultState == 1 let url = isSuccess ? this.activeInfo.winLink : this.activeInfo.notWinLink if (!this.activeInfo.loginState && !this.activeInfo.isAllowGuest && isSuccess) { if (window.HeadTool) { HeadTool.login() return } else { url = window.origin + '/user/login#signin' } traceFun && traceFun.eventReport({ eventCode: 'click', eventBizCode: 'carddraw_item_join_now' }, {}, true) } else if (isSuccess) { traceFun && traceFun.eventReport({ eventCode: 'click', eventBizCode: 'carddraw_item_go_shopping' }, {}, true) } window.location.replace(url) } afterOpen() { let state = localStorage.getItem(this.localStorageStateId) >= 2 ? 2 : 0 this.changeState(state) this.setButtonState() this.activeInfo.state == 0 && this.playAnimation() let tempText = this.My_Prize.length>this.draw_rules.length?this.My_Prize:this.draw_rules this.fontScaling(this.shareButtonElement.getElementsByClassName('share-desc')[0], this.Extra_chance, 'share-desc-front', '135px') this.fontScaling(this.frame.getElementsByClassName('button-text')[0], this.My_Prize, '', '57px',tempText) this.fontScaling(this.frame.getElementsByClassName('button-text')[1], this.draw_rules, '', '57px',tempText) if (traceFun) { traceFun.traceParams.currentPageType = 'carddraw' traceFun.eventReport({ eventCode: 'carddrawload', eventBizCode: 'carddraw_page', }, {}, true); } } afterClose() { let state = this.activeInfo.state this.changeState(localStorage.getItem(this.localStorageStateId) >= 2 ? 2 : 0) this.cardInstance.clearTimeEvent() this.player && this.player.stopAnimation() this.cardInstance = null this.content.innerHTML = '' this.initPage() let eventBizCodeArray = ['carddraw_item_countdown_close', 'carddraw_item_countdown_close', 'carddraw_item_close', 'carddraw_item_participated_close', 'carddraw_item_participated_close' ] if (traceFun) { traceFun.eventReport({ eventCode: 'click', eventBizCode: eventBizCodeArray[state] }, {}, true) traceFun.traceParams.currentPageType = '' } } initPage() { this.cardInstance = new CardDrawing(this.content, this.cardIconInfo, this.activeInfo.state) this.cardInstance.parent = this this.changeShareState(this.activeInfo.shareState) this.changeDrawTimes(this.activeInfo.drawTimes) } changeDrawTimes(times) { this.activeInfo.drawTimes = times this.drawTimes.innerHTML = times if (this.activeInfo.drawTimes > 0 && this.activeInfo.state >= 2) { this.cardInstance.circulateFlashing() } } changeShareState(shareState) { this.activeInfo.shareState = shareState if (shareState) this.shareButtonElement.classList.add('width-54px') else this.shareButtonElement.classList.remove('width-54px') } changeState(state) { localStorage.setItem(this.localStorageStateId, state) this.activeInfo.state = state if (state == 2) this.cardInstance && this.activeInfo.drawTimes > 0 && this.cardInstance.circulateFlashing() else this.cardInstance && this.cardInstance.clearFlashing() if (state == 4 || state == 3) this.setButtonState() } setStateOpacity(opacity) { this.cardDrawingResultTop.style.opacity = opacity this.buttonResult.style.opacity = opacity this.popupCloseElement.style.opacity = opacity } setResultStyle() { let resultState = this.activeInfo.resultState resultState = resultState == 1 && !this.activeInfo.loginState && !this.activeInfo.isAllowGuest ? 2 : resultState let success = this.cardDrawingResultTop.getElementsByClassName('success-image')[0] let fail = this.cardDrawingResultTop.getElementsByClassName('fail-image')[0] this.addResultText(resultState) success.style.display = resultState == 0 ? 'none' : 'block' fail.style.display = resultState == 0 ? 'block' : 'none' let keyArray = ['card-drawing-button-fail', 'card-drawing-button-success', 'card-drawing-button-join'] let objectInfo = { 'card-drawing-button-join': 'carddraw_go_shopping', 'card-drawing-button-success': 'carddraw_go_shopping', 'card-drawing-button-fail': 'carddraw_I_Know' } traceFun && traceFun.eventReport({ eventCode: 'exposure', eventBizCode: objectInfo[keyArray[resultState]], eventTriggerElement: keyArray[resultState] }, {}, true); } addResultText(resultState) { this.buttonResult.innerHTML = '' let temp = [`

${this.I_Konw}

`, `

${this.Go_shopping}

`, `

${this.Go_shopping}

` ][resultState] this.insertElement(this.buttonResult, temp) } setButtonState() { let state = this.activeInfo.state this.setStateOpacity(1) if (state == 4) { this.setResultStyle() this.buttonResult.style.display = 'block' this.forEachElement(this.buttonList, function (item) { item.style.display = "none" }) this.cardDrawingResultTop.style.display = "block" this.cardDrawingTop.style.display = "none" } else if (state == 3) { this.buttonResult.style.display = 'block' this.forEachElement(this.buttonList, function (item) { item.style.display = "none" }) this.cardDrawingResultTop.style.display = "block" this.cardDrawingTop.style.display = "none" this.setStateOpacity(0) } else { this.buttonResult.style.display = 'none' this.forEachElement(this.buttonList, function (item) { item.style.display = "flex" }) this.cardDrawingResultTop.style.display = "none" this.cardDrawingTop.style.display = "flex" } } initAnimation() { let that = this let id = `${this.id}ActiveCanvas` this.activeCanvas = document.createElement('div') this.activeCanvas.id = id this.mask.append(this.activeCanvas); this.activeCanvas.style['display'] = 'block' this.activeCanvas.style['top'] = 0 this.activeCanvas.style['left'] = 0 this.activeCanvas.style['bottom'] = 0 this.activeCanvas.style['right'] = 0 this.activeCanvas.style['margin'] = 'auto' this.activeCanvas.style['height'] = '180px' this.activeCanvas.style['width'] = '208px' this.activeCanvas.style['position'] = 'fixed' this.player = new SVGA.Player(`#${id}`); this.parser = new SVGA.Parser(`#${id}`); // this.svgaFile this.parser.load(this.svgaFile, function ( videoItem) { that.player.setVideoItem(videoItem); that.player.loops = 1; if (that.autoPlayer) { that.playAnimation() } that.player.onFinished(function (videoItem) { that.activeCanvas.style['display'] = 'none' if (that.activeInfo.state == 0) { that.changeState(1) that.cardInstance && that.cardInstance.drawCard() } }); }); } } class CardDrawing extends BaseObject { constructor(content, cardInfo, state = 0) { super() this.setObject(CardDrawingData) this.cardInfo = cardInfo this.svgaFile = `${cdnUrl}/finger.svga` this.init(content, state) } init(content, state) { let that = this this.content = content this.initSVGA() this.width = parseInt(this.content.style.width) || this.content.style.offsetWidth this.height = parseInt(this.content.style.height) || this.content.style.offsetHeight this.setPosition(this.width, this.height) this.positionObject.positionArray.forEach(function (item, index) { if (that.cardInfo.cardList[index]) { let cardItem = that.cardInfo.cardList[index] let itemHtml = `

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (61)

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (62)

` that.content.appendChild(document.createRange().createContextualFragment(itemHtml)) } }) this.itemElement = document.getElementsByClassName(this.itemClassName) this.contentElement = document.getElementsByClassName(this.itemContentClassName) this.cardFloatEvent() this.setLightBg() this.insertContentCSS() } cardFloatEvent() { let that = this let isHandheld = this.isHandheldDeviceByTouchEventSupport() let flashingFlag this.forEachElement(this.itemElement, function (element, index) { that.getPrizeInfoDebounce = that.throttle(that.getPrizeInfo, 5000) element.getElementsByClassName('card-drawing-item-back')[0].addEventListener('click', function () { !that.lockCheck() && that.getPrizeInfoDebounce(index) }) if (!isHandheld) { let flag = false let time = 0.2 element.addEventListener('mouseout', end) element.addEventListener('touchend', end) function end() { if (flag && that.parent.activeInfo.drawTimes > 0 && that.parent.activeInfo.state == 2) { flag = false element.style['margin-top'] = '0px' if (!flashingFlag) { flashingFlag = setTimeout(function () { element.style['transition-duration'] = '0.5s' that.circulateFlashing() }, 1500 * time) } } } element.addEventListener('mouseover', function () { if (!flag && that.parent.activeInfo.drawTimes > 0 && that.parent.activeInfo.state == 2) { flag = true that.clearFlashing() clearTimeout(flashingFlag) flashingFlag = null element.style['transition-duration'] = `${time}s` element.style['margin-top'] = '-6px' } }) } }) } insertContentCSS() { let iosVersion = this.getIOSVersion() let lessThanIos13 = iosVersion && iosVersion.major <= 13 let string = `.card-drawing-item-front{ transform: translateZ(1px) rotateY(0); z-index:2; opacity: 1; } .card-drawing-item-back { transform: translateZ(-1px) rotateY(180deg); cursor: pointer; z-index: 1; ${lessThanIos13?'opacity: 0;':''} } .card-reverse>.card-drawing-item-front { transform: translateZ(-1px) rotateY(180deg); position: relative; ${lessThanIos13?'opacity: 0;':''} z-index:1; } .card-reverse>.card-drawing-item-back { transform: translateZ(1px) rotateY(360deg); opacity: 1; z-index:2; }` this.addCSS(string) } setLightBg() { if (this.cardInfo.lightIcon) { this.content.appendChild(document.createRange().createContextualFragment( `Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (63)`)) this.lightIconElement = document.getElementById('lightIcon') } } getPrizeInfo(index) { let that = this this.clearFlashing() traceFun && traceFun.eventReport({ eventCode: 'click', eventBizCode: 'carddraw_item_participated' }, {}, true) this.parent.getPrizeInfo().then(function (res) { that.changeState(3) that.setItemContent(res, index) that.clickOverTurnEvent(index) }) } setItemContent(item, index) { let template if (item.list.length >= 1) { template = this.setCouponElement(item.sum, item.list) } else { template = this.setEmpty() } template = `Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (64)

${template}

` document.getElementsByClassName('card-drawing-item-front')[index].innerHTML = '' this.insertElement(document.getElementsByClassName('card-drawing-item-front')[index], template) this.setScroll('result-card-list-view') if (item.list.length >= 1) { this.fontScaling(document.getElementsByClassName('result-card-coupon')[0], item.sum, '', '180px') let couponText = item.list.length > 1 ? this.parent.win_coupons : this.parent.win_coupon.replace('{coupon}', item.sum) this.fontScalingHeight(document.getElementsByClassName('result-card-desc')[0], couponText, '', '183px', '36px', '15') if (!this.parent.activeInfo.loginState && !this.parent.activeInfo.isAllowGuest) { this.fontScalingHeight(document.getElementsByClassName('result-card-tips')[0], this.parent.Sign_in_to_get_prize, '', '193px', '30px', '13') } } } setCouponElement(coupon, couponList = []) { let element = `

${coupon}

` element = element + ( `

${couponList.length>1?this.parent.win_coupons:this.parent.win_coupon.replace('{coupon}',coupon)}

` ) element = element + (couponList.length > 1 ? `

${this.parent.setCouponList(couponList)}

` : '') element = element + (this.parent.activeInfo.loginState || this.parent.activeInfo.isAllowGuest ? '' : `

${this.parent.Sign_in_to_get_prize }

`) return element } setEmpty() { return `Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (65)

${this.parent.No_prize_prompt}

` } setPosition(width, height, row = 3, line = 2, marginHeight = 5, marginWidth = 13) { let widthItem = parseInt((width - (row - 1) * marginWidth) / row) let heightItem = parseInt((height - (line - 1) * marginHeight) / line) this.positionObject.center = { top: (height - heightItem) / 2, left: (width - widthItem) / 2 } for (let i = 0; i < line; i++) for (let j = 0; j < row; j++) this.positionObject.positionArray.push({ top: i * heightItem + i * marginHeight, left: j * widthItem + j * marginWidth, width: widthItem, height: heightItem }) } circulateFlashing() { let that = this if (!this.circulateFlashingInterval && this.parent.activeInfo.drawTimes) { let list = this.itemElement let length = list.length let positionArray = this.positionObject.positionArray let index = 0 let showFingerSvga = function () { if (that.activeCanvas) { let item = positionArray[index] let left = item.left + item.width / 2 - 11 let top = item.top + item.height / 2 - 12 that.activeCanvas.style['top'] = top + 'px' that.activeCanvas.style['left'] = left + 'px' that.activeCanvas.style['display'] = 'block' that.activeCanvas.dataset.index = parseInt(index) that.activeCanvas.getElementsByTagName('canvas')[0].dataset.index = parseInt(index) that.playAnimation() that.activeCanvas.addEventListener('click', function (e) { !that.lockCheck() && that.getPrizeInfoDebounce(parseInt(e.target.dataset.index)) }) } } flashingEvent() if (length > 1) { this.circulateFlashingInterval = setInterval(flashingEvent, 1500) } function flashingEvent() { let item = list[index] showFingerSvga() if (length > 1) { let lastItem = list[index - 1 < 0 ? length - 1 : index - 1] item && item.classList.add('flashing-animation') lastItem && lastItem.classList.remove('flashing-animation') index = index + 1 >= length ? 0 : index + 1 } else { item && item.classList.add('flashing-animation') } } } } clearTimeEvent() { this.clearFlashing() for (let i = 1; i <= 4; i++) { let key = 'timeout' + i this[key] && clearTimeout(this[key]) this[key] = null } } clearFlashing() { this.circulateFlashingInterval && clearInterval(this.circulateFlashingInterval) this.circulateFlashingInterval = null this.forEachElement(this.itemElement, function (item, index) { item.classList.remove('flashing-animation') item.style['transition-duration'] = `0.5s` }) if (this.activeCanvas) { this.activeCanvas.style['display'] = 'none' } } overturnEvent(index = 0) { if (this.contentElement && this.contentElement.length > 0) { let element = this.contentElement[index] if (element.classList.value.includes('card-reverse')) { element.classList.remove('card-reverse') } else { element.classList.add('card-reverse') } } } clickOverTurnEvent(index = 0) { let that = this if (this.itemElement && this.itemElement.length > 0) { let element = this.itemElement[index] let content = this.contentElement[index] let animationTime = 0.8 this.forEachElement(this.itemElement, function (item, itemIndex) { if (itemIndex !== index) { item.style.display = 'none' } }) let timeout4 = setTimeout(function () { that.changeState(4) }, 1000 * animationTime) let styleList = content.getElementsByClassName('card-drawing-item-child-style') this.forEachElement(styleList, function (item) { item.style['transition-timing-function'] = 'ease-in-out'; item.style['transition-duration'] = `${animationTime}s`; }) content.classList.remove('card-reverse') element.classList.add('card-enlarged') this.lightIconElement && this.lightIconElement.classList.add('enlarged') } } lockCheck() { let activeInfo = this.parent.activeInfo let flag = true if (activeInfo.drawTimes > 0 && activeInfo.state == 2) flag = false else flag = true if (activeInfo.drawTimes == 0 && activeInfo.state == 2) { if (!activeInfo.shareState) { calliePopup.toast(this.parent.share_to_win) } else { calliePopup.toast(this.parent.no_chance_draw) } traceFun && traceFun.eventReport({ eventCode: 'custom', eventBizCode: 'carddraw_participated_result', eventExtraNumber: 0 }, {}, true); } return flag } changeState(state) { this.parent && this.parent.changeState(state) } initAnimation() { let that = this let id = `CardDrawingFinger${this.cardInfo.id}` this.activeCanvas = document.createElement('div') this.activeCanvas.id = id this.content.append(this.activeCanvas); this.activeCanvas.style['display'] = 'none' this.activeCanvas.style['height'] = '50px' this.activeCanvas.style['width'] = '55px' this.activeCanvas.style['position'] = 'absolute' this.activeCanvas.style['transition'] = 'all 0.2s' this.activeCanvas.style['z-index'] = '5' this.player = new SVGA.Player(`#${id}`); this.parser = new SVGA.Parser(`#${id}`); this.parser.load(this.svgaFile, function ( videoItem) { that.player.setVideoItem(videoItem); if (that.autoPlayer) { that.playAnimation() } }); } drawCard() { let that = this if (this.contentElement && this.contentElement.length) { this.forEachElement(this.contentElement, function (item, index) { that.overturnEvent(index) }) } this.timeout1 = setTimeout(function () { if (that.itemElement && that.itemElement.length > 0) { that.forEachElement(that.itemElement, function (item, index) { item.style.top = that.positionObject.center.top + 'px'; item.style.left = that.positionObject.center.left + 'px'; }) } }, 500) this.timeout2 = setTimeout(function () { if (that.itemElement && that.itemElement.length > 0) { that.forEachElement(that.itemElement, function (item, index) { item.style.top = that.positionObject.positionArray[index].top + 'px'; item.style.left = that.positionObject.positionArray[index].left + 'px'; }) } that.timeout3 = setTimeout(function () { that.changeState(2) }, 1000) }, 1400) } }

🙌 Congrats! You've Successfully Claimed Your Coupon!

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (66)

Oops! The magic has faded. The event has ended.

` document.body.appendChild(temp); } let activeEntry = _$("#active-entry"); seatImg = _$("#seat-img"); activeEntryModal = _$("#activeEntryMask"); if (!ifJumpList) { activeEntryModal && activeEntryModal.append(`

`) activeViewGet = _$("#activeViewGet"); } activeViewSuccess = _$("#activeViewSuccess"); activeViewSuccessContent = _$("#activeViewSuccessContent"); activeViewFailContent = _$("#activeViewFailContent"); } function checkEmail(email) { return new Promise(function (resolve, reject) { $.post( "/user/emailCheck", { email }, function (res, state) { var result = res.data; resolve(result); } ); }); } function getUrlParams(name) { let search = window.location.search || window.location.hash || '?' let params = {} search = search.split('?') search = search[1]?.split('&') || [] for (let i = 0; i < search.length; i++) { let element = search[i].split('=') if (element[1]) params[element[0]] = element[1].split('#')[0] } search.forEach(function (element) {}); return params[name] } function initEntryInfo(_$) { var iframeContent = document.getElementById('activeViewGetIframe') if (!iframeContent && activeViewGet) { activeViewGet.append( `

`) iframeContent = document.getElementById('activeViewGetIframe') } if (advertise && iframeContent) { iframeContent.contentWindow.postMessage({ event: 'setLogin', params: !!isLogin }) iframeContent.contentWindow.postMessage({ event: 'setAdvertise', params: advertise }) let email = getUrlParams('_em') if (email) { const url = window.location.href; const updatedUrl = url.replace(/([?&])_em=[^&]+(&|$)/, ''); window.history.replaceState(null, null, updatedUrl); } else { email = window.localStorage.getItem(`email${advertise.id}`) } checkEmail(email).then(function(res) { if (res) { window.localStorage.setItem(`email${advertise.id}`, email) iframeContent.contentWindow.postMessage({ event: 'setEmail' }) } }) } } function showSeatImg() { if (typeof traceFun !== 'undefined') { traceFun.observerExposureByName(['ad_window_corner'],['ad_window_corner']); } activeCanvas && activeCanvas.hide(); seatImg && seatImg.show(); if (!sessionStorage.getItem('keyFirstPop') && advertise.is_first_auto_pop && (advertise.href_type === 2 || advertise.href_type === 1) && !ifJumpList) { sessionStorage.setItem('keyFirstPop', new Date()) openActive() } } function openActive() { if (advertise.href_type === 1) { if (ifJumpList === 0) { openGetCoupon(); } else if (ifJumpList === 1) { getCoupons(); } } else if (advertise.href_type === 0 && advertise.href) { window.location.href = advertise.href } else if (advertise.href_type === 2 && advertise.lottery_data.id && advertise.lottery_id) { motherDayActive.open(); } } function openGetCoupon() { initEntryInfo(); returnBlock.pushStateToHistory('active'); activeEntryModal && activeEntryModal.show(); activeViewGet && activeViewGet.show(); activeViewSuccess && activeViewSuccess.hide(); } function openSuccess(type, data) { returnBlock.pushStateToHistory('success') if (typeof traceFun !== 'undefined') { if (type == 1) { traceFun.observerExposureByName(['active-view-success'],['ad_window_coupon_result']); } else { traceFun.observerExposureByName(['active-view-fail-content'],['ad_window_coupon_result']); } } activeEntryModal && activeEntryModal.show(); activeViewSuccess && activeViewSuccess.show(); activeViewGet && activeViewGet.hide(); var event = { eventCode: 'custom', eventBizCode: 'ad_window_coupon_result' } if (type == 1) { setCouponList(data) activeViewSuccessContent && activeViewSuccessContent.show() activeViewFailContent && activeViewFailContent.hide() event.eventState = 1 } else { activeViewSuccessContent && activeViewSuccessContent.hide() activeViewFailContent && activeViewFailContent.show() event.eventState = 0 } if (typeof traceFun !== 'undefined') { traceFun.eventReport(event, {}, true); } } function loginSuccess() { localStorage.removeItem("isNewUser"); localStorage.removeItem(`email${advertise.id}`); let flag = isLogin isLogin = true loadFlag = flag !== isLogin } function getCouponsFail() { getCouponsFailFlag = true openSuccess(0) } function getCouponsSuccess(data) { ifJumpList = 1 couponsList = data.coupon_list openSuccess(1, data) } function overallSituationBackEvent(value) { if (document.getElementById('activeViewGet') && getComputedStyle(document.getElementById('activeViewGet')).display === 'block') { var iframeContent = document.getElementById('activeViewGetIframe') iframeContent.contentWindow.postMessage({ event: 'closeUserPage', }) } else { closeActiveEntryMaskAfter(value) } } function closeActiveEntryMaskAfter(value) { history.back() if (value === true || getCouponsFailFlag || loadFlag) { getCouponsFailFlag = false reloadEvent() } } function reloadEvent() { history.replaceState(null, null, ' '); window.location.reload() } function closeActiveEntryMask() { activeEntryModal && activeEntryModal.hide(); activeViewSuccess && activeViewSuccess.hide(); activeViewGet && activeViewGet.hide(); } var addNomral = antiShake(function () { seatImg.addClass("nomral"); }, 2000); function antiShake(callback, delay = 500) { var timeout = null; return function () { clearTimeout(timeout); timeout = setTimeout(function() { callback.apply(this, [...arguments]); }, delay); }; } function currencyFormat(number, decimals, dec_point, thousands_sep) { number = (number + '').replace(/[^0-9+-Ee.]/g, ''); var n = !isFinite(+number) ? 0 : +number, prec = !isFinite(+decimals) ? 0 : Math.abs(decimals), sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep, dec = dec_point == '1' ? '.' : ',', s = '', toFixedFix = function (n, prec) { var k = Math.pow(10, prec); return '' + Math.round(n * k) / k; }; s = (prec ? toFixedFix(n, prec) : '' + Math.floor(n)).split('.'); var re = /(-?\d+)(\d{3})/; while (re.test(s[0])) { s[0] = s[0].replace(re, "$1" + sep + "$2"); } if ((s[1] || '').length < prec) { s[1] = s[1] || ''; s[1] += new Array(prec - s[1].length + 1).join('0'); } return s.join(dec); } function initSVGA(_$) { activeCanvas = document.createElement('div') activeCanvas.id = 'activeCanvas' document.body.append(activeCanvas); activeCanvas = _$('#activeCanvas') activeCanvas && activeCanvas.show() if (!window.SVGA) { var script = document.createElement('script'); script.type = 'text/javascript'; script.async = true script.onload = function() { initAnimation() } script.src = 'https://d2d36hyavd3mb7.cloudfront.net/assets/js/svga.min.js'; document.body.appendChild(script); } else { initAnimation() } }

` let priceElement = `

${itemInfo.type === 2?itemInfo.value:currencyFormat(itemInfo.value, 2, data.currency_point, ' ')}

` let couponPercent = `

${itemInfo.coupon_percent}

` let CouponMaxElement = `

${CouponMax}

` let limitAmount = `${currencyFormat(itemInfo.limit_amount, 2, data.currency_point, ' ')}` let stateArray = ['', '', Used, Expired] let item = `

${itemInfo.type === 3?(couponPercent+USDElement + ' ' +CouponMaxElement):(data.currency_position === 1 || itemInfo.type === 2?priceElement+USDElement:USDElement+priceElement)}

${itemInfo.type == 3?(Over+ ' '+itemInfo.limit_num +' '+items):(Over+' '+(data.currency_position === 1?limitAmount+ USD:USD+limitAmount))}

${ValidUntyil} ${(new Date(itemInfo.end_time*1000)).toJSON().substring(0,10)}

${stateArray[itemInfo.state]}

` return item }

' + '

IN

'; } else { html += '

MM

' + '

IN

'; } html += '

Personalised Set of 3 Non-toxicity Waterproof Hearts Temporary Tattoo with 1-5 Names Festival Party Favors Father's Day Gift for Family Couple - CALLIE (2024)
Top Articles
Latest Posts
Article information

Author: Domingo Moore

Last Updated:

Views: 6408

Rating: 4.2 / 5 (53 voted)

Reviews: 84% of readers found this page helpful

Author information

Name: Domingo Moore

Birthday: 1997-05-20

Address: 6485 Kohler Route, Antonioton, VT 77375-0299

Phone: +3213869077934

Job: Sales Analyst

Hobby: Kayaking, Roller skating, Cabaret, Rugby, Homebrewing, Creative writing, amateur radio

Introduction: My name is Domingo Moore, I am a attractive, gorgeous, funny, jolly, spotless, nice, fantastic person who loves writing and wants to share my knowledge and understanding with you.