3
It is possible to make the page scroll to a specific element (such as <section>
or <div>
)? It’s like a vertical slide (Section) that occupies the entire screen.
As an example, this site I think you use fullpage mousewheel: https://mega.co.nz
3
It is possible to make the page scroll to a specific element (such as <section>
or <div>
)? It’s like a vertical slide (Section) that occupies the entire screen.
As an example, this site I think you use fullpage mousewheel: https://mega.co.nz
4
I hitched a ride in this reply from Sozão, who already had the code ready.
The example is in jQuery, but can do a good with pure Javascript (by the way, it is recommended, unless your site is already all based on jQuery).
The important thing is to understand two concepts:
on('mousewheel DOMMouseScroll')
The mousewheel
is triggered when the mouse wheel is triggered; the DOMMouseScroll
is the equivalent of Firefox for this.
event.preventDefault();
As you will manage the event from the mouse wheel, it is critical that you warn the browser that it is not to use the normal action for that event. That’s where the preventDefault
.
Click on "Run code snippet" just below the following block, click on frame and test with mouse wheel.
(function() {
var delay = false;
$(document).on('mousewheel DOMMouseScroll', function(event) {
event.preventDefault();
if(delay) return;
delay = true;
setTimeout(function(){delay = false},200)
var wd = event.originalEvent.wheelDelta || -event.originalEvent.detail;
var a= document.getElementsByTagName('a');
if(wd < 0) {
for(var i = 0 ; i < a.length ; i++) {
var t = a[i].getClientRects()[0].top;
if(t >= 40) break;
}
}
else {
for(var i = a.length-1 ; i >= 0 ; i--) {
var t = a[i].getClientRects()[0].top;
if(t < -20) break;
}
}
$('html,body').animate({
scrollTop: a[i].offsetTop
});
});
})();
body, html { width:100%; height:100%; margin:0; padding:0 }
a { display:block; color:red; margin-bottom:1em; }
.page {width:100%;height:100%;margin:0 auto;padding:0 15%;box-sizing:border-box;background:#fee}
.page:nth-child(odd) {background:#efe}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<div class="page">
<a name="#A1">Tag #1</a>
<b>TESTE TAMBEM EM PAGINA TODA -----------></b><br>
At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio.
</div>
<div class="page">
<a name="#A2">Tag #2</a>
At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus.
</div>
<div class="page">
<a name="#A3">Tag #3</a>
At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus.
</div>
<div class="page">
<a name="#A4">Tag #4</a>
At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus.
</div>
Bacco, also advise you to put on "Whole Page". The experience gets really better and resembles the site. + 1
@Samirbraga I added in html :)
1
As an alternative there is already a jQuery plugin ready for this, is the:
Go to to to download: https://github.com/alvarotrigo/fullPage.js/archive/master.zip
It works like this, by <section>
or <div>
and also supports back and forth from the browser:
Supports: - IE8+ - Opera - Chrome - Firefox
To use it is necessary to add this to the header:
<link rel="stylesheet" type="text/css" href="jquery.fullPage.css" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="vendors/jquery.easings.min.js"></script>
<script type="text/javascript" src="vendors/jquery.slimscroll.min.js"></script>
<script type="text/javascript" src="jquery.fullPage.js"></script>
(if you have already added jquery to your website then remove the second line of code above)
The html should look like this:
<div id="fullpage">
<div class="section">Some section</div>
<div class="section">Some section</div>
<div class="section">Some section</div>
<div class="section">Some section</div>
</div>
To boot you must add this to your main js:
$(document).ready(function() {
$('#fullpage').fullpage();
});
A more complex and eventful example:
$(document).ready(function() {
$('#fullpage').fullpage({
//Navigation
menu: '#menu',
lockAnchors: false,
anchors:['firstPage', 'secondPage'],
navigation: false,
navigationPosition: 'right',
navigationTooltips: ['firstSlide', 'secondSlide'],
showActiveTooltip: false,
slidesNavigation: true,
slidesNavPosition: 'bottom',
//Scrolling
css3: true,
scrollingSpeed: 700,
autoScrolling: true,
fitToSection: true,
fitToSectionDelay: 1000,
scrollBar: false,
easing: 'easeInOutCubic',
easingcss3: 'ease',
loopBottom: false,
loopTop: false,
loopHorizontal: true,
continuousVertical: false,
normalScrollElements: '#element1, .element2',
scrollOverflow: false,
touchSensitivity: 15,
normalScrollElementTouchThreshold: 5,
//Accessibility
keyboardScrolling: true,
animateAnchor: true,
recordHistory: true,
//Design
controlArrows: true,
verticalCentered: true,
resize : false,
sectionsColor : ['#ccc', '#fff'],
paddingTop: '3em',
paddingBottom: '10px',
fixedElements: '#header, .footer',
responsiveWidth: 0,
responsiveHeight: 0,
//Custom selectors
sectionSelector: '.section',
slideSelector: '.slide',
//events
onLeave: function(index, nextIndex, direction){},
afterLoad: function(anchorLink, index){},
afterRender: function(){},
afterResize: function(){},
afterSlideLoad: function(anchorLink, index, slideAnchor, slideIndex){},
onSlideLeave: function(anchorLink, index, slideIndex, direction, nextSlideIndex){}
});
});
And it also supports Lazy-load, so change the attribute src
for data-src
:
<img data-src="image.png">
<video>
<source data-src="video.webm" type="video/webm" />
<source data-src="video.mp4" type="video/mp4" />
</video>
And supports anchors:
<ul id="myMenu">
<li data-menuanchor="firstPage" class="active"><a href="#firstPage">First section</a></li>
<li data-menuanchor="secondPage"><a href="#secondPage">Second section</a></li>
<li data-menuanchor="thirdPage"><a href="#thirdPage">Third section</a></li>
<li data-menuanchor="fourthPage"><a href="#fourthPage">Fourth section</a></li>
</ul>
$('#fullpage').fullpage({
anchors: ['firstPage', 'secondPage', 'thirdPage', 'fourthPage', 'lastPage'],
menu: '#myMenu'
});
Example:
Browser other questions tagged javascript html css
You are not signed in. Login or sign up in order to post.
I think I understand the doubt, you want it is a kind of vertical slide, I think the name of this is Fullpage mousewheel. I’ll edit the question, anything do the rollback.
– Guilherme Nascimento