Product Description
/**
* Common event handler for click and keydown events.
* @param {Event} event - The event object.
* @param {Function} handleClickOrEnter - Function to handle click or Enter key events.
* @param {Function} handleEsc - Function to handle Esc key events.
*/
// [TODO][AplusMantle-8064] Create common event handler util(key events, click events) in AplusModuleResources
function handleClickAndKeyEvents(event, handleClickOrEnterOrSpace) {
const ENTER_KEY_CODE = 13;
const ESCAPE_KEY_CODE = 27;
const SPACE_KEY_CODE = 32;
const isClick = event.type === 'click';
const isKeydown = event.type === 'keydown';
const isEnter = isKeydown && event.keyCode === ENTER_KEY_CODE;
const isSpace = isKeydown && event.keyCode === SPACE_KEY_CODE;
const isEsc = isKeydown && event.keyCode === ESCAPE_KEY_CODE;
if (isClick || isEnter || isSpace) {
handleClickOrEnterOrSpace();
} else if (isEsc) {
handleEsc(event);
}
}
/**
* Function to handle esc key event.
* @param {Event} event - The event object.
*/
function handleEsc(event) {
event.target.blur() // force remove focus
}
(function(f) {var _np=(window.P._namespace("PremiumAplusModule"));if(_np.guardFatal){_np.guardFatal(f)(_np);}else{f(_np);}}(function(P) {
P.now('premium-module-11-faq').execute(function(init) {
if (init) {
return;
}
P.register('premium-module-11-faq', function() {
return function() {
P.when('A', 'jQuery', 'ready').execute(function(A, $){
function initFaq(module) {
const MODULE_CLASS_NAME = 'premium-aplus-module-11';
const FAQ_CONTAINER_CLASS_NAME = 'faqs-container';
const FAQ_BLOCK_CLASS_NAME = 'faq-block';
const moduleId = $(module).data('faq-block');
const $faqBlocks = $('.aplus-v2 .' + MODULE_CLASS_NAME + ' .' + FAQ_CONTAINER_CLASS_NAME + '.' + moduleId + ' .' + FAQ_BLOCK_CLASS_NAME);
/**
* Function to handle click or Enter or Space key events.
* @param {Element} element - The this object from which the event is dispatched
* @param {faqBlocks} faqBlocks - List of all the Question and Answer blocks.
*/
function handleClickOrEnterOrSpace(element, faqBlocks) {
const $element = $(element);
const isActive = $element.hasClass('aplus-active');
faqBlocks.removeClass('aplus-active');
faqBlocks.find('[data-faq-question]').attr('aria-expanded', 'false');
if (!isActive) {
$element.addClass('aplus-active');
$element.find('[data-faq-question]').attr('aria-expanded', 'true');
}
}
/* Using jQuery event namespace for preventing duplicate binding on twister refresh */
$faqBlocks.unbind('click keydown.premiumAplusModule11ClickHandler').bind('click keydown.premiumAplusModule11ClickHandler', function(event) {
handleClickAndKeyEvents(event, () => handleClickOrEnterOrSpace(this, $faqBlocks));
});
}
$(".aplus-v2 .premium-aplus-module-11 .faqs-container").each(function(index, module) {
initFaq(module);
});
});
};
});
});
}));
(function(f) {var _np=(window.P._namespace("PremiumAplusModule"));if(_np.guardFatal){_np.guardFatal(f)(_np);}else{f(_np);}}(function(P) {
P.now('premium-module-12-nav-carousel').execute(function(init) {
if (init) {
return;
}
P.register('premium-module-12-nav-carousel', function(){
return function() {
P.when('A', 'jQuery', 'a-carousel-framework', 'ready').execute(function (A, $, framework) {
function initiateCarousel(module) {
var MODULE_ID = $(module).data('module-id');
/**
* Carousel button element classname
* @const
*/
var GOTO_BTN_CLASS_NAME = "aplus-goto-btn-" + MODULE_ID;
/**
* Carousel button element active classname
* @const
*/
var GOTO_BTN_ACTIVE_CLASS_NAME = "aplus-active";
/**
* AUI name for aui carousel
* @const
*/
var CAROUSEL_NAME = "premium-aplus-12-carousel-" + MODULE_ID;
/**
* Module class name
* @const
*/
var MODULE_CLASS_NAME = ".aplus-v2 .premium-aplus-module-12";
/**
* Carousel text container class name
* @const
*/
var TEXT_CONTAINER_CLASS_NAME = MODULE_CLASS_NAME + " .aplus-carousel-text-container-" + MODULE_ID;
/**
* Carousel text hidden class name
* @const
*/
var TEXT_CONTAINER_HIDDEN = "aplus-hidden";
/**
* Carousel horizontal scroll container class name
* @const
*/
var HORIZONTAL_SCROLL_CONTAINER_CLASS_NAME = MODULE_CLASS_NAME + " .aplus-horizontal-scroll-container-" + MODULE_ID;
function showCarouselText(oldIndex, newIndex) {
var oldClass = TEXT_CONTAINER_CLASS_NAME + "-" + oldIndex;
var newClass= TEXT_CONTAINER_CLASS_NAME + "-" + newIndex;
$(oldClass).addClass(TEXT_CONTAINER_HIDDEN);
$(newClass).removeClass(TEXT_CONTAINER_HIDDEN);
}
function scrollToCarouselButton(scrollLeft) {
if ($(HORIZONTAL_SCROLL_CONTAINER_CLASS_NAME).length) {
$(HORIZONTAL_SCROLL_CONTAINER_CLASS_NAME).animate({scrollLeft}, 200);
}
}
/**
* Creates a CarouselButton class for provided carousel instance
* @param {object} carousel - AUI Carousel instance
* @returns {Class} - CarouselButton Class
*/
function CarouselButtonTemplate(carousel) {
/**
* Button for controlling the active slide
* @constructor
* @param {number} index - slide index
* @param {DOMElement} [elem] - optional DOM element to use as this objects DOM representation
*/
function CarouselButton(index, elem) {
var self = this;
this.index = index;
this.carousel = carousel;
/* create the button element */
this.elem = this.getElem(elem);
this.$elem = $(this.elem); /* store jquery version */
this.elem.addEventListener('click', self.handleClick.bind(self));
this.elem.setAttribute('role', 'tab');
/* add this object to the object manager */
CarouselButton.objects.byId[index] = this;
CarouselButton.objects.all.push(this);
}
/**
* Describe behavior for click events on this.elem
* @memberOf CarouselButton
*/
CarouselButton.prototype.handleClick = function(e) {
e.preventDefault();
this.carousel.gotoPage(this.index);
};
/**
* Enter active state
* @memberOf CarouselButton
*/
CarouselButton.prototype.activate = function() {
this.$elem.addClass(GOTO_BTN_ACTIVE_CLASS_NAME).attr('aria-selected', 'true');
};
/**
* Enter inactive state
* @memberOf CarouselButton
*/
CarouselButton.prototype.deactivate = function() {
this.$elem.removeClass(GOTO_BTN_ACTIVE_CLASS_NAME).attr('aria-selected', 'false');
};
/**
* Returns an existing or creates a new bound element for this object
* @memberOf CarouselButton
* @param {DOMElement} [elem] - optionally provide an existing element in the DOM to use
* @returns {DOMElement} - this objects DOM representation
*/
CarouselButton.prototype.getElem = function(elem) {
if (this.elem) return this.elem;
if (elem) return elem;
var createdElem = document.createElement('span');
createdElem.className = GOTO_BTN_CLASS_NAME;
return createdElem;
};
/** @const Object manager */
CarouselButton.objects = {
byId: {},
all: [],
};
return CarouselButton;
}
framework.onInit(CAROUSEL_NAME, function(carousel) {
/** @const {Class} */
var CarouselButton = CarouselButtonTemplate(carousel);
/* create carousel controls */
var $carouselBtns = $(safeClassSelector(GOTO_BTN_CLASS_NAME));
var btns = $carouselBtns.map(function(i, btnElem) {
return new CarouselButton(i + 1, btnElem);
});
/* activate first one */
CarouselButton.objects.byId[1].activate();
/* Listen to slide changes */
A.on("a:carousel:" + CAROUSEL_NAME + ":change:pageNumber", function (data) {
var newCarouselButton = CarouselButton.objects.byId[data.newValue];
var marginLeft = parseInt(getComputedStyle(newCarouselButton.elem).getPropertyValue('margin-left'));
var positionLeft = newCarouselButton.elem.offsetLeft - marginLeft;
newCarouselButton.activate();
CarouselButton.objects.byId[data.oldValue].deactivate();
scrollToCarouselButton(positionLeft);
showCarouselText(data.oldValue, data.newValue);
});
});
/**
* @returns {string} - css classname prefixed with module selector
*/
function safeClassSelector(className) {
return '.' + MODULE_CLASS_NAME + ' .' + className;
}
}
$('.aplus-v2 .premium-aplus-module-12 .aplus-carousel-container').each(function (index, module) {
initiateCarousel(module);
});
framework.createAll();
framework.initializeAll();
});
}
})
});
}));
Previous page
Next page
1 Easy to use 2 How to use
(function(f) {var _np=(window.P._namespace("PremiumAplusModule"));if(_np.guardFatal){_np.guardFatal(f)(_np);}else{f(_np);}}(function(P) {
P.when('premium-module-12-nav-carousel').execute(function(init){
init();
});
}));
Previous page
Next page
1 FOR MATURE SKIN 2 NOURISH & HYDRATE 3 BENEFITS OF RETINOL 4 DEEP MOISTURE
(function(f) {var _np=(window.P._namespace("PremiumAplusModule"));if(_np.guardFatal){_np.guardFatal(f)(_np);}else{f(_np);}}(function(P) {
P.when('premium-module-12-nav-carousel').execute(function(init){
init();
});
}));
What precautions should beginners take when using retinol?
Always do a patch test on your inner arm for 24 hours to check for irritation. Avoid the eye area. Use SPF 30+ daily, and consult a dermatologist before use. Do not use if you have any skin concerns.
What is a patch test, and how do I perform it?
A patch test helps detect allergies. Apply a small amount of product to your inner forearm and wait 24 hours. If no redness or irritation occurs, it’s safe to use on your face.
Can I use SimplyVital Face Moisturizer if I have sensitive or dry skin?
Individual intolerance may occur. Consult with your dermatologist. Start slowly, 1-2 times a week, then gradually increase. Always do a patch test before use. Stop if irritation or redness occurs.
How soon can I expect to see results?
Results vary, but most users see improvements in skin texture and appearance within 4-6 weeks of consistent use.
I can't understand how to use the jar, how to get the cream from the pump?
Remove the clear lid from the jar, gently press down on the white pump. If no cream appears, press a few times. This design keeps the cream fresh by limiting air exposure.
(function(f) {var _np=(window.P._namespace("PremiumAplusModule"));if(_np.guardFatal){_np.guardFatal(f)(_np);}else{f(_np);}}(function(P) {
P.when('premium-module-11-faq').execute(function(init){
init();
});
}));
Nourishing Face Moisturizer — Enhance your anti-aging skincare routine with this moisturizing face cream, designed to help your skin feel smooth and refreshed. Collagen supports skin's flexibility while promoting a firmer texture for both face and neck. Enjoy a youthful glow with a gentle solution that provides enduring hydration and care.
How to Use - Apply a small amount to clean, dry skin, massaging until absorbed. Start 1-2 times a week for sensitive skin, then increase as needed. Use daily for optimal results. Always apply SPF 30+ during the day, as retinol may heighten sun sensitivity. Perform a patch test before initial use. Consult a dermatologist before use. Individual sensitivity to components is possible.
Advanced Retinol Face Cream – Formulated with a balanced concentration of retinol, this moisturizer encourages skin renewal for a smoother, refreshed appearance. Hyaluronic acid complements retinol to help maintain hydration, leaving skin feeling soft and nourished without tightness. Perfect for a well-rounded skincare routine.
Proudly Made in the USA – SimplyVital guarantees exceptional quality in each jar. We carefully select effective yet gentle components to create potent formulas, ensuring your skin gets the attention it deserves while enhancing your natural elegance. All our products are crafted in the USA, adhering to the highest manufacturing standards.
› See more product details
Brand
SimplyVital
Item Volume
1.7 Fluid Ounces
Item dimensions L x W x H
2.28 x 2.28 x 3.03 inches
Age Range (Description)
Adult
Special Feature
Natural Ingredients