Slider with the hover effect in home page

Slider with the hover effect in home page without using any inbuilt carousal or slider library making with the help of events and ,html and CSS ,the image and hover image should be configurable
js code:


define(
	'JJ.HomePagePersonalization.HomePagePersonalization'
,   [
	'Home.View','jj_homepagepersonalization_homepagepersonalization.tpl'
	]
,   function (
	HomeView,jj_homepagepersonalization_homepagepersonalization_tpl
	)
{
	'use strict';

	return  {
		mountToApp: function mountToApp (container)
		{
			_.extend(HomeView.prototype, {
				template: jj_homepagepersonalization_homepagepersonalization_tpl,
				initialize: _.wrap(HomeView.prototype.initialize, function initialize(fn) {
					try {
						//extended HomeView initialize for the best seller slider and new arrival slider functionality
						let self = this;
						fn.apply(this, _.toArray(arguments).slice(1));
						self.bestSellerSlide = 1;
						self.bestSellerTotalSlide = SC.CONFIGURATION.HomePagePersonalization && SC.CONFIGURATION.HomePagePersonalization.bestseller ? SC.CONFIGURATION.HomePagePersonalization.bestseller.length : 0;
						self.bestSellerSliders = SC.CONFIGURATION.HomePagePersonalization && SC.CONFIGURATION.HomePagePersonalization.bestseller ? SC.CONFIGURATION.HomePagePersonalization.bestseller : [];
						self.bestSellerSlidersExtra = SC.CONFIGURATION.HomePagePersonalization && SC.CONFIGURATION.HomePagePersonalization.bestseller ? SC.CONFIGURATION.HomePagePersonalization.bestseller.slice(0, 3) : [];
						self.windowWidth = window.innerWidth;
						if (self.windowWidth > 768) {
							self.bestSellerMaxSliders = 4;
						}else if (self.windowWidth <= 768 && self.windowWidth > 480) {
							self.bestSellerMaxSliders = 3;
						} else {
							self.bestSellerMaxSliders = 2;
						}
						self.bestSellerSliderWidth = self.windowWidth * 0.95/ self.bestSellerMaxSliders;
						self.bestSellerContainer = self.bestSellerSliderWidth * (self.bestSellerTotalSlide + self.bestSellerMaxSliders -1);
						window.addEventListener("resize", function () {
							self.windowWidth = window.innerWidth;
							if (self.windowWidth > 768) {
								self.bestSellerMaxSliders = 4;
							}else if (self.windowWidth <= 768 && self.windowWidth > 480) {
								self.bestSellerMaxSliders = 3;
							} else {
								self.bestSellerMaxSliders = 2;
							}
							self.bestSellerSliderWidth = self.windowWidth * 0.95/ self.bestSellerMaxSliders;
							self.bestSellerContainer = self.bestSellerSliderWidth * (self.bestSellerTotalSlide + self.bestSellerMaxSliders -1);
							self.render();
							document.getElementById('bestseller-previous').style.transform = 'translateY(' + -(document.getElementsByClassName('best-seller-card') ? document.getElementsByClassName('best-seller-card')[0].offsetHeight / 2 + 20 : '') + 'px)';
							document.getElementById('bestseller-next').style.transform = 'rotate(180deg) translateY(' + (document.getElementsByClassName('best-seller-card') ? document.getElementsByClassName('best-seller-card')[0].offsetHeight / 2 + 20 : '') + 'px)';
							document.getElementById('best-seller-card-container').style.transform = 'translateX(' + -((self.bestSellerSliderWidth + 5) * (self.bestSellerSlide - 1)) + 'px)';
						});
						this.on('afterViewRender', function () {
							_.defer(function () {
								document.getElementById('bestseller-previous').style.transform = 'translateY(' + -(document.getElementsByClassName('best-seller-card') ? document.getElementsByClassName('best-seller-card')[0].offsetHeight / 2 + 20 : '') + 'px)';
								document.getElementById('bestseller-next').style.transform = 'rotate(180deg) translateY(' + (document.getElementsByClassName('best-seller-card') ? document.getElementsByClassName('best-seller-card') ? document.getElementsByClassName('best-seller-card')[0].offsetHeight / 2 + 20 : '' : '') + 'px)';
							})
						})
						self.newArrivalSlide = 1;
						self.newArrivalTotalSlide = SC.CONFIGURATION.HomePagePersonalization && SC.CONFIGURATION.HomePagePersonalization.config ?SC.CONFIGURATION.HomePagePersonalization.config.length : 0;
						self.newArrivalSliders = SC.CONFIGURATION.HomePagePersonalization && SC.CONFIGURATION.HomePagePersonalization.config ? SC.CONFIGURATION.HomePagePersonalization.config : [];
						self.newArrivalSlidersExtra = SC.CONFIGURATION.HomePagePersonalization && SC.CONFIGURATION.HomePagePersonalization.config ? SC.CONFIGURATION.HomePagePersonalization.config.slice(0, 3) : [];
						self.windowWidth = window.innerWidth;
						self.shopBlvdWidth = 8 * (0.95 * this.windowWidth / 6);
						if (self.windowWidth > 768) {
							self.newArrivalMaxSliders = 4;
						}else if (self.windowWidth <= 768 && self.windowWidth > 480) {
							self.newArrivalMaxSliders = 3;
						} else {
							self.newArrivalMaxSliders = 2;
						}
						self.newArrivalSliderWidth = self.windowWidth * 0.95/ self.newArrivalMaxSliders;
						self.newArrivalContainer = self.newArrivalSliderWidth * (self.newArrivalTotalSlide + self.newArrivalMaxSliders -1);
						window.addEventListener("resize", function () {
							self.windowWidth = window.innerWidth;
							if (self.windowWidth > 768) {
								self.newArrivalMaxSliders = 4;
							}else if (self.windowWidth <= 768 && self.windowWidth > 480) {
								self.newArrivalMaxSliders = 3;
							} else {
								self.newArrivalMaxSliders = 2;
							}
							self.newArrivalSliderWidth = self.windowWidth * 0.95/ self.newArrivalMaxSliders;
							self.newArrivalContainer = self.newArrivalSliderWidth * (self.newArrivalTotalSlide + self.newArrivalMaxSliders -1);
							self.render();
							document.getElementById('new-arrival-previous').style.transform = 'translateY(' + -(document.getElementsByClassName('new-arrival-card') ? document.getElementsByClassName('new-arrival-card')[0].offsetHeight / 2 + 20:'') + 'px)';
							document.getElementById('new-arrival-next').style.transform = 'rotate(180deg) translateY(' + (document.getElementsByClassName('new-arrival-card') ? document.getElementsByClassName('new-arrival-card')[0].offsetHeight / 2 + 20:'') + 'px)';
							document.getElementById('new-arrival-card-container').style.transform = 'translateX(' + -((self.newArrivalSliderWidth + 5) * (self.newArrivalSlide - 1)) + 'px)';
							document.getElementsByClassName('blvd-shop-feed')[0].style.width = ($('.blvd-feed-card')[0].offsetWidth * $('.blvd-feed-card').length) + 'px';
						});
						this.on('afterViewRender', function () {
							_.defer(function () {
								document.getElementById('new-arrival-previous').style.transform = 'translateY(' + -(document.getElementsByClassName('new-arrival-card') ? document.getElementsByClassName('new-arrival-card')[0].offsetHeight / 2 + 20:'') + 'px)';
								document.getElementById('new-arrival-next').style.transform = 'rotate(180deg) translateY(' + (document.getElementsByClassName('new-arrival-card') ? document.getElementsByClassName('new-arrival-card') ? document.getElementsByClassName('new-arrival-card')[0].offsetHeight / 2 + 20: '' : '') + 'px)';
							})
						})
						
					} catch (e) {
						console.error('Error @ HomeView initialize', e);
					}
				}),
				events: _.extend({}, HomeView.prototype.events, {
					'click [data-action="show-Prev-Slide-New-Arrival"]': 'showPrevNewArrival',
					'click [data-action="show-next-Slide-New-Arrival"]': 'showNextNewArrival',
					'click [data-action="show-Prev-Slide"]': 'showPrevBestSeller',
					'click [data-action="show-next-Slide"]': 'showNextBestSeller',
					'mouseenter [data-action="changeCurrentImage"]': 'toggleImage',
					'mouseleave [data-action="changeCurrentImage"]': 'toggleImage',
					'click #next-blvd-scroller': 'showNextBlvdFeed',
					'click #prevs-blvd-scroller': 'showPrevBlvdFeed',
					'click [data-action="show-slider-popup"]': 'showSliderPopup',
					'click .close-btn-container': 'hideSliderPopup',
					
				}),
				//showPrevNewArrival function is used for New arrival next slider
				showPrevNewArrival: function (e) {
					try {
						if (this.newArrivalSlide === 1) {
							document.getElementById('new-arrival-card-container').style.transform = 'translateX(' + -((this.newArrivalSliderWidth + 5) * (this.newArrivalTotalSlide - 1)) + 'px)';
							this.newArrivalSlide = this.newArrivalTotalSlide;
						} else {
							this.newArrivalSlide--;
							document.getElementById('new-arrival-card-container').style.transform = 'translateX(' + -((this.newArrivalSliderWidth + 5) * (this.newArrivalSlide - 1)) + 'px)';
						}
					} catch (e) {
						console.error('Error @ HomeView Prev bestSeller', e);
					}
				},
				//showNextNewArrival function is used for New arrival next slider
				showNextNewArrival: function (e) {
					try {
						if (this.newArrivalSlide === this.newArrivalTotalSlide) {
							document.getElementById('new-arrival-card-container').style.transform = 'translateX(0px)';
							this.newArrivalSlide = 1;
						} else {
							document.getElementById('new-arrival-card-container').style.transform = 'translateX(' + -((this.newArrivalSliderWidth + 5) * this.newArrivalSlide) + 'px)';
	            			console.log("TEST 123 @ file: JJ.HomePagePersonalization.HomePagePersonalization.js @ var: (this.newArrivalSliderWidth * this.newArrivalSlide)", (this.newArrivalSliderWidth * this.newArrivalSlide))
							this.newArrivalSlide++;
						}
					} catch (e) {
						console.error('Error @ HomeView showBest Seller', e);
					}
				},
				//showPrevBestSeller function is used for Best seller next slider
				showPrevBestSeller: function (e) {
					try {
						if (this.bestSellerSlide === 1) {
							document.getElementById('best-seller-card-container').style.transform = 'translateX(' + -((this.bestSellerSliderWidth + 5) * (this.bestSellerTotalSlide - 1)) + 'px)';
							this.bestSellerSlide = this.bestSellerTotalSlide;
						} else {
							this.bestSellerSlide--;
							document.getElementById('best-seller-card-container').style.transform = 'translateX(' + -((this.bestSellerSliderWidth + 5) * (this.bestSellerSlide - 1)) + 'px)';
						}
					} catch (e) {
						console.error('Error @ HomeView Prev bestSeller', e);
					}
				},
				//showNextBestSeller function is used for Best seller previous slider
				showNextBestSeller: function (e) {
					try {
						if (this.bestSellerSlide === this.bestSellerTotalSlide) {
							document.getElementById('best-seller-card-container').style.transform = 'translateX(0px)';
							this.bestSellerSlide = 1;
						} else {
							document.getElementById('best-seller-card-container').style.transform = 'translateX(' + -((this.bestSellerSliderWidth + 5) * this.bestSellerSlide) + 'px)';
	            console.log("TEST 123 @ file: JJ.HomePagePersonalization.HomePagePersonalization.js @ var: (this.bestSellerSliderWidth * this.bestSellerSlide)", (this.bestSellerSliderWidth * this.bestSellerSlide))
							this.bestSellerSlide++;
						}
					} catch (e) {
						console.error('Error @ HomeView showBest Seller', e);
					}
				},
				//toggleImage function is used for Best seller image toggle.
				toggleImage: function (e) {
					try {
						$(e.currentTarget).toggleClass("show-second");
					} catch (e) {
						console.error('Error @ HomeView toggleImage', e);
					}
				},
				//function for BLVD slider next button
				showNextBlvdFeed: function (e) {
				},
				//function for BLVD slider Previous button
				showPrevBlvdFeed: function (e) {
				},
				//function for dispalying the Slider Popup under the BLVD section
				showSliderPopup: function (e) {
					let currentPopUp = e.currentTarget.childNodes[0].childNodes[0].alt;
					let popUpData = _.filter(SC.CONFIGURATION.homepage.shopblvd.Links, function (linkData) {
						return linkData.itemnames === currentPopUp;
					});
					$('.left-hand-side-producr-img').attr('src', popUpData[0].popupimage);
					$('.background-blur').css('background-image', 'url(' + popUpData[0].popupimage + ')');
					$('.left-hand-side-producr-img').attr('alt', popUpData[0].itemnames);
					$('.right-hand-side-producr-img').attr('src', popUpData[0].itemimage);
					$('.right-hand-side-producr-img').attr('alt', popUpData[0].itemnames);
					$('.product-by-link').attr('href', popUpData[0].buybutton);
					$('.product-name-container').text( popUpData[0].itemnames);
					$('#popup-scroller-inmodel-container').addClass('active');
					let imageContainerHeight = $('#popup-left-hand-side')[0].offsetHeight;
					$('.lower-container').css('height', imageContainerHeight + 'px');
				},
				//function for hiding the Slider Popup under the BLVD section
				hideSliderPopup: function (e) {
					$(".left-hand-side-producr-img").removeAttr("src");
					$(".left-hand-side-producr-img").removeAttr("alt");
					$(".right-hand-side-producr-img").removeAttr("src");
					$(".right-hand-side-producr-img").removeAttr("alt");
					$('.background-blur').css('background', '');
					$(".product-by-link").removeAttr("href");
					$(".product-name-container").text("");
					$("#popup-scroller-inmodel-container").removeClass("active");
				},
				
				getContext: _.wrap(HomeView.prototype.getContext, function (fn) {
					let original_Ret = fn.apply(this, _.toArray(arguments).slice(1));
					try {
						var goodThingsImage=SC.CONFIGURATION.homepage.goodThings.Links[0];
						original_Ret.goodThingsImage = goodThingsImage;
						var youNewGoToImage = SC.CONFIGURATION.homepage.yourNewGoTo.Links[0].younewgotoImage;
						original_Ret.youNewGoToImage = youNewGoToImage;
						var youNewGoToHeader = SC.CONFIGURATION.homepage.yourNewGoTo.Links[0].younewgotoheader;
						original_Ret.youNewGoToHeader = youNewGoToHeader;
						var youNewGoToLink = SC.CONFIGURATION.homepage.yourNewGoTo.Links[0].younewgotolink;
						original_Ret.youNewGoToLink = youNewGoToLink;
						var youNewGoToText = SC.CONFIGURATION.homepage.yourNewGoTo.Links[0].younewgototext;	
						original_Ret.youNewGoToText = youNewGoToText;
						original_Ret.bestSellerContainer = this.bestSellerContainer + 'px';
						original_Ret.bestSellerSliderWidth = this.bestSellerSliderWidth + 'px';
						original_Ret.isNotDesktop = window.innerWidth > 768 ? false : true;
						original_Ret.bestSellerURL = SC.CONFIGURATION.HomePagePersonalization && SC.CONFIGURATION.HomePagePersonalization.bestsellerURL ? SC.CONFIGURATION.HomePagePersonalization.bestsellerURL : '';
						_.each(this.bestSellerSliders, (slide) => {
							slide.bestSellerSliderWidth = original_Ret.bestSellerSliderWidth;
						})
						_.each(this.bestSellerSlidersExtra, (slide) => {
							slide.bestSellerSliderWidth = original_Ret.bestSellerSliderWidth;
						})
						original_Ret.bestSellerSliders = this.bestSellerSliders;
						original_Ret.bestSellerSlidersExtra = this.bestSellerSlidersExtra;
						original_Ret.newArrivalContainer = this.newArrivalContainer + 'px';	
						original_Ret.newArrivalSliderWidth = this.newArrivalSliderWidth + 'px';
						original_Ret.isNotDesktop = window.innerWidth > 768 ? false : true;
						original_Ret.newArrivalURL = SC.CONFIGURATION.HomePagePersonalization && SC.CONFIGURATION.HomePagePersonalization.newarrivalURL ? SC.CONFIGURATION.HomePagePersonalization.newarrivalURL : '';
						_.each(this.newArrivalSliders, (slide) => {
							slide.newArrivalSliderWidth = original_Ret.newArrivalSliderWidth;
						})
						_.each(this.newArrivalSlidersExtra, (slide) => {
							slide.newArrivalSliderWidth = original_Ret.newArrivalSliderWidth;
						})
						original_Ret.newArrivalSliders = this.newArrivalSliders;
						original_Ret.newArrivalSlidersExtra = this.newArrivalSlidersExtra;
						original_Ret.blvdSliderFeed = SC.CONFIGURATION.homepage.shopblvd.Links;
						original_Ret.shopBlvdWidth = this.shopBlvdWidth;
					} catch (e) {
						console.error('Error @ HomeView getContext', e);
					}
					return original_Ret;
				})
			})
		}
	};
});

css code:

.new-arrival-cards {
  width: 96%;
  position: relative;
  overflow: hidden;
  margin: auto;
  margin-top: 25px;
}
#new-arrival-card-container {
  height: 100%;
  list-style: none;
  left: 0;
  margin: 0;
  padding: 0;
  position: relative;
  transition: all 0.75s ease;
  gap: 5px;
  display: flex;
}
.new-arrival-image-container .new-arrival-card-hover-image {
  display: none;
}
.new-arrival-image-container.show-second .new-arrival-card-hover-image {
  display: block;
}
.new-arrival-image-container.show-second .new-arrival-card-image {
  display: none;
}
.new-arrival-header-container {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  width: 96%;
  margin: auto;
}
#new-arrival-nav-icons {
  display: flex;
  width: 100%;
  left: 0;
  margin: auto;
  justify-content: space-between;
  position: relative;
}
.new-arrival-header-text {
  color: #050505;
  font-family: "Bossa-black";
  font-size: 2.667rem;
  font-weight: 700;
  text-decoration: none;
  line-height: 1.2;
  padding: 0;
  margin: 0;
  margin-left: 10px;
  text-transform: none;
}
#new-arrival-nav-icons div img {
  z-index: 5;
  position: relative;
  cursor: pointer;
}
#new-arrival-prev-img {
  margin: auto 0;
}
#new-arrival-previous {
  position: relative;
}
#new-arrival-next {
  z-index: 5;
  margin: auto 0;
  position: relative;
  transform: rotate(180deg) translateY(113px);
}
.new-arrival-text-container {
  text-align: center;
  font-family: "Gilroy-Bold";
  font-size: 20px;
  @media (min-width:$screen-xs){
    font-size: 17px;
  }
}
#new-arrival-card-container,
.new-arrival-card {
  transition: width linear 0.1s;
}
.new-arrival-image-container img {
  width: 90%;
  margin: auto;
  display: flex;
  object-fit: contain;
  max-height: fit-content;
  position: relative;
  aspect-ratio: 1;
  @media (max-width:$screen-md) {
    width:  21vw;
  }
}

html:

<section class="new-arrival-prodect">
		<div class="new-arrival-prodect-feed">
			<div class="new-arrival-header-container"><a href="{{newArrivalURL}}"><h1 class="new-arrival-header-text">NEW ARRIVALS</h1></a></div>
			<div class="new-arrival-cards">
				<div id="new-arrival-card-container" style="width: {{newArrivalContainer}};">
					{{#each newArrivalSliders}}
						<div class="new-arrival-card" style="width: {{newArrivalSliderWidth}}; min-width: {{newArrivalSliderWidth}}; max-width: {{newArrivalSliderWidth}};">
							<a href="{{url}}">
								<div class="new-arrival-image-container" data-action="changeCurrentImage">
									<img src="{{image}}" alt="{{Itemname}}" class="new-arrival-card-image">
									<img src="{{hoverimage}}" alt="{{Itemname}}" class="new-arrival-card-hover-image">
								</div>
							</a>
							<div class="new-arrival-text-container">{{Itemname}}</div>
						</div>
					{{/each}}
					{{#each newArrivalSlidersExtra}}
						<div class="new-arrival-card" style="width: {{newArrivalSliderWidth}}; min-width: {{newArrivalSliderWidth}}; max-width: {{newArrivalSliderWidth}};">
							<a href="{{url}}">
								<div class="new-arrival-image-container" data-action="changeCurrentImage">
									<img src="{{image}}" alt="{{Itemname}}" class="new-arrival-card-image">
									<img src="{{hoverimage}}" alt="{{Itemname}}" class="new-arrival-card-hover-image">
								</div>
							</a>
							<div class="new-arrival-text-container">{{Itemname}}</div>
						</div>
					{{/each}}
				</div>
			</div>
			<div id="new-arrival-nav-icons">
				<div id="new-arrival-previous">
					<img src="/iloveblvdimages/Best-slider-arrow.png" alt="" data-action="show-Prev-Slide-New-Arrival" id="new-arrival-prev-img">
				</div>
				<div id="new-arrival-next">
					<img src="/iloveblvdimages/Best-slider-arrow.png" alt="" data-action="show-next-Slide-New-Arrival" id="new-arrival-next-img">
				</div>
			</div>
		</div>
	</section>

configuration code:

{
    "type": "object",
    "group": {
        "id": "homepage",
        "title": "Homepage",
        "description": "Homepage setup"
    },
    "subtab": {
        "id": "newarrival",
        "title": "New Arrival",
        "description": "New Seller section",
        "group": "homepage"
    },
    "properties": { 
        "HomePagePersonalization.newarrivalURL": {
            "group": "homepage",
            "subtab": "newarrival",
            "type": "string",
            "title": "New Arrival URL",
            "description": "New Arrival URL section"
        },
        "HomePagePersonalization.config": {
            "group": "homepage",
            "subtab": "newarrival",
            "type": "array",
            "title": "New Arrival",
            "description": "new arrival  section",
            "items": {
                "type": "object",
                "properties": {
                    "Itemname": {
                        "type": "string",
                        "title": "Item Name",
                        "description": ""
                    },
                    "image": {
                        "type": "string",
                        "title": "Image",
                        "description": ""
                    },
                    "hoverimage": {
                        "type": "string",
                        "title": "Hover Image",
                        "description": ""
                    },
                    "link": {
                        "type": "string",
                        "title": "Link",
                        "description": ""
                    }
                }
            }
        }
    }
}

Leave a comment

Your email address will not be published. Required fields are marked *