Easy smooth scrolling instead of jumping to location on page
This commit is contained in:
parent
ab6b288f58
commit
fc38127066
117
scroll.html
Normal file
117
scroll.html
Normal file
@ -0,0 +1,117 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>Custom Switch</title>
|
||||
<style>
|
||||
.container {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
padding: 25px;
|
||||
width: 500px;
|
||||
height: 700px;
|
||||
border: 1px solid black;
|
||||
overflow: scroll;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#fab {
|
||||
text-align: right;
|
||||
position: sticky;
|
||||
bottom: 0px;
|
||||
right: 25px;
|
||||
}
|
||||
|
||||
#fab button {
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
background: rgba(0, 0, 255, 1);
|
||||
border: 0px;
|
||||
border-radius: 100%;
|
||||
display: none; /* Dynamic */
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="container" class="container">
|
||||
<h1>Scrolling Demo</h1>
|
||||
<div id="text">
|
||||
<!-- Populated with Random Lorum Ipsum -->
|
||||
</div>
|
||||
<div id='fab'>
|
||||
<button>⬆️</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
<style>
|
||||
h1 {
|
||||
text-align: center;
|
||||
font-size: 2em;
|
||||
background-color: rgba(255, 0, 0, 0.5);
|
||||
padding-top: inherit;
|
||||
height: 2em;
|
||||
}
|
||||
|
||||
@media(prefers-reduced-motion: no-preference) {
|
||||
.container {
|
||||
scroll-behavior: smooth
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<script>
|
||||
const fab = document.querySelector( '#fab button' )
|
||||
const container = document.getElementById('container')
|
||||
|
||||
container.addEventListener('scroll', (event) => {
|
||||
if(container.scrollTop < 50){
|
||||
fab.style.display = "none";
|
||||
} else {
|
||||
fab.style.display = "inline";
|
||||
}
|
||||
})
|
||||
|
||||
// Jumps by Default
|
||||
fab.addEventListener('click', (event) => {
|
||||
container.scrollTop = 0
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
<script>
|
||||
const getNewParagraph = textGenerator()
|
||||
const anchorDiv = document.getElementById('text')
|
||||
for(let i = 0; i < 15; i++){
|
||||
const newElem = document.createElement( "p" )
|
||||
newElem.appendChild( getNewParagraph.next().value )
|
||||
anchorDiv.appendChild( newElem )
|
||||
}
|
||||
|
||||
function* textGenerator(){
|
||||
while(true){
|
||||
let numWords = Math.floor(Math.random() * 50)
|
||||
let text = getText(numWords)
|
||||
yield document.createTextNode(text)
|
||||
}
|
||||
|
||||
function getText(numWords){
|
||||
let string = ''
|
||||
for(let i = 0; i < numWords; i++){
|
||||
string += getRandomWord() + ' ';
|
||||
}
|
||||
return string;
|
||||
}
|
||||
|
||||
function getRandomWord(){
|
||||
let options = ['lorum', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipiscing', 'elit' ]
|
||||
return options[Math.floor(Math.random() * options.length-1)]
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user