I am making a website in which i am going to use Horizontal Scroll
.
I am using jQuery.nicescroll
for smooth scrolling.
$(function() {
var scroll = $(window).scrollLeft();
if (scroll >= 0) {
$('#animateBtn').click(function(){
$('.section-parent').addClass('half');
// Smooth Scroll
$('#js-slideContainer').niceScroll({
cursorwidth: "0px",
cursorborder: "5px solid transparent",
scrollspeed: 260,
smoothscroll: true
});
});
}
// Custom Cursor
var follower, init, mouseX, mouseY, positionElement, printout, timer;
follower = document.getElementById('follower');
printout = document.getElementById('printout');
mouseX = (function(_this) {
return function(event) {
return event.clientX;
};
})(this);
mouseY = (function(_this) {
return function(event) {
return event.clientY;
};
})(this);
positionElement = (function(_this) {
return function(event) {
var mouse;
mouse = {
x: mouseX(event),
y: mouseY(event)
};
follower.style.top = mouse.y + 'px';
return follower.style.left = mouse.x + 'px';
};
})(this);
timer = false;
window.onmousemove = init = (function(_this) {
return function(event) {
var _event;
_event = event;
return timer = setTimeout(function() {
return positionElement(_event);
}, 1);
};
})(this);
});
* {
box-sizing: border-box;
}
html, body {
height: 100%;
width: 100%;
}
body {
padding: 100px;
margin: 0;
background: #e2e1dc;
}
::-webkit-scrollbar {
display: none;
}
.card {
display: flex;
flex-wrap: nowrap;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.section-parent {
width: 87.5vw;
height: calc(100vh - 12.5vw);
margin-right: 6.25vw;
margin-bottom: 0;
transition: width 1.6s cubic-bezier(.73,.01,.36,.99);
position: relative;
z-index: 2;
flex: 0 0 auto;
}
.section-bg {
background: url("https://via.placeholder.com/700x300") center center no-repeat;
background-size: cover;
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
.half {
width: 49.7792vh;
}
.section {
width: 100%;
display: flex;
align-items: center;
justify-content: center;
flex: 0 0 auto;
}
.grey {
background-color: #bfbeb7;
}
.green {
background-color: green;
}
.white-smoke {
background-color: white-smoke;
}
.caption {
text-align: center;
}
/*** Cursor ***/
html {
cursor: none;
}
#follower {
position: absolute;
top: 50%;
left: 50%;
z-index: 3;
pointer-events: none;
}
#follower #circle1 {
position: absolute;
-webkit-animation: pulse 2s infinite;
animation: pulse 2s infinite;
background: #fff;
border-radius: 50%;
height: 0em;
width: 0em;
margin-top: 0em;
margin-left: 0em;
}
#follower #circle2 {
position: absolute;
-webkit-animation: pulse 4s infinite;
animation: pulse 4s infinite;
background: rgba(200,0,0,0.8);
border-radius: 50%;
height: 0em;
width: 0em;
margin-top: 0em;
margin-left: 0em;
}
@-moz-keyframes pulse {
0% {
opacity: 0.2;
height: 1em;
width: 1em;
margin-top: -0.5em;
margin-left: -0.5em;
}
50% {
opacity: 0.9;
height: 3em;
width: 3em;
margin-top: -1.5em;
margin-left: -1.5em;
}
100% {
opacity: 0.2;
height: 1em;
width: 1em;
margin-top: -0.5em;
margin-left: -0.5em;
}
}
@-webkit-keyframes pulse {
0% {
opacity: 0.2;
height: 1em;
width: 1em;
margin-top: -0.5em;
margin-left: -0.5em;
}
50% {
opacity: 0.9;
height: 3em;
width: 3em;
margin-top: -1.5em;
margin-left: -1.5em;
}
100% {
opacity: 0.2;
height: 1em;
width: 1em;
margin-top: -0.5em;
margin-left: -0.5em;
}
}
@-o-keyframes pulse {
0% {
opacity: 0.2;
height: 1em;
width: 1em;
margin-top: -0.5em;
margin-left: -0.5em;
}
50% {
opacity: 0.9;
height: 3em;
width: 3em;
margin-top: -1.5em;
margin-left: -1.5em;
}
100% {
opacity: 0.2;
height: 1em;
width: 1em;
margin-top: -0.5em;
margin-left: -0.5em;
}
}
@keyframes pulse {
0% {
opacity: 0.2;
height: 1em;
width: 1em;
margin-top: -0.5em;
margin-left: -0.5em;
}
50% {
opacity: 0.9;
height: 3em;
width: 3em;
margin-top: -1.5em;
margin-left: -1.5em;
}
100% {
opacity: 0.2;
height: 1em;
width: 1em;
margin-top: -0.5em;
margin-left: -0.5em;
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="https://nicescroll.areaaperta.com/wp-content/plugins/jnicescroll/js/jquery.nicescroll.min.js"></script>
<div id="follower">
<div id="circle1"></div>
<div id="circle2"></div>
</div>
<div class="card" id="js-slideContainer">
<div class="section-parent">
<div class="section-bg">
<button type="button" id="animateBtn" class="animateBtn">Click Here</button>
</div>
</div>
<div class="section grey">
<div class="caption">
<h2>Some Heading</h2>
<P>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</P>
</div>
</div>
<div class="section green">
<div class="caption">
<h2>Other Heading</h2>
<P>Error explicabo architecto iure, numquam quisquam dolores itaque quos aliquid laudantium eaque, voluptas.</P>
</div>
</div>
</div>
For better understanding, open the snippet in Full View
.
Here is the Fiddle
As you can see in the demo
.section-parent
will add a class .half
on button
click.
what i want is to remove .half
class when user scroll back to leftmost and again add class .half
on scroll. this time the animation should perform without click
on button
.
for reference, please check this website: villafeltrinelli
I added a scroll function and modified your scroll selector
$(function() {
var scroll = $("#js-slideContainer").scrollLeft();
if (scroll >= 0) {
$('#animateBtn').click(function(){
$('.section-parent').addClass('half');
// Smooth Scroll
$('#js-slideContainer').niceScroll({
cursorwidth: "0px",
cursorborder: "5px solid transparent",
scrollspeed: 260,
smoothscroll: true
});
});
}
$("#js-slideContainer").scroll(function() {
if ($("#js-slideContainer").scrollLeft() == 0) {
$('.section-parent').removeClass('half');
} else {
$('.section-parent').addClass('half');
}
});
// Custom Cursor
var follower, init, mouseX, mouseY, positionElement, printout, timer;
follower = document.getElementById('follower');
printout = document.getElementById('printout');
mouseX = (function(_this) {
return function(event) {
return event.clientX;
};
})(this);
mouseY = (function(_this) {
return function(event) {
return event.clientY;
};
})(this);
positionElement = (function(_this) {
return function(event) {
var mouse;
mouse = {
x: mouseX(event),
y: mouseY(event)
};
follower.style.top = mouse.y + 'px';
return follower.style.left = mouse.x + 'px';
};
})(this);
timer = false;
window.onmousemove = init = (function(_this) {
return function(event) {
var _event;
_event = event;
return timer = setTimeout(function() {
return positionElement(_event);
}, 1);
};
})(this);
});
* {
box-sizing: border-box;
}
html, body {
height: 100%;
width: 100%;
}
body {
padding: 100px;
margin: 0;
background: #e2e1dc;
}
::-webkit-scrollbar {
display: none;
}
.card {
display: flex;
flex-wrap: nowrap;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.section-parent {
width: 87.5vw;
height: calc(100vh - 12.5vw);
margin-right: 6.25vw;
margin-bottom: 0;
transition: width 1.6s cubic-bezier(.73,.01,.36,.99);
position: relative;
z-index: 2;
flex: 0 0 auto;
}
.section-bg {
background: url("https://via.placeholder.com/700x300") center center no-repeat;
background-size: cover;
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
.half {
width: 49.7792vh;
}
.section {
width: 100%;
display: flex;
align-items: center;
justify-content: center;
flex: 0 0 auto;
}
.grey {
background-color: #bfbeb7;
}
.green {
background-color: green;
}
.white-smoke {
background-color: white-smoke;
}
.caption {
text-align: center;
}
/*** Cursor ***/
html {
cursor: none;
}
#follower {
position: absolute;
top: 50%;
left: 50%;
z-index: 3;
pointer-events: none;
}
#follower #circle1 {
position: absolute;
-webkit-animation: pulse 2s infinite;
animation: pulse 2s infinite;
background: #fff;
border-radius: 50%;
height: 0em;
width: 0em;
margin-top: 0em;
margin-left: 0em;
}
#follower #circle2 {
position: absolute;
-webkit-animation: pulse 4s infinite;
animation: pulse 4s infinite;
background: rgba(200,0,0,0.8);
border-radius: 50%;
height: 0em;
width: 0em;
margin-top: 0em;
margin-left: 0em;
}
@-moz-keyframes pulse {
0% {
opacity: 0.2;
height: 1em;
width: 1em;
margin-top: -0.5em;
margin-left: -0.5em;
}
50% {
opacity: 0.9;
height: 3em;
width: 3em;
margin-top: -1.5em;
margin-left: -1.5em;
}
100% {
opacity: 0.2;
height: 1em;
width: 1em;
margin-top: -0.5em;
margin-left: -0.5em;
}
}
@-webkit-keyframes pulse {
0% {
opacity: 0.2;
height: 1em;
width: 1em;
margin-top: -0.5em;
margin-left: -0.5em;
}
50% {
opacity: 0.9;
height: 3em;
width: 3em;
margin-top: -1.5em;
margin-left: -1.5em;
}
100% {
opacity: 0.2;
height: 1em;
width: 1em;
margin-top: -0.5em;
margin-left: -0.5em;
}
}
@-o-keyframes pulse {
0% {
opacity: 0.2;
height: 1em;
width: 1em;
margin-top: -0.5em;
margin-left: -0.5em;
}
50% {
opacity: 0.9;
height: 3em;
width: 3em;
margin-top: -1.5em;
margin-left: -1.5em;
}
100% {
opacity: 0.2;
height: 1em;
width: 1em;
margin-top: -0.5em;
margin-left: -0.5em;
}
}
@keyframes pulse {
0% {
opacity: 0.2;
height: 1em;
width: 1em;
margin-top: -0.5em;
margin-left: -0.5em;
}
50% {
opacity: 0.9;
height: 3em;
width: 3em;
margin-top: -1.5em;
margin-left: -1.5em;
}
100% {
opacity: 0.2;
height: 1em;
width: 1em;
margin-top: -0.5em;
margin-left: -0.5em;
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="https://nicescroll.areaaperta.com/wp-content/plugins/jnicescroll/js/jquery.nicescroll.min.js"></script>
<div id="follower">
<div id="circle1"></div>
<div id="circle2"></div>
</div>
<div class="card" id="js-slideContainer">
<div class="section-parent">
<div class="section-bg">
<button type="button" id="animateBtn" class="animateBtn">Click Here</button>
</div>
</div>
<div class="section grey">
<div class="caption">
<h2>Some Heading</h2>
<P>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</P>
</div>
</div>
<div class="section green">
<div class="caption">
<h2>Other Heading</h2>
<P>Error explicabo architecto iure, numquam quisquam dolores itaque quos aliquid laudantium eaque, voluptas.</P>
</div>
</div>
</div>