I'm working on a three-section website: the main section is a landing page with sticky elements and is set on autoflow at the moment,
the about section has to be a position fixed, and the shop section has to stop scrolling when my elements (clothes) reach the end.
The main issue is that I don't know how to block the scrolling on my shop section when the items are all displayed and avoid overflow. I would need that in the shop section when the products are finished Is not possible to scroll and see the black background below
here is my code snippet, please test the snippet and go Full page to have an idea of my issue in action.
If faster just go there: https://codepen.io/cat999/pen/eYjmMdV
Many thanks in advance.
const appRoot = document.getElementById("page");
const nav = document.querySelector(".navigation");
const root = document.documentElement;
const endTransition = () => {
const loader = document.querySelector(".loader");
loader.addEventListener("transitionend", () => {
loader.style.opacity = '0';
root.classList.remove("disable-hover");
});
loader.style.opacity = '1';
};
const startTransition = () => {
const loader = document.querySelector(".loader");
loader.style.opacity = "opacity:1";
appRoot.dataset.route = "a";
};
nav.addEventListener("click", (e) => {
if (e.target.nodeName === "A") {
let a = Array.from(nav.children).find((v) => v.closest(".active"));
root.classList.add("disable-hover");
a.classList.remove("active");
e.target.classList.add("active");
e.preventDefault();
}
});
const onRouteClick = (route) => {
if (appRoot.dataset.route === route) return;
appRoot.dataset.route = route;
endTransition();
};
window.addEventListener("load", () => {
startTransition();
});
$(".navigation").click(function() {
jQuery('html,body').animate({
scrollTop: 0
}, 2000);
})
/* SSHOP*/
.grid {
display: grid;
grid-template-columns: repeat( auto-fit, minmax(220px, 1fr)); // px em rem % cm fr auto
grid-template-rows: auto;
grid-gap: 1rem 0.5rem;
grid-row-gap: 1rem;
grid-column-gap: 1rem;
}
/* Style Shits :p */
.box {
background-color: #f4f4f6;
height: 220px;
}
.grid {
background-color: #f4f4f6;
/* Style Shits :p */
}
#product {
object-fit: contain;
width: 100%;
height: 100%;
}
/* SHOP */
/*CUBE*/
.parent {
transform: translate(-50%, -50%);
position: absolute;
perspective: 1340px;
perspective-origin: 50% 100px;
margin: 1vmin auto auto;
padding: 0rem;
perspective-origin: 50% 100px;
}
.cube {
animation: cube-spin 4.5s cubic-bezier(0.46, -0.43, 0, 1.15) infinite;
animation-delay: 0s;
height: 60px;
position: relative;
width: 60px;
transform-style: preserve-3d;
transform: rotateY(0deg);
}
.block {
background-color: black;
border: 1px solid black;
height: 60px;
position: absolute;
width: 60px;
}
.face {
background-image: url("https://www.matteogiordano.info/formy-d.svg");
height: 100%;
left: 50%;
position: absolute;
top: 50%;
transform: translate(-50%, -50%);
width: 100%;
}
.block--left {
transform: rotateY(270deg) translateX(-30px);
transform-origin: center left;
}
.block--left .face {
background-image: url("https://www.matteogiordano.info/formy-p.svg");
}
.block--right {
transform: rotateY(-270deg) translateX(30px);
transform-origin: top right;
}
.block--right .face {
background-image: url("https://www.matteogiordano.info/formy-f5.svg");
}
.block--front {
transform: translateZ(30px);
}
.block--front .face {
background-image: url("https://www.matteogiordano.info/formy-prj.svg");
}
.block--back {
transform: translateZ(-30px) rotateY(180deg);
}
.block--back .face {
background-color: #ff822d;
}
@keyframes cube-spin {
from {
transform: rotateY(0deg);
}
to {
transform: rotateY(360deg);
}
}
/*GRID MAIN PAGE*/
ul {
display: grid;
grid-template-columns: repeat(24, 1fr);
grid-template-rows: repeat(15, 20vh);
/*height: 500vh;*/
height: auto-flow;
list-style: none;
margin: 0;
padding: 0;
}
li {
background: #6c5ce7;
position: sticky;
height: 80vh;
top: 0;
}
li {
border-radius: 2rem;
}
li:nth-of-type(1) {
position: relative;
background: red;
grid-area: 10/18;
z-index: 9;
grid-column: 2 / span 9;
}
li:nth-of-type(2) {
top: 80px;
height: 80vh;
background: black;
grid-area: 5/13;
grid-column: 7 / span 12;
z-index: 8;
}
li:nth-of-type(3) {
position: relative;
grid-area: 15/9;
grid-column: 15 / span 9;
background: green;
z-index: 9;
}
li:nth-of-type(4) {
grid-area: 15/4;
}
li:nth-of-type(5) {
grid-area: 12/5;
}
#cappello {
background: red;
width: 100%;
}
#cover {
border-radius: 2rem;
overflow: hidden;
object-fit: cover;
object-position: center center;
height: 100%;
width: 100%;
}
#cover2 {
border-radius: 2rem;
overflow: hidden;
object-fit: contain;
object-position: center center;
height: 100%;
width: 100%;
}
#cover3 {
border-radius: 2rem;
overflow: hidden;
object-fit: cover;
object-position: center center;
height: 100%;
width: 100%;
}
#cover4 {
border-radius: 2rem;
overflow: hidden;
object-fit: cover;
object-position: center center;
height: 100%;
width: 100%;
}
@font-face {
font-family: Estragon Variable;
src: url(https://dinamopipeline.com/fonts/Estragon-Variable-Decomposed.d7f7786.woff2) format("woff2"), url(https://dinamopipeline.com/fonts/Estragon-Variable-Decomposed.925b3c5.woff) format("woff");
}
body {
-webkit-touch-callout: none;
/* iOS Safari */
-webkit-user-select: none;
/* Safari */
-khtml-user-select: none;
/* Konqueror HTML */
-moz-user-select: none;
/* Old versions of Firefox */
-ms-user-select: none;
/* Internet Explorer/Edge */
user-select: none;
/* Non-prefixed version, currently
supported by Chrome, Edge, Opera and Firefox */
}
/*
.at , .tc{
position:fixed;
width:100%;
height:100%;
top: 0;
display:flex;
justify-content:center;
align-items:center;
padding-top:0!important;
}*/
.b,
.c {
padding-top: 10vh;
}
img {
width: 100vw;
height: auto;
}
.svgloader {
width: 70vw;
}
.svgloadercontainer {
position: fixed;
width: 100%;
height: 100%;
top: 0;
display: flex;
justify-content: center;
align-items: center;
padding-top: 0 !important;
}
.container-shop {
width: 100vw;
max-height: 1200px !important;
}
.c {
position: fixed !important;
}
.c {
color: white !important;
background: black;
width: 100vw;
}
body {
font-family: Estragon Variable;
font-size: 1vmax;
text-transform: capitalize;
font-variation-settings: "wght" 120.081;
line-height: 1;
/* font-weight: lighter; */
color: #ff6699;
/* PINK */
-webkit-font-smoothing: antialiased;
background-color: black;
}
@media only screen and (max-width: 600px) {
body {
font-size: 10vw;
}
}
.navigation {
position: fixed;
left: 0;
right: 0;
top: 0;
width: 30vw;
margin: auto;
display: flex;
justify-content: space-between;
flex-wrap: wrap;
z-index: 7;
}
@media only screen and (max-width: 1100px) {
.navigation {
width: 100vw;
top: auto;
}
}
@media only screen and (max-width: 600px) {
.navigation {
bottom: 2vh !important;
}
}
.navigation a {
text-decoration: none;
color: inherit;
padding: 0.5rem 3vmax;
font-size: 1rem;
text-transform: uppercase;
font-family: "Estragon Variable";
font-variation-settings: "wght" 300;
/*border: 1px solid;*/
border-radius: 2rem;
margin: 1rem auto;
/*background-color: rgba(255, 255, 255, 0.3);*/
text-align: center;
line-height: 1;
/*-webkit-backdrop-filter: blur(10px);
backdrop-filter: blur(10px);*/
}
@media only screen and (max-width: 600px) {
.navigation a {
padding: 0.5rem 3vmax;
}
}
/*
.navigation a:hover {
background-color: #252525;
color: #fdfdfd;
}
.navigation a.active {
/*background-color: #252525;
color: #fdfdfd;
}*/
#page {
//min-width: 100vw;
//min-height: 100vh;
overflow: hidden;
}
.container {
cursor: crosshair !important;
min-width: 100%;
min-height: 100%;
position: absolute;
inset: 0;
}
.loader {
position: fixed;
inset: 0;
height: 100vh !important;
z-index: 5;
background-color: none;
opacity: 0;
transition: 1s;
will-change: opacity;
}
.a,
.b,
.c {
//display: flex;
opacity: 0;
visibility: hidden;
pointer-events: none;
transition-property: opacity, visibility;
transition-duration: 0.5s;
transition-delay: -0.1s;
transition-timing-function: ease-in-out;
height: 100%;
}
.ac {
margin: auto;
}
[data-route="a"] .a,
[data-route="b"] .b,
[data-route="c"] .c {
opacity: 1;
visibility: visible;
pointer-events: all;
transition: opacity 1s ease-in 0.9s;
}
.disable-hover,
.disable-hover * {
pointer-events: none !important;
cursor: none;
cursor: wait;
}
[data-route="b"] .b {
opacity: 1;
margin: 0;
padding: 0;
background: blanchedalmond;
visibility: visible;
pointer-events: all;
transition: opacity 1s ease-in 0.9s;
}
.nav-wrapper {
position: fixed;
left: 0;
right: 0;
bottom: 0;
display: block;
height: 4rem;
margin: 0;
overflow: hidden;
background-color: #f00;
// outline: 1px solid red;
}
.nav {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
display: block;
margin: 0 0 -2rem;
font-size: 0;
white-space: nowrap;
overflow-x: auto;
}
.nav-item {
display: inline-block;
margin: 0;
padding: 1.1rem 1rem 0.9rem;
font-size: 2rem;
line-height: 1;
text-transform: uppercase;
color: #fff;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<div id="page">
<div >
<a href="" onClick=" onRouteClick('b'); return false; ">shop</a>
<a href="" onClick=" onRouteClick('a'); return false; ">
<span >
<div >
<div >
<div ></div>
</div>
<div >
<div ></div>
</div>
<div >
<div ></div>
</div>
<div >
<div ></div>
</div>
</div>
</span>
</a>
<a href="" onClick=" onRouteClick('c'); return false; ">contact</a>
</div>
<div >
<div >
<img src="https://www.matteogiordano.info/PDF-logo-full.svg" />
</div>
</div>
<div >
<div >
<br />
<div >
<ul>
<li>cappello <img id="cappello" src="https://www.mybudapester.com/media/catalog/product/cache/5/image/900x900/9df78eab33525d08d6e5fb8d27136e95/i/m/image_3681_1_24273_2_26666.jpg.png" />
</li>
<li>
<img id="cover" src="https://cdn.shopify.com/s/files/1/0828/1793/files/70.png?v=1650757796" />
</li>
<li>eee</li>
</ul>
<ul>
<li>fff</li>
<li><img id="cover2" src="https://images.squarespace-cdn.com/content/v1/56c346b607eaa09d9189a870/1566522790958-JC8XC2HRY1BGQAUBGDOX/Flaunt S.R. STUDIO. LA. CA8.jpg?format=2500w" />
</li>
<li>eee</li>
<li>eee</li>
</ul>
<ul>
<li>fff</li>
<li><img id="cover3" src="https://www.productionparadise.com/newsletters/1831/photos/48690/web_original/3-raf-simons-ss21-for-dust-magazine-by-willy-vanderperre-styled-by-olivier-rizzo.jpg" />
</li>
<li>eee</li>
</ul>
<ul>
<li>cappello <img id="" src="" /></li>
<li>
<img id="cover4" src="https://imgstatic.soldoutservice.com/XCBlBcxa/c09b892829c/s2000/travis-scott-bottega-veneta-digital-cover.jpg" />
</li>
<li>eee</li>
</ul>
</div>
</div>
</div>
<div id="servicediv">
<div >
<div >
<!--SHOP-->
<!--SHOP-->
<!--SHOP-->
<div >
<div ><img id="product" src="https://www.matteogiordano.info/product/10002.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10003.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10004.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10005.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10006.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10007.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10008.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10009.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10010.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10011.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10012.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10013.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10014.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10015.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10016.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10017.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10018.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10019.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10020.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10021.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10022.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10023.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10024.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10025.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10026.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10027.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10028.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10029.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10030.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10031.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10032.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10033.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10034.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10035.webp" /></div>
<div ><img id="product" src="https://www.matteogiordano.info/product/10036.webp" /></div>
</div>
<!--SHOP-->
<!--SHOP-->
<!--SHOP-->
<!--SHOP-->
<!--SHOP-->
<!--SHOP-->
</div>
</div>
<div >
<div >
<br />
<div >
contact <br /> [email protected] <br /> 39 987654 00312
</div>
</div>
</div>
</div>
</div>
CodePudding user response:
try this:
if(/*condition when you want to prevent scrolling*/) {
window.addEventListener("wheel",
(e)=> {
console.log("wheel");
e.preventDefault();
},
{passive:false}
);
}
CodePudding user response:
Max viewport width. CSS grid. Not wrapping with Flexbox. Using images without max-width.