• BOGO 50% OFF

    Vitamin World Brand

  • BOGO 50% OFF

    ULTRA 360 Multivitamins

  • BOGO 50% OFF

    Vitamin World Gummies

THE DAILY DOSE

Make the most out of your health wellness journey with the daily dose from Vitamin World.

BLOG

Spring: Time to Refresh Your Health & Strengthen Your Immunity

READ MORE

International Women’s Day: Focusing on Female Wellness

READ MORE

Taking GLP-1 Benefits, Uses, and What You Need to Know

READ MORE

NUTRITION FROM THE SOURCE SINCE 1977

Discover the best nutrition the world has to offer at Vitamin World.
Subscribe & Save on Every Order
Earn Wellness Rewards on Every Purchase
Carbon Offset Shipping
Quality You Can Trust

Best Sellers

View more
(function () { const TAG = "spz-custom-discount-popup-bxgy"; class SpzCustomPlacementPopup extends SPZ.BaseElement { constructor(element) { super(element); this.deviceTypeMap = { PD_PC_MOBILE: "PD_PC_MOBILE", PD_PC: "PD_PC", PD_MOBILE: "PD_MOBILE" }; this.reportEventMap = { PE_IMPRESSION: 'PE_IMPRESSION',//曝光事件 PE_CLICK: 'PE_CLICK',//点击事件 } this.popup_z_index = 1050; } static deferredMount() { return false; } buildCallback = () => { this.action_ = SPZServices.actionServiceForDoc(this.element); this.templates_ = SPZServices.templatesForDoc(this.element); this.xhr_ = SPZServices.xhrFor(this.win); this.setupAction_(); this.viewport_ = this.getViewport(); } mountCallback = () => { } // 节流处理 每5s内多次点击 算一次点击上报 throttleReport = this.win.SPZCore.Types.throttle( this.win, (data) => { this.reportData(data) }, 5000 ) // 上报数据 reportData = async(data) => { const reqBody = { placement_id: data.placement_id, event: data.event } this.xhr_.fetchJson(`/api/storefront/promotion/placement/data/report`, { method: "post", body: reqBody }).then((res)=>{ // todo ... }) } doRender_ = (data) => { const popupList = data.popupList || []; if(popupList.length){ // 内容配置 序列化字符转化 popupList.forEach(item => { item.parseConfig = JSON.parse(item.config); }) } return this.templates_ .findAndRenderTemplate(this.element, {popupList}) .then((el) => { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); this.element.appendChild(el); }).then(() =>{ popupList.forEach(item => { // buy x get y 弹窗渲染 this.showPopup(item); }) }) } showPopup = async(itemData) => { // 展示弹窗 符合展示条件的弹窗 const $lightbox_item = document.querySelector(`#popup_bxgy_${itemData.id}`); $lightbox_item && SPZ.whenApiDefined($lightbox_item).then((api)=> { const isPC = this.viewport_.getWidth() >= 768; const isMobile = this.viewport_.getWidth() < 768; const isMatchPCDevice = itemData.device === this.deviceTypeMap.PD_PC_MOBILE || itemData.device === this.deviceTypeMap.PD_PC; const isMatchMobileDevice = itemData.device == this.deviceTypeMap.PD_PC_MOBILE || itemData.device === this.deviceTypeMap.PD_MOBILE; if((isPC && isMatchPCDevice) || (isMobile && isMatchMobileDevice)) { // 根据推送时间 延迟展示弹窗 setTimeout(() => { $lightbox_item.style.zIndex = this.popup_z_index; this.popup_z_index ++; api.open(); }, itemData.delay_seconds * 1000); } }) } setupAction_ = () => { this.registerAction('handleTrack', async(invocation) => { // 如果是主题编辑器则不用处理 if(window.top !== window.self) { return; } const data = invocation.args; const event = data.event; // 点击上报 节流处理 if(event === this.reportEventMap.PE_CLICK) { await this.throttleReport(data); } else { this.reportData(data); } }); this.registerAction('handleLinkto', (invocation) => { const url = invocation.args.url; const isNewOpen = invocation.args.isNewOpen; const target = isNewOpen ? '_blank' : '_self'; if(url) { window.open(url, target); } }); } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, `${ TAG }.${ name }`, data || {}); this.action_.trigger(this.element, name, event); } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } } SPZ.defineElement(TAG, SpzCustomPlacementPopup) })() (function () { const TAG = "spz-custom-discount-placement"; class SpzCustomDiscountPlacement extends SPZ.BaseElement { constructor(element) { super(element); this.placementTypeMap = { PTT_POPUP: "PTT_POPUP", PTT_BANNER: "PTT_BANNER" }; this.placementTemplateMap = { PT_POPUP_BUY_X_GET_Y: "PT_POPUP_BUY_X_GET_Y", PT_BANNER_BUY_X_GET_Y: "PT_BANNER_BUY_X_GET_Y" }; this.progressMap = { PROGRESS_ONGOING: "PROGRESS_ONGOING", PROGRESS_NOT_STARTED: "PROGRESS_NOT_STARTED", PROGRESS_FINISHED: "PROGRESS_FINISHED", PROGRESS_PAUSED: "PROGRESS_PAUSED" }; } static deferredMount() { return false; } buildCallback = () => { this.action_ = SPZServices.actionServiceForDoc(this.element); this.templates_ = SPZServices.templatesForDoc(this.element); this.xhr_ = SPZServices.xhrFor(this.win); this.setupAction_(); this.viewport_ = this.getViewport(); } mountCallback = () => { this.handlePlacement(); } // 上报数据 reportData = async(data) => { const reqBody = { placement_id: data.placement_id, event: data.event } const url = `/api/storefront/promotion/placement/data/report`; this.xhr_.fetchJson(url, { method: "post", body: reqBody }).then((res)=>{ // todo ... }) } // 资源位数据获取 getplacementList = async() => { const reqBody = { page_id: window.SHOPLAZZA.meta.page.template_type } const url = `/api/storefront/promotion/placement/list` const data = await this.xhr_.fetchJson(url, { method: "post", body: reqBody }) return data; } handlePlacement = async() => { const res = await this.getplacementList(); const BXGYPopupList = res.list.filter(item => (item.placement_type == this.placementTypeMap.PTT_POPUP && item.placement_template == this.placementTemplateMap.PT_POPUP_BUY_X_GET_Y)); if(BXGYPopupList.length) { const $spz_custom_popup_bxgy = document.querySelector('#spz_custom_popup_bxgy'); SPZ.whenApiDefined($spz_custom_popup_bxgy).then((api)=> { api.doRender_({popupList: BXGYPopupList}); }) } } doRender_ = (data) => { const renderData = data || {}; return this.templates_ .findAndRenderTemplate(this.element, renderData) .then((el) => { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); this.element.appendChild(el); }) } setupAction_ = () => { this.registerAction('handleTrack', (invocation) => { const data = invocation.args; this.reportData(data) }); } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, `${ TAG }.${ name }`, data || {}); this.action_.trigger(this.element, name, event); } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } } SPZ.defineElement(TAG, SpzCustomDiscountPlacement) })()