Changing position with css avoiding flexbox and javascript (append, insertAfter) - javascript

I'm building a template and I want to move an element avoiding flexbox if it is possible, using pure css.
Here's my problem:
<div class="container-fluid health-details">
<div class="row">
<?php include 'sidebar.php';?>
<div class="col-md-8">
<div class="information">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam neque magna, volutpat ut scelerisque gravida, posuere nec diam. Fusce et ligula eget nisi malesuada dictum. Nunc et purus massa. </p>
<p>Curabitur vel fermentum nisi. Aenean elementum vel erat sit amet viverra. Ut quis sapien at dolor sollicitudin ullamcorper. Aliquam quis volutpat nisl, nec cursus tortor. Proin elementum magna nec erat ultricies, eu feugiat nunc convallis. Sed dapibus nec eros in porttitor. In finibus sed dolor vel ornare. </p>
<p>Aenean volutpat iaculis ullamcorper. Integer id nisi fringilla, feugiat est quis, hendrerit felis. Aliquam nunc justo, feugiat quis ligula ac, rhoncus pellentesque sapien. Pellentesque gravida dui elit, at egestas libero suscipit quis. Sed consectetur, tellus in faucibus rhoncus, nisl ipsum pulvinar magna, posuere pulvinar nulla urna a nisl. Quisque cursus ac metus et venenatis. </p>
<p>Pellentesque vehicula ornare quam, id tempus felis volutpat quis. Proin volutpat massa ac turpis dignissim, id consectetur eros sagittis. Pellentesque in interdum turpis. Maecenas eget nisi sit amet nisi pretium placerat. Maecenas luctus vel leo ut fermentum. Nullam ullamcorper ultrices scelerisque. Cras semper eros vitae nisi vulputate euismod. Suspendisse potenti. Etiam urna sem, vulputate in hendrerit a, imperdiet at ipsum. Integer aliquet arcu erat, interdum consectetur enim condimentum sed.</p>
<p>Integer egestas dolor eu sagittis pharetra. Phasellus non commodo magna. Maecenas sit amet libero pellentesque arcu posuere ultrices ut non augue. Donec aliquam pellentesque lectus, vel sollicitudin nisi viverra at. Fusce convallis velit eget urna ullamcorper finibus. Suspendisse potenti. Quisque ac eros vel ligula vulputate aliquet vestibulum sit amet nisl. Nunc rutrum blandit consectetur. Pellentesque vel rhoncus eros. Nam non vestibulum ex, sed cursus sem. Suspendisse ut porttitor erat, nec placerat ligula. Cras consequat ut ligula posuere interdum. Phasellus porta, nisi quis pharetra fringilla, nulla sem convallis sapien, ut faucibus ipsum mauris nec nibh. Maecenas efficitur hendrerit eros, vel vulputate nisi convallis nec. Aliquam pulvinar scelerisque mi, et placerat nisi egestas eget.</p>
</div>
</div>
</div>
</div>
My sidebar is really easy, something like:
<aside>
<nav>
<ul>
<li class="active">Ciao</li>
<li>Ciao Program</li>
<li>Program Outline</li>
<li>Tuition & Fees Guide</li>
<li>Admission Policy</li>
</ul>
</nav>
</aside>
What I'd like to do is, on mobile switch the position of the sidebar and put it within the blurb:
<div class="container-fluid health-details">
<div class="row">
<div class="col-md-8">
<div class="information">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam neque magna, volutpat ut scelerisque gravida, posuere nec diam. Fusce et ligula eget nisi malesuada dictum. Nunc et purus massa. </p>
<p>Curabitur vel fermentum nisi. Aenean elementum vel erat sit amet viverra. Ut quis sapien at dolor sollicitudin ullamcorper. Aliquam quis volutpat nisl, nec cursus tortor. Proin elementum magna nec erat ultricies, eu feugiat nunc convallis. Sed dapibus nec eros in porttitor. In finibus sed dolor vel ornare. </p>
<?php include 'sidebar.php';?>
<p>Aenean volutpat iaculis ullamcorper. Integer id nisi fringilla, feugiat est quis, hendrerit felis. Aliquam nunc justo, feugiat quis ligula ac, rhoncus pellentesque sapien. Pellentesque gravida dui elit, at egestas libero suscipit quis. Sed consectetur, tellus in faucibus rhoncus, nisl ipsum pulvinar magna, posuere pulvinar nulla urna a nisl. Quisque cursus ac metus et venenatis. </p>
<p>Pellentesque vehicula ornare quam, id tempus felis volutpat quis. Proin volutpat massa ac turpis dignissim, id consectetur eros sagittis. Pellentesque in interdum turpis. Maecenas eget nisi sit amet nisi pretium placerat. Maecenas luctus vel leo ut fermentum. Nullam ullamcorper ultrices scelerisque. Cras semper eros vitae nisi vulputate euismod. Suspendisse potenti. Etiam urna sem, vulputate in hendrerit a, imperdiet at ipsum. Integer aliquet arcu erat, interdum consectetur enim condimentum sed.</p>
<p>Integer egestas dolor eu sagittis pharetra. Phasellus non commodo magna. Maecenas sit amet libero pellentesque arcu posuere ultrices ut non augue. Donec aliquam pellentesque lectus, vel sollicitudin nisi viverra at. Fusce convallis velit eget urna ullamcorper finibus. Suspendisse potenti. Quisque ac eros vel ligula vulputate aliquet vestibulum sit amet nisl. Nunc rutrum blandit consectetur. Pellentesque vel rhoncus eros. Nam non vestibulum ex, sed cursus sem. Suspendisse ut porttitor erat, nec placerat ligula. Cras consequat ut ligula posuere interdum. Phasellus porta, nisi quis pharetra fringilla, nulla sem convallis sapien, ut faucibus ipsum mauris nec nibh. Maecenas efficitur hendrerit eros, vel vulputate nisi convallis nec. Aliquam pulvinar scelerisque mi, et placerat nisi egestas eget.</p>
</div>
</div>
</div>
</div>
I don't have to necessarily use php to do the trick, I can do it with simple html. The thing is that I want to avoid to use flexbox, I would be nice if I can only add a class to my sidebar with php. The other thing that I have to avoid is to repeat myself (DRY). Of course I can create the same bar and display:none and block on mobile (so I will have the same two sidebars), but if it is possible I'd rather avoid it.
Is there any solution to solve my problem?
I would avoid to use a script to, like something with javascript (append the element based on the size of the viewport, that's the only method that I know that it will work for sure, something like):
$('.sidebar').insertAfter( '.information p:last-child' );
I mean, it will work just fine but I don't love to style with javascript.
Thanks

Related

Is there any way to run asscroll package in react project?

I was searching a few libraries for scroll animations and I found a very good npm package called #ashthornton/asscroll and I wanted to use the same on my react project.
But I am not been able to implement the same. It's not working the way it should. Can someone help me implement the same package in react?
Here, are the links for asscroll package and a Codesandbox for anyone to give it a try.
In order to run it with react you need to initialize ASScroll inside useEffect and also make sure to point out which div element is asscroll-container.
Since this is a little different in react you need to add to the div asscroll-container="true" (keep in mind that true has to be passed as string).
I have added this library to my codesandbox as you can see here
import React from "react";
import ASScroll from "#ashthornton/asscroll";
import "./styles.css";
class App extends React.Component {
componentDidMount() {
const pageEl = document.querySelector(".page");
this.asscroll = new ASScroll({
// containerElement: '.my-container',
scrollElements: pageEl,
ease: 0.1,
touchEase: 1,
customScrollbar: true,
scrollbarEl: ".my-scrollbar",
scrollbarHandleEl: ".my-scrollbar-handle",
scrollbarStyles: true,
disableNativeScrollbar: true,
touchScrollType: "scrollTop",
disableRaf: true,
disableResize: true,
limitLerpRate: true,
blockScrollClass: ".asscroll-block"
});
this.asscroll.enable();
requestAnimationFrame(this.onRaf);
}
onRaf = () => {
this.asscroll.update();
requestAnimationFrame(this.onRaf);
};
render() {
return (
<div asscroll-container="true">
<div class="page">
<img
src="https://raw.githubusercontent.com/ashthornton-gc/asscroll/master/docs/banner.jpg"
alt=""
/>
<div class="content">
<h1 class="title">
<span>A</span>
<span>S</span>
<span>S</span>
<span>C</span>
<span>R</span>
<span>O</span>
<span>L</span>
<span>L</span>
<span>🍑</span>
</h1>
<div>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam
ornare quis nibh eget convallis. Nam aliquam tempus dolor, at
blandit elit vulputate eu. Mauris iaculis sem at nulla euismod
auctor. Duis dui risus, lacinia quis fringilla a, dictum a
lectus. Aliquam id dui a nisi dignissim aliquet nec sed augue.
Vestibulum congue felis sit amet iaculis scelerisque. Vivamus
facilisis lacus sit amet eros eleifend dapibus in eget neque.
Aliquam nisi urna, porttitor et nisi in, pretium lacinia orci.
Cras vitae leo posuere, condimentum magna et, vulputate mi.
Nullam maximus ullamcorper leo eu auctor. Quisque eget fermentum
est, aliquet cursus libero. Sed scelerisque mauris sed enim
tristique tempus ornare vestibulum quam. Etiam eget aliquam
augue. In nec lectus convallis, lobortis risus in, euismod
lorem. Sed eleifend nisi ut lorem convallis, nec blandit ante
egestas.
</p>
<p>
Quisque quis tincidunt nunc. In magna est, malesuada quis tempus
id, fermentum eleifend urna. Fusce facilisis rhoncus nibh, eget
pellentesque mauris rhoncus ut. Nulla congue vel lacus nec
pellentesque. Praesent eget elit nisi. Ut eu enim arcu. Duis et
nisi ligula. Maecenas eu ante eget augue pulvinar efficitur.
Aenean vitae luctus dolor. Ut iaculis orci ut orci tincidunt, id
efficitur nulla accumsan. Nullam feugiat porta hendrerit.
Pellentesque eget fringilla leo. Quisque laoreet ligula quis
consectetur aliquam.
</p>
<p>
Nam vel auctor nisl. Cras vel suscipit nibh. Donec nec massa
sagittis, vehicula magna ac, scelerisque velit. Etiam mollis
felis orci, id placerat ipsum egestas a. Class aptent taciti
sociosqu ad litora torquent per conubia nostra, per inceptos
himenaeos. Aenean faucibus vulputate feugiat. Nam condimentum
arcu urna, id tincidunt nisl rhoncus quis. Duis mauris mi,
dapibus et nisl at, facilisis tristique lectus. Nam vel felis in
metus hendrerit placerat ac quis massa. Nam eget turpis nunc.
Nullam at tincidunt lacus. Nulla viverra magna in nisi semper,
non interdum nunc tempus. In pellentesque porttitor bibendum.
Vestibulum blandit congue tempor.
</p>
<p>
Cras congue, nunc et imperdiet porttitor, dui nisl ultricies
ipsum, sed bibendum neque leo auctor sem. Nam velit ipsum,
dictum eget dolor pellentesque, pulvinar imperdiet purus.
Quisque leo dui, eleifend non porttitor quis, auctor convallis
tortor. Integer vel justo at odio suscipit gravida vitae ut
tellus. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Mauris sapien urna, iaculis quis magna at, facilisis ultrices
elit. Maecenas ac elementum metus, sit amet congue nunc.
Maecenas vitae posuere lectus. Integer maximus neque at nunc
vestibulum imperdiet. Aenean imperdiet ligula semper nibh
dapibus facilisis. Pellentesque gravida dignissim lacus, et
vulputate sapien dapibus commodo. Etiam efficitur facilisis
sollicitudin. Quisque velit nulla, condimentum ac tellus eget,
rutrum placerat ipsum. Cras auctor auctor sem sed ullamcorper.
</p>
</div>
</div>
</div>
</div>
);
}
}
export default App;
Example

Section breaks for very long CSS columns

Using CSS columns I can format contiguous data into columns without having to manually break it into sections. This is especially useful when displaying complex, dynamic content.
However when the columns' content is so long that their height is greater than the viewport, dividing into columns makes for a poor reading experience. When the reader reaches the bottom of one column they must manually scroll up to begin reading the next.
In traditional print layouts, readability issues with very long columns are generally mitigated by breaking the columns into sections that 'restart' the column. (Physical pages themselves form a natural separation that the endlessly scrolling webpage does not have). The image below shows how horizontal section breaks makes columnar content that is longer than the height of the viewport more readable.
(Note that by 'restart the columns' I mean that once you reach the end of a left-hand column section you then read the right-hand column of that section before scrolling down to read both columns of the next section. https://www.shutterstock.com/image-vector/newspaper-template... might illustrate it more clearly).
There are very few guarantees for the column content. It may contain any number of paragraphs, images, nested block elements, nested inline elements and so on. Example markup is shown below.
.columns {
columns: 2 200px;
}
.columns * {
max-width: 100%;
}
<div class="columns">
<div class="introduction">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas posuere dictum tincidunt. Cras in lectus eget libero suscipit venenatis at sit amet dolor. Donec tempor cursus justo, volutpat sodales dolor tempor eu.</p>
<p class="a-class">Pellentesque nec tempor sapien, sed vehicula sem. Ut pretium leo eget nisi cursus viverra. Ut ultrices porta nibh, sed laoreet felis condimentum sit amet. Aliquam a felis nec urna dignissim placerat sed sit amet elit. Donec elementum sagittis purus, facilisis convallis urna dapibus eu. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam erat volutpat. Phasellus vel placerat metus. In efficitur enim eget lacinia ultrices. Duis ultricies dignissim nisi, id ultricies nulla venenatis vitae.</p>
</div>
<img src="https://i.kym-cdn.com/entries/icons/original/000/016/546/hidethepainharold.jpg">
<div class="body" style="">
<p>Suspendisse quis ante ullamcorper, lobortis orci ut, vestibulum dolor. Aenean sit amet purus commodo, sagittis leo vel, consequat nisi. Vestibulum sit amet sem vitae sapien pulvinar finibus. Ut sapien purus, luctus condimentum iaculis quis, lobortis at elit. Cras nulla ante, scelerisque ut aliquet in, elementum vel turpis. Vestibulum ipsum magna, congue sit amet sodales vel, aliquam vel nunc. <img src="https://upload.wikimedia.org/wikipedia/commons/e/e0/SNice.svg" width="100"> Sed eu dapibus nulla. In ut libero sit amet elit elementum gravida. Suspendisse quis quam consequat, pretium felis vel, laoreet turpis. Proin fringilla lobortis magna. Duis quam sapien, sodales nec accumsan id, ullamcorper eget tellus. Aliquam vitae orci cursus, porttitor ligula ut, fringilla odio. Donec a lorem ac eros interdum varius ultricies quis nulla.</p>
</div>
<p contenteditable="true">Nunc in elit tincidunt, ultrices massa sed, ultricies elit. In nec accumsan metus. Nullam ultricies eget tortor ut malesuada. Fusce in elit sit amet dolor bibendum malesuada.</p>
<div style="display:none">
<p>Curabitur sed hendrerit massa, vitae porta enim.</p>
</div>
<div><div><span>hey</span><div id="an-id">
Nullam ultricies eget tortor ut malesuada. Fusce in elit sit amet dolor bibendum malesuada. Nulla sed nisi vel nulla aliquam blandit. Nam vel tellus ut libero ultrices volutpat. Curabitur blandit quis arcu rutrum ullamcorper. Cras et pharetra augue, eget eleifend sem.
<img src="https://socialnewsdaily.com/wp-content/uploads/2018/08/Webp.net-resizeimage-27.jpg">
</div></div></div>
<p>
Mauris accumsan condimentum porttitor. Quisque tellus justo, suscipit sit amet posuere in, scelerisque nec orci. Aenean iaculis nisi in porta viverra. Sed eget ultricies nibh. Donec accumsan laoreet interdum. Donec risus mauris, dapibus et pulvinar at, posuere non nisi. Mauris at viverra nunc. Ut laoreet suscipit erat et cursus. Aenean id lacus volutpat lectus condimentum posuere. Nam ut lectus elit. Morbi sagittis elementum libero. Donec congue dolor sed tristique efficitur.
</p>
<p>
<div>
<p>Sed elementum velit sapien, et tristique justo bibendum at. Aliquam tincidunt magna nec nisi congue varius. Etiam dolor eros, rhoncus quis purus a, tempus malesuada quam. Sed bibendum condimentum eros vitae varius. Donec fermentum magna vel tellus tempus, nec finibus neque fermentum. Mauris tempus nisl sit amet lacus fermentum, at egestas urna egestas.</p>
<p>Interdum et malesuada fames ac ante ipsum primis in faucibus. Suspendisse ultrices lectus vitae nisl congue, sed porta dolor luctus. Donec aliquet at sapien sit amet tincidunt. Mauris vestibulum consectetur augue at imperdiet.</p>
</div>
</p>
</div>
I would like to automatically break my columns into regular sections after the columns reach a maximum height, as in the image above.
I have not found any property that controls the layout of CSS columns in this way. CSS regions look promising but have very poor browser support.
Computing the height of content with JavaScript and then inserting wrappers for each column block is probably possible, but not ideal. The content is dynamic and may change at any time, meaning the function must be run on every change. In addition the content may be very complex with sub elements that need to traverse section breaks, so naively inserting wrappers for each section will likely break the layout.
How can I automatically set section breaks for columnar content after a maximum height? (I am not married to the idea of CSS columns; perhaps a creative use of flex or inline-block will give the result I need).
There's actually a pretty simple solution using CSS columns. And the column-span attribute.
You can achieve all of this WITHOUT injecting anything into the content and simply styling HTML tags.
Basically, the CSS Columns Layout Module is intended to replicate print design layouts (like a newspaper) where the stylistic rule is that headlines should cross all columns of a story. Therefore any element with column-span: all will separate columns and cause the wrapping to reset. (notice the colors in my example show the wrap).
In this case, since you don't control the content its best to provide a common structure to your users. For example, I'd set H1, H2, H3 tags as well as <hr> and maybe some images to break columns. Allow your users to implement these tags as they normally would in writing and you'll achieve a nice layout. However, if they decide NOT to implement any of that stuff, that's up to them and you should let it wrap and cause a long scroll. (I might also suggest providing a preview so they can see what the result will look like)
Example of column-span
.columns {
margin: 30px;
columns: 2;
}
h1, h2, h3, h4, h5 {
column-span: all;
}
// simply to show where things wrap
h2 {
background-color: #eee;
padding: 5px 10px;
}
h5 {
border-bottom: 1px solid #ddd;
padding-bottom: 5px;
text-align: center;
}
p:nth-of-type(1) {
color: blue;
}
p:nth-of-type(2) {
color: green;
}
p:nth-of-type(3) {
color: orange;
}
p:nth-of-type(4) {
color: teal;
}
<div class="columns">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras venenatis tellus non nunc tincidunt, vitae rutrum metus dapibus. Fusce at ante massa. Nam et nibh aliquet, porta nibh quis, rhoncus tortor. Aenean vestibulum neque sed urna lacinia aliquet.
Vestibulum facilisis egestas commodo. Cras sed maximus odio. Mauris posuere, ante id posuere facilisis, ligula libero consectetur lacus, at pellentesque nibh elit at magna. Proin sollicitudin quis nibh at viverra. Duis feugiat, lorem vitae facilisis
blandit, augue tortor cursus orci, sed porttitor eros elit at sapien. Quisque eleifend pulvinar pellentesque.
</p>
<h2>This is a header (h2) with column-span: all set on it</h2>
<p>
Donec blandit sapien leo, id aliquam purus vulputate a. Sed vel turpis ut eros suscipit blandit vel id eros. Nullam ut mauris luctus magna sollicitudin venenatis. Pellentesque leo mauris, malesuada nec purus ut, vestibulum malesuada lectus. Nullam ultricies
tellus sapien, ut fermentum risus pretium a. Nullam magna urna, ullamcorper non congue a, efficitur nec orci. Ut aliquam molestie nisi. In at accumsan purus. Etiam non tempor ipsum. Maecenas gravida mauris in nibh vehicula ullamcorper. Sed libero lorem,
faucibus eu lorem ut, gravida eleifend enim. Nunc vehicula fermentum consequat. Phasellus a pellentesque nisl. Nulla vel suscipit nibh, ac cursus dui. Suspendisse elementum dapibus risus. Nam egestas congue finibus.
</p>
<p>
Nunc vel risus nec nulla dignissim congue. Cras sit amet lacus nec nisl mollis pellentesque in vel purus. Suspendisse efficitur mollis nibh, congue facilisis libero auctor ac. Nulla facilisi. Etiam ut erat eget erat egestas suscipit. Curabitur vitae varius
mauris. Sed accumsan diam eros, id dapibus metus rutrum at. Nunc vitae pretium massa. Aenean quis mauris leo. Nulla egestas ligula eu libero interdum feugiat. Aliquam maximus erat et tortor auctor varius. Nulla in pharetra leo, vel suscipit nunc. Orci
varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec nec egestas ante, vitae sollicitudin arcu. Pellentesque posuere tempus nibh, nec tempus eros pellentesque ac.
</p>
<p>
Curabitur tempus massa dolor, nec congue purus efficitur id. Phasellus a dictum mauris. In porta nulla lectus, pretium semper erat semper id. Fusce ornare fringilla mi, ut auctor tortor semper non. Aliquam sed felis fermentum, molestie dolor vel, eleifend
diam. Donec accumsan bibendum mi, sed pretium tortor pulvinar nec. Aliquam et metus accumsan, pretium neque eu, elementum ipsum. Nam dapibus risus sed velit viverra, non consequat nibh pretium. Morbi nec gravida turpis. Quisque convallis justo ut rhoncus
porttitor. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
</p>
<h5>This is a header (h5) with column-span: all set on it</h5>
<p>
Proin fringilla, sapien molestie mattis commodo, leo ligula viverra massa, eget semper leo purus sit amet est. Quisque eu diam interdum, pretium dui sed, dictum sem. Sed cursus eu est in ultrices. Suspendisse eleifend imperdiet lectus eu consectetur.
Duis semper libero nec magna commodo, sollicitudin pharetra magna luctus. Fusce pellentesque sollicitudin dolor, eu scelerisque elit condimentum vel. Curabitur id condimentum nisi, eu rhoncus arcu. Proin metus purus, condimentum nec semper vitae, blandit
at leo. Proin commodo et ipsum ac euismod. Aliquam erat volutpat. Nam neque nisi, ornare sit amet metus ac, faucibus tempor nulla. Quisque tristique malesuada finibus. Praesent fermentum posuere urna, a blandit risus sollicitudin nec.
</p>
</div>
Using 'break-inside: avoid;' each paragraph
In the solution I attached, I gave each DIV a break-avoid class to avoid breaking in the middle of the paragraph.
Like you asked, if the paragraph is not over yet you can scroll down. I added a gray color that you can see in the paragraphs.
You can control when it will break and you can also insert a div into a div if you want it in sequence.
Hope the solution is effective for you.
.columns {
columns: 5 250px;
}
.columns * {
max-width: 100%;
}
.break-avoid{
break-inside: avoid;
background-color: #ccc;
}
<div class="columns">
<div class="introduction break-avoid">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas posuere dictum tincidunt. Cras in lectus eget libero suscipit venenatis at sit amet dolor. Donec tempor cursus justo, volutpat sodales dolor tempor eu.</p>
<p class="a-class">Pellentesque nec tempor sapien, sed vehicula sem. Ut pretium leo eget nisi cursus viverra. Ut ultrices porta nibh, sed laoreet felis condimentum sit amet. Aliquam a felis nec urna dignissim placerat sed sit amet elit. Donec elementum sagittis purus, facilisis convallis urna dapibus eu. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam erat volutpat. Phasellus vel placerat metus. In efficitur enim eget lacinia ultrices. Duis ultricies dignissim nisi, id ultricies nulla venenatis vitae.</p>
</div>
<img src="https://i.kym-cdn.com/entries/icons/original/000/016/546/hidethepainharold.jpg">
<div class="body break-avoid" style="">
<div>
<p>Suspendisse quis ante ullamcorper, lobortis orci ut, vestibulum dolor. Aenean sit amet purus commodo, sagittis leo vel, consequat nisi. Vestibulum sit amet sem vitae sapien pulvinar finibus. Ut sapien purus, luctus condimentum iaculis quis, lobortis at elit. Cras nulla ante, scelerisque ut aliquet in, elementum vel turpis. Vestibulum ipsum magna, congue sit amet sodales vel, aliquam vel nunc.Suspendisse quis ante ullamcorper, lobortis orci ut, vestibulum dolor. Aenean sit amet purus commodo, sagittis leo vel, consequat nisi. Vestibulum sit amet sem vitae sapien pulvinar finibus. Ut sapien purus, luctus condimentum iaculis quis, lobortis at elit. Cras nulla ante, scelerisque ut aliquet in, elementum vel turpis. Vestibulum ipsum magna, congue sit amet sodales vel, aliquam vel nunc.Suspendisse quis ante ullamcorper, lobortis orci ut, vestibulum dolor. Aenean sit amet purus commodo, sagittis leo vel, consequat nisi. Vestibulum sit amet sem vitae sapien pulvinar finibus. Ut sapien purus, luctus condimentum iaculis quis, lobortis at elit. Cras nulla ante, scelerisque ut aliquet in, elementum vel turpis. Vestibulum ipsum magna, congue sit amet sodales vel, aliquam vel nunc.Suspendisse quis ante ullamcorper, lobortis orci ut, vestibulum dolor. Aenean sit amet purus commodo, sagittis leo vel, consequat nisi. Vestibulum sit amet sem vitae sapien pulvinar finibus. Ut sapien purus, luctus condimentum iaculis quis, lobortis at elit. Cras nulla ante, scelerisque ut aliquet in, elementum vel turpis. Vestibulum ipsum magna, congue sit amet sodales vel, aliquam vel nunc. <img src="https://upload.wikimedia.org/wikipedia/commons/e/e0/SNice.svg" width="100"> Sed eu dapibus nulla. In ut libero sit amet elit elementum gravida. Suspendisse quis quam consequat, pretium felis vel, laoreet turpis. Proin fringilla lobortis magna. Duis quam sapien, sodales nec accumsan id, ullamcorper eget tellus. Aliquam vitae orci cursus, porttitor ligula ut, fringilla odio. Donec a lorem ac eros interdum varius ultricies quis nulla.</p>
</div>
</div>
<p class="break-avoid" contenteditable="true">Nunc in elit tincidunt, ultrices massa sed, ultricies elit. In nec accumsan metus. Nullam ultricies eget tortor ut malesuada. Fusce in elit sit amet dolor bibendum malesuada.</p>
<div style="display:none;" class="break-avoid">
<p>Curabitur sed hendrerit massa, vitae porta enim.</p>
</div>
<div class="break-avoid"><div><span>hey</span><div id="an-id">
Nullam ultricies eget tortor ut malesuada. Fusce in elit sit amet dolor bibendum malesuada. Nulla sed nisi vel nulla aliquam blandit. Nam vel tellus ut libero ultrices volutpat. Curabitur blandit quis arcu rutrum ullamcorper. Cras et pharetra augue, eget eleifend sem.
<img src="https://socialnewsdaily.com/wp-content/uploads/2018/08/Webp.net-resizeimage-27.jpg">
</div></div></div>
<div class="break-avoid">
<p>
Mauris accumsan condimentum porttitor. Quisque tellus justo, suscipit sit amet posuere in, scelerisque nec orci. Aenean iaculis nisi in porta viverra. Sed eget ultricies nibh. Donec accumsan laoreet interdum. Donec risus mauris, dapibus et pulvinar at, posuere non nisi. Mauris at viverra nunc. Ut laoreet suscipit erat et cursus. Aenean id lacus volutpat lectus condimentum posuere. Nam ut lectus elit. Morbi sagittis elementum libero. Donec congue dolor sed tristique efficitur.
</p>
</div>
<div class="break-avoid">
<p>Sed elementum velit sapien, et tristique justo bibendum at. Aliquam tincidunt magna nec nisi congue varius. Etiam dolor eros, rhoncus quis purus a, tempus malesuada quam. Sed bibendum condimentum eros vitae varius. Donec fermentum magna vel tellus tempus, nec finibus neque fermentum. Mauris tempus nisl sit amet lacus fermentum, at egestas urna egestas.</p>
<p>Interdum et malesuada fames ac ante ipsum primis in faucibus. Suspendisse ultrices lectus vitae nisl congue, sed porta dolor luctus. Donec aliquet at sapien sit amet tincidunt. Mauris vestibulum consectetur augue at imperdiet.</p>
</div>
</div>

How to redirect to an anchor tag without having the page refresh?

I am attempting to navigate to a section of the same page using anchor tags without having the page refresh because I have a form that would lose data if the page refreshes.
For some reason, when searching for this question, all of the answers seem to address everything but this specific issue. I don't have a reference whether this can be done in pure HTML, Javascript, or JQuery or even using anchor tags. I would just like the ability to scroll to a section of the same page without having to refresh.
Page code:
<div>
Link Test
stuff here
<section id="faq">
</section>
</div>
Update
It seems like what I was looking for was scrollIntoView() and not an anchor tag
To get this affect you need to use AJAX request. When get response you can append or replace some element in current page. You can see this, or this
as examples.
It can be done with an anchor tag:
<div>
Link to some content
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vitae elit ultrices, ornare metus ac, vehicula magna. Morbi sem metus, vulputate sit amet nunc at, aliquet luctus nisl. Pellentesque congue commodo turpis non luctus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Morbi sed velit et nibh congue faucibus. Suspendisse dapibus leo eget nisl tincidunt placerat. Sed gravida ante quis erat tincidunt, nec auctor sapien volutpat.</p>
<p>
Sed aliquet blandit purus sit amet viverra. Etiam semper, magna ac dapibus luctus, sapien purus vulputate risus, a aliquet magna lorem ac quam. Etiam sagittis pellentesque felis. Ut vitae accumsan mauris, eu facilisis sem. Maecenas viverra commodo odio, sed convallis felis elementum eget. Vivamus imperdiet euismod velit rutrum pulvinar. In gravida nisi tortor, id dignissim nibh malesuada id. Phasellus at commodo neque, pellentesque posuere felis. Mauris sed accumsan tellus, a ultricies est. Quisque arcu sapien, vehicula et eleifend eu, sollicitudin non nibh. Duis in convallis mi. Vivamus ut metus justo. Phasellus pharetra posuere felis eget maximus. Duis ut diam eros.</p>
<p>
Donec consectetur velit ut metus mattis convallis. Nullam eleifend scelerisque diam, vitae pharetra nunc varius et. Sed tortor dui, cursus fringilla maximus non, sollicitudin in justo. Mauris volutpat rutrum nisi, quis condimentum nisi maximus sit amet. Sed vitae lacus sit amet nisi ultrices aliquam. Vestibulum ut aliquet dolor. Aenean ullamcorper mi dolor, vel pharetra justo hendrerit id. Proin condimentum lacinia quam placerat pretium. Duis varius mi eget enim dignissim, vulputate condimentum justo congue. Proin quis interdum nunc. Duis et tellus justo.</p>
<p>
Ut vel nibh in erat cursus maximus a sed nisi. Aliquam vulputate tincidunt est. Praesent euismod nulla eu posuere bibendum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec consectetur est eu felis porttitor hendrerit. Duis sollicitudin, dui pulvinar egestas scelerisque, turpis risus convallis risus, ut pharetra est erat vitae eros. Donec eu metus elementum, viverra nulla et, condimentum risus. Curabitur dapibus aliquet magna ut vestibulum. Donec in dui sit amet risus maximus consectetur.</p>
<p>
Quisque auctor commodo nulla ac condimentum. Duis maximus mauris lacinia malesuada pulvinar. Donec enim nibh, pharetra sed dolor ac, euismod imperdiet felis. Donec a nibh turpis. Nam blandit erat velit, ac rutrum risus dictum ut. Morbi et sollicitudin ligula. Aliquam id libero massa. Proin pellentesque tincidunt volutpat. Curabitur magna erat, auctor a magna vitae, eleifend viverra neque.</p>
<section id="contentId">
Some content far below
</section>
</div>
Or, with JS, using the location.hash property:
function navigateTo(id) {
window.location.hash = id;
}
<div>
<button type="button" onclick="navigateTo('contentId')">Link to some content</button>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vitae elit ultrices, ornare metus ac, vehicula magna. Morbi sem metus, vulputate sit amet nunc at, aliquet luctus nisl. Pellentesque congue commodo turpis non luctus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Morbi sed velit et nibh congue faucibus. Suspendisse dapibus leo eget nisl tincidunt placerat. Sed gravida ante quis erat tincidunt, nec auctor sapien volutpat.</p>
<p>
Sed aliquet blandit purus sit amet viverra. Etiam semper, magna ac dapibus luctus, sapien purus vulputate risus, a aliquet magna lorem ac quam. Etiam sagittis pellentesque felis. Ut vitae accumsan mauris, eu facilisis sem. Maecenas viverra commodo odio, sed convallis felis elementum eget. Vivamus imperdiet euismod velit rutrum pulvinar. In gravida nisi tortor, id dignissim nibh malesuada id. Phasellus at commodo neque, pellentesque posuere felis. Mauris sed accumsan tellus, a ultricies est. Quisque arcu sapien, vehicula et eleifend eu, sollicitudin non nibh. Duis in convallis mi. Vivamus ut metus justo. Phasellus pharetra posuere felis eget maximus. Duis ut diam eros.</p>
<p>
Donec consectetur velit ut metus mattis convallis. Nullam eleifend scelerisque diam, vitae pharetra nunc varius et. Sed tortor dui, cursus fringilla maximus non, sollicitudin in justo. Mauris volutpat rutrum nisi, quis condimentum nisi maximus sit amet. Sed vitae lacus sit amet nisi ultrices aliquam. Vestibulum ut aliquet dolor. Aenean ullamcorper mi dolor, vel pharetra justo hendrerit id. Proin condimentum lacinia quam placerat pretium. Duis varius mi eget enim dignissim, vulputate condimentum justo congue. Proin quis interdum nunc. Duis et tellus justo.</p>
<p>
Ut vel nibh in erat cursus maximus a sed nisi. Aliquam vulputate tincidunt est. Praesent euismod nulla eu posuere bibendum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec consectetur est eu felis porttitor hendrerit. Duis sollicitudin, dui pulvinar egestas scelerisque, turpis risus convallis risus, ut pharetra est erat vitae eros. Donec eu metus elementum, viverra nulla et, condimentum risus. Curabitur dapibus aliquet magna ut vestibulum. Donec in dui sit amet risus maximus consectetur.</p>
<p>
Quisque auctor commodo nulla ac condimentum. Duis maximus mauris lacinia malesuada pulvinar. Donec enim nibh, pharetra sed dolor ac, euismod imperdiet felis. Donec a nibh turpis. Nam blandit erat velit, ac rutrum risus dictum ut. Morbi et sollicitudin ligula. Aliquam id libero massa. Proin pellentesque tincidunt volutpat. Curabitur magna erat, auctor a magna vitae, eleifend viverra neque.</p>
<section id="contentId">
Some content far below
</section>
</div>

jQuery - Scroll page down by 100 pixels on page load

I am trying to scroll a page down by 100px on page load using jQuery. I have this so far..
jQuery(window).load(function() {
window.scrollBy(0, 100);
});
body {
background:lightgray;
}
h1, h2 {
text-align:center;
}
.center {
text-align:center;
width:100%;
object-fit:cover;
height:200px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h1>
Title
</h1>
<h2>
Subtitle
</h2>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque mollis quam in orci consequat, a lacinia leo ultricies. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Phasellus eu eros tellus. Maecenas suscipit ultricies vehicula. Proin viverra velit magna, id consequat urna varius non. Pellentesque dictum libero sed justo suscipit ullamcorper. Nulla mollis mi eu hendrerit viverra. Nam consectetur quam condimentum elit aliquam euismod. Vivamus convallis at urna a convallis. In imperdiet nulla et cursus ultricies. Vestibulum sed dictum justo.
</p>
<p>
Nullam quis iaculis nisi. Nullam in justo id tellus eleifend pharetra a a nunc. Suspendisse ante nunc, auctor in purus vitae, ultricies molestie neque. Etiam in ultricies erat, sit amet venenatis sem. In id nulla finibus, luctus massa a, efficitur libero. Ut mollis metus at eros faucibus, ut ornare lectus ultrices. Ut dignissim venenatis erat, vel tincidunt risus gravida quis. Nullam nec sem elit. Fusce vehicula lectus non augue dictum aliquet. Donec finibus eros ut ante fermentum semper vel et sem. Pellentesque purus magna, ornare at nisi non, blandit pulvinar libero. Fusce nisl lectus, aliquet et aliquet ac, consectetur in metus. Duis diam mi, malesuada mollis dignissim ac, semper id nisl. Integer pulvinar sem non condimentum congue.
</p>
<img class="center" src="http://lorempixel.com/g/600/300/">
<p>
Fusce quam sem, rutrum sit amet finibus at, varius ut sem. Integer venenatis vitae nisi suscipit commodo. Integer nec erat dui. Sed aliquet consectetur elit quis blandit. Mauris condimentum tortor arcu, ut vehicula elit euismod vel. Vestibulum non consectetur nunc, non ornare mi. Nulla eu maximus tortor. Ut velit dolor, ultrices at feugiat feugiat, condimentum a nisi. Vivamus at eleifend turpis. Pellentesque sed varius lorem, vitae eleifend ante. Donec id feugiat felis. Vestibulum id sagittis augue.
</p>
<p>
Fusce sit amet risus ligula. Phasellus facilisis, orci eu tempus venenatis, metus dolor euismod nulla, vitae pulvinar diam metus ac augue. Quisque auctor lectus vitae erat pretium, et scelerisque urna bibendum. Nunc efficitur ornare risus eget tincidunt. Aliquam sit amet ultrices nulla. Praesent eget tempus dolor. Cras molestie mi et consequat malesuada. Cras vel mattis purus. Fusce vel mattis urna, in semper sem. Maecenas convallis faucibus quam, eu fermentum nisl hendrerit sed. Duis ullamcorper mattis laoreet. Cras feugiat egestas diam, ut viverra dolor elementum ac. Ut ac odio purus. Maecenas eget malesuada urna, eu aliquam odio.
</p>
<p>
Nam et nulla sed lorem eleifend pretium at ultrices lorem. Duis viverra tristique posuere. Sed scelerisque odio et viverra molestie. Donec varius id neque in commodo. Proin dui ipsum, pharetra vitae quam vitae, blandit feugiat velit. Proin sed malesuada urna. Donec ut luctus leo, a fringilla lacus. Duis at leo lorem. Duis vestibulum tincidunt mi, ac varius risus scelerisque eget. Mauris ut hendrerit nunc. Aliquam porta, justo a sagittis faucibus, lacus dolor condimentum enim, nec laoreet odio dui quis elit.
</p>
<img class="center" src="http://lorempixel.com/g/600/299/">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque mollis quam in orci consequat, a lacinia leo ultricies. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Phasellus eu eros tellus. Maecenas suscipit ultricies vehicula. Proin viverra velit magna, id consequat urna varius non. Pellentesque dictum libero sed justo suscipit ullamcorper. Nulla mollis mi eu hendrerit viverra. Nam consectetur quam condimentum elit aliquam euismod. Vivamus convallis at urna a convallis. In imperdiet nulla et cursus ultricies. Vestibulum sed dictum justo.
</p>
<p>
Nullam quis iaculis nisi. Nullam in justo id tellus eleifend pharetra a a nunc. Suspendisse ante nunc, auctor in purus vitae, ultricies molestie neque. Etiam in ultricies erat, sit amet venenatis sem. In id nulla finibus, luctus massa a, efficitur libero. Ut mollis metus at eros faucibus, ut ornare lectus ultrices. Ut dignissim venenatis erat, vel tincidunt risus gravida quis. Nullam nec sem elit. Fusce vehicula lectus non augue dictum aliquet. Donec finibus eros ut ante fermentum semper vel et sem. Pellentesque purus magna, ornare at nisi non, blandit pulvinar libero. Fusce nisl lectus, aliquet et aliquet ac, consectetur in metus. Duis diam mi, malesuada mollis dignissim ac, semper id nisl. Integer pulvinar sem non condimentum congue.
</p>
<p>
Fusce quam sem, rutrum sit amet finibus at, varius ut sem. Integer venenatis vitae nisi suscipit commodo. Integer nec erat dui. Sed aliquet consectetur elit quis blandit. Mauris condimentum tortor arcu, ut vehicula elit euismod vel. Vestibulum non consectetur nunc, non ornare mi. Nulla eu maximus tortor. Ut velit dolor, ultrices at feugiat feugiat, condimentum a nisi. Vivamus at eleifend turpis. Pellentesque sed varius lorem, vitae eleifend ante. Donec id feugiat felis. Vestibulum id sagittis augue.
</p>
<p>
Fusce sit amet risus ligula. Phasellus facilisis, orci eu tempus venenatis, metus dolor euismod nulla, vitae pulvinar diam metus ac augue. Quisque auctor lectus vitae erat pretium, et scelerisque urna bibendum. Nunc efficitur ornare risus eget tincidunt. Aliquam sit amet ultrices nulla. Praesent eget tempus dolor. Cras molestie mi et consequat malesuada. Cras vel mattis purus. Fusce vel mattis urna, in semper sem. Maecenas convallis faucibus quam, eu fermentum nisl hendrerit sed. Duis ullamcorper mattis laoreet. Cras feugiat egestas diam, ut viverra dolor elementum ac. Ut ac odio purus. Maecenas eget malesuada urna, eu aliquam odio.
</p>
<img class="center" src="http://lorempixel.com/g/600/301/">
<p>
Nam et nulla sed lorem eleifend pretium at ultrices lorem. Duis viverra tristique posuere. Sed scelerisque odio et viverra molestie. Donec varius id neque in commodo. Proin dui ipsum, pharetra vitae quam vitae, blandit feugiat velit. Proin sed malesuada urna. Donec ut luctus leo, a fringilla lacus. Duis at leo lorem. Duis vestibulum tincidunt mi, ac varius risus scelerisque eget. Mauris ut hendrerit nunc. Aliquam porta, justo a sagittis faucibus, lacus dolor condimentum enim, nec laoreet odio dui quis elit.
</p>
I am getting a script error, can anyone see why?
jQuery load is different, window.onload is different
use this code
$(window).on("load", function() {
window.scrollBy(0, 500);
});
$(window).on("load", function() {
window.scrollBy(0, 500);
});
body {
background:lightgray;
}
h1, h2 {
text-align:center;
}
.center {
text-align:center;
width:100%;
object-fit:cover;
height:200px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h1>
Title
</h1>
<h2>
Subtitle
</h2>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque mollis quam in orci consequat, a lacinia leo ultricies. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Phasellus eu eros tellus. Maecenas suscipit ultricies vehicula. Proin viverra velit magna, id consequat urna varius non. Pellentesque dictum libero sed justo suscipit ullamcorper. Nulla mollis mi eu hendrerit viverra. Nam consectetur quam condimentum elit aliquam euismod. Vivamus convallis at urna a convallis. In imperdiet nulla et cursus ultricies. Vestibulum sed dictum justo.
</p>
<p>
Nullam quis iaculis nisi. Nullam in justo id tellus eleifend pharetra a a nunc. Suspendisse ante nunc, auctor in purus vitae, ultricies molestie neque. Etiam in ultricies erat, sit amet venenatis sem. In id nulla finibus, luctus massa a, efficitur libero. Ut mollis metus at eros faucibus, ut ornare lectus ultrices. Ut dignissim venenatis erat, vel tincidunt risus gravida quis. Nullam nec sem elit. Fusce vehicula lectus non augue dictum aliquet. Donec finibus eros ut ante fermentum semper vel et sem. Pellentesque purus magna, ornare at nisi non, blandit pulvinar libero. Fusce nisl lectus, aliquet et aliquet ac, consectetur in metus. Duis diam mi, malesuada mollis dignissim ac, semper id nisl. Integer pulvinar sem non condimentum congue.
</p>
<img class="center" src="http://lorempixel.com/g/600/300/">
<p>
Fusce quam sem, rutrum sit amet finibus at, varius ut sem. Integer venenatis vitae nisi suscipit commodo. Integer nec erat dui. Sed aliquet consectetur elit quis blandit. Mauris condimentum tortor arcu, ut vehicula elit euismod vel. Vestibulum non consectetur nunc, non ornare mi. Nulla eu maximus tortor. Ut velit dolor, ultrices at feugiat feugiat, condimentum a nisi. Vivamus at eleifend turpis. Pellentesque sed varius lorem, vitae eleifend ante. Donec id feugiat felis. Vestibulum id sagittis augue.
</p>
<p>
Fusce sit amet risus ligula. Phasellus facilisis, orci eu tempus venenatis, metus dolor euismod nulla, vitae pulvinar diam metus ac augue. Quisque auctor lectus vitae erat pretium, et scelerisque urna bibendum. Nunc efficitur ornare risus eget tincidunt. Aliquam sit amet ultrices nulla. Praesent eget tempus dolor. Cras molestie mi et consequat malesuada. Cras vel mattis purus. Fusce vel mattis urna, in semper sem. Maecenas convallis faucibus quam, eu fermentum nisl hendrerit sed. Duis ullamcorper mattis laoreet. Cras feugiat egestas diam, ut viverra dolor elementum ac. Ut ac odio purus. Maecenas eget malesuada urna, eu aliquam odio.
</p>
<p>
Nam et nulla sed lorem eleifend pretium at ultrices lorem. Duis viverra tristique posuere. Sed scelerisque odio et viverra molestie. Donec varius id neque in commodo. Proin dui ipsum, pharetra vitae quam vitae, blandit feugiat velit. Proin sed malesuada urna. Donec ut luctus leo, a fringilla lacus. Duis at leo lorem. Duis vestibulum tincidunt mi, ac varius risus scelerisque eget. Mauris ut hendrerit nunc. Aliquam porta, justo a sagittis faucibus, lacus dolor condimentum enim, nec laoreet odio dui quis elit.
</p>
<img class="center" src="http://lorempixel.com/g/600/299/">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque mollis quam in orci consequat, a lacinia leo ultricies. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Phasellus eu eros tellus. Maecenas suscipit ultricies vehicula. Proin viverra velit magna, id consequat urna varius non. Pellentesque dictum libero sed justo suscipit ullamcorper. Nulla mollis mi eu hendrerit viverra. Nam consectetur quam condimentum elit aliquam euismod. Vivamus convallis at urna a convallis. In imperdiet nulla et cursus ultricies. Vestibulum sed dictum justo.
</p>
<p>
Nullam quis iaculis nisi. Nullam in justo id tellus eleifend pharetra a a nunc. Suspendisse ante nunc, auctor in purus vitae, ultricies molestie neque. Etiam in ultricies erat, sit amet venenatis sem. In id nulla finibus, luctus massa a, efficitur libero. Ut mollis metus at eros faucibus, ut ornare lectus ultrices. Ut dignissim venenatis erat, vel tincidunt risus gravida quis. Nullam nec sem elit. Fusce vehicula lectus non augue dictum aliquet. Donec finibus eros ut ante fermentum semper vel et sem. Pellentesque purus magna, ornare at nisi non, blandit pulvinar libero. Fusce nisl lectus, aliquet et aliquet ac, consectetur in metus. Duis diam mi, malesuada mollis dignissim ac, semper id nisl. Integer pulvinar sem non condimentum congue.
</p>
<p>
Fusce quam sem, rutrum sit amet finibus at, varius ut sem. Integer venenatis vitae nisi suscipit commodo. Integer nec erat dui. Sed aliquet consectetur elit quis blandit. Mauris condimentum tortor arcu, ut vehicula elit euismod vel. Vestibulum non consectetur nunc, non ornare mi. Nulla eu maximus tortor. Ut velit dolor, ultrices at feugiat feugiat, condimentum a nisi. Vivamus at eleifend turpis. Pellentesque sed varius lorem, vitae eleifend ante. Donec id feugiat felis. Vestibulum id sagittis augue.
</p>
<p>
Fusce sit amet risus ligula. Phasellus facilisis, orci eu tempus venenatis, metus dolor euismod nulla, vitae pulvinar diam metus ac augue. Quisque auctor lectus vitae erat pretium, et scelerisque urna bibendum. Nunc efficitur ornare risus eget tincidunt. Aliquam sit amet ultrices nulla. Praesent eget tempus dolor. Cras molestie mi et consequat malesuada. Cras vel mattis purus. Fusce vel mattis urna, in semper sem. Maecenas convallis faucibus quam, eu fermentum nisl hendrerit sed. Duis ullamcorper mattis laoreet. Cras feugiat egestas diam, ut viverra dolor elementum ac. Ut ac odio purus. Maecenas eget malesuada urna, eu aliquam odio.
</p>
<img class="center" src="http://lorempixel.com/g/600/301/">
<p>
Nam et nulla sed lorem eleifend pretium at ultrices lorem. Duis viverra tristique posuere. Sed scelerisque odio et viverra molestie. Donec varius id neque in commodo. Proin dui ipsum, pharetra vitae quam vitae, blandit feugiat velit. Proin sed malesuada urna. Donec ut luctus leo, a fringilla lacus. Duis at leo lorem. Duis vestibulum tincidunt mi, ac varius risus scelerisque eget. Mauris ut hendrerit nunc. Aliquam porta, justo a sagittis faucibus, lacus dolor condimentum enim, nec laoreet odio dui quis elit.
</p>

Jquery/Javascript - Capture the position of the page screen or an element

I need to get a position of a DIV relative to the body or html tag.
So for example:
I have a element going up the screen.
When you scroll the page vertically, and the DIV is at certain height on the screen, it changes color.
When the DIV is off the screen, it changes back to its normal color.
I have done something similar to this, but I have to use Next/Previous buttons for it:
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
var number = 0;
var goSign = "";
function goToByScroll(id){
$('html,body').animate({scrollTop: $("#"+id).offset().top-100},'slow','swing', function()
{
$('#'+id).css('background', '#8b00cb');
$('#'+(id-1)).css('background', 'none');
$('#'+(id+1)).css('background', 'none');
});
}
function iterate(goSign)
{
if(goSign == "next")
{
if(number < 12 && number >= 0)
{
goToByScroll(++number);
}
//alert(number);
}
else if(goSign == "previous")
{
if(number <= 12 && number >= 1)
{
goToByScroll(--number);
}
//alert(number);
}
}
</script>
</head>
<body>
<div style = "position:fixed; top:90px;right:200px;width:200px;height:50px">
Next<br/>
Previous
</div>
<div style="width:600px">
<div id="1">
<h1>1</h1>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin orci erat, gravida vitae auctor sed, fringilla sit amet sem. Etiam scelerisque, ligula ac scelerisque egestas, sem arcu commodo ligula, in imperdiet arcu ipsum nec magna. Proin purus tellus, dictum at volutpat tempor, ultrices ut arcu. Nam ut diam vitae dui tristique tincidunt sed a est. Aenean rutrum, lectus at laoreet consectetur, erat leo vestibulum massa, eu pellentesque justo nisi a arcu. Aliquam fermentum volutpat eros, sed tempus dolor luctus eget. Sed sodales dapibus nisi ut venenatis. Phasellus suscipit risus nunc, non adipiscing purus. Morbi tristique dolor ac lacus euismod lacinia. Praesent ac nisi nec elit pharetra pulvinar. Vestibulum porttitor turpis vitae velit pretium vitae tincidunt sapien varius. Nullam suscipit malesuada elit, et lacinia mauris pretium id. In sem felis, fermentum nec lobortis vel, elementum quis odio. Nullam bibendum magna quis lacus condimentum ut vestibulum nunc ultricies. In augue nisl, tincidunt vel convallis a, pretium vel diam. Sed tincidunt odio sit amet nulla cursus porta. Aenean sed quam sem, a semper mauris. Maecenas ac nulla metus.
</div>
<div id="2">
<h1>2</h1>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin orci erat, gravida vitae auctor sed, fringilla sit amet sem. Etiam scelerisque, ligula ac scelerisque egestas, sem arcu commodo ligula, in imperdiet arcu ipsum nec magna. Proin purus tellus, dictum at volutpat tempor, ultrices ut arcu. Nam ut diam vitae dui tristique tincidunt sed a est. Aenean rutrum, lectus at laoreet consectetur, erat leo vestibulum massa, eu pellentesque justo nisi a arcu. Aliquam fermentum volutpat eros, sed tempus dolor luctus eget. Sed sodales dapibus nisi ut venenatis. Phasellus suscipit risus nunc, non adipiscing purus. Morbi tristique dolor ac lacus euismod lacinia. Praesent ac nisi nec elit pharetra pulvinar. Vestibulum porttitor turpis vitae velit pretium vitae tincidunt sapien varius. Nullam suscipit malesuada elit, et lacinia mauris pretium id. In sem felis, fermentum nec lobortis vel, elementum quis odio. Nullam bibendum magna quis lacus condimentum ut vestibulum nunc ultricies. In augue nisl, tincidunt vel convallis a, pretium vel diam. Sed tincidunt odio sit amet nulla cursus porta. Aenean sed quam sem, a semper mauris. Maecenas ac nulla metus.
</div>
<div id="3">
<h1>3</h1>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin orci erat, gravida vitae auctor sed, fringilla sit amet sem. Etiam scelerisque, ligula ac scelerisque egestas, sem arcu commodo ligula, in imperdiet arcu ipsum nec magna. Proin purus tellus, dictum at volutpat tempor, ultrices ut arcu. Nam ut diam vitae dui tristique tincidunt sed a est. Aenean rutrum, lectus at laoreet consectetur, erat leo vestibulum massa, eu pellentesque justo nisi a arcu. Aliquam fermentum volutpat eros, sed tempus dolor luctus eget. Sed sodales dapibus nisi ut venenatis. Phasellus suscipit risus nunc, non adipiscing purus. Morbi tristique dolor ac lacus euismod lacinia. Praesent ac nisi nec elit pharetra pulvinar. Vestibulum porttitor turpis vitae velit pretium vitae tincidunt sapien varius. Nullam suscipit malesuada elit, et lacinia mauris pretium id. In sem felis, fermentum nec lobortis vel, elementum quis odio. Nullam bibendum magna quis lacus condimentum ut vestibulum nunc ultricies. In augue nisl, tincidunt vel convallis a, pretium vel diam. Sed tincidunt odio sit amet nulla cursus porta. Aenean sed quam sem, a semper mauris. Maecenas ac nulla metus.
</div>
<div id="4">
<h1>4</h1>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin orci erat, gravida vitae auctor sed, fringilla sit amet sem. Etiam scelerisque, ligula ac scelerisque egestas, sem arcu commodo ligula, in imperdiet arcu ipsum nec magna. Proin purus tellus, dictum at volutpat tempor, ultrices ut arcu. Nam ut diam vitae dui tristique tincidunt sed a est. Aenean rutrum, lectus at laoreet consectetur, erat leo vestibulum massa, eu pellentesque justo nisi a arcu. Aliquam fermentum volutpat eros, sed tempus dolor luctus eget. Sed sodales dapibus nisi ut venenatis. Phasellus suscipit risus nunc, non adipiscing purus. Morbi tristique dolor ac lacus euismod lacinia. Praesent ac nisi nec elit pharetra pulvinar. Vestibulum porttitor turpis vitae velit pretium vitae tincidunt sapien varius. Nullam suscipit malesuada elit, et lacinia mauris pretium id. In sem felis, fermentum nec lobortis vel, elementum quis odio. Nullam bibendum magna quis lacus condimentum ut vestibulum nunc ultricies. In augue nisl, tincidunt vel convallis a, pretium vel diam. Sed tincidunt odio sit amet nulla cursus porta. Aenean sed quam sem, a semper mauris. Maecenas ac nulla metus.
</div>
<div id="5">
<h1>1</h1>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin orci erat, gravida vitae auctor sed, fringilla sit amet sem. Etiam scelerisque, ligula ac scelerisque egestas, sem arcu commodo ligula, in imperdiet arcu ipsum nec magna. Proin purus tellus, dictum at volutpat tempor, ultrices ut arcu. Nam ut diam vitae dui tristique tincidunt sed a est. Aenean rutrum, lectus at laoreet consectetur, erat leo vestibulum massa, eu pellentesque justo nisi a arcu. Aliquam fermentum volutpat eros, sed tempus dolor luctus eget. Sed sodales dapibus nisi ut venenatis. Phasellus suscipit risus nunc, non adipiscing purus. Morbi tristique dolor ac lacus euismod lacinia. Praesent ac nisi nec elit pharetra pulvinar. Vestibulum porttitor turpis vitae velit pretium vitae tincidunt sapien varius. Nullam suscipit malesuada elit, et lacinia mauris pretium id. In sem felis, fermentum nec lobortis vel, elementum quis odio. Nullam bibendum magna quis lacus condimentum ut vestibulum nunc ultricies. In augue nisl, tincidunt vel convallis a, pretium vel diam. Sed tincidunt odio sit amet nulla cursus porta. Aenean sed quam sem, a semper mauris. Maecenas ac nulla metus.
</div>
<div id="6">
<h1>2</h1>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin orci erat, gravida vitae auctor sed, fringilla sit amet sem. Etiam scelerisque, ligula ac scelerisque egestas, sem arcu commodo ligula, in imperdiet arcu ipsum nec magna. Proin purus tellus, dictum at volutpat tempor, ultrices ut arcu. Nam ut diam vitae dui tristique tincidunt sed a est. Aenean rutrum, lectus at laoreet consectetur, erat leo vestibulum massa, eu pellentesque justo nisi a arcu. Aliquam fermentum volutpat eros, sed tempus dolor luctus eget. Sed sodales dapibus nisi ut venenatis. Phasellus suscipit risus nunc, non adipiscing purus. Morbi tristique dolor ac lacus euismod lacinia. Praesent ac nisi nec elit pharetra pulvinar. Vestibulum porttitor turpis vitae velit pretium vitae tincidunt sapien varius. Nullam suscipit malesuada elit, et lacinia mauris pretium id. In sem felis, fermentum nec lobortis vel, elementum quis odio. Nullam bibendum magna quis lacus condimentum ut vestibulum nunc ultricies. In augue nisl, tincidunt vel convallis a, pretium vel diam. Sed tincidunt odio sit amet nulla cursus porta. Aenean sed quam sem, a semper mauris. Maecenas ac nulla metus.
</div>
<div id="7">
<h1>3</h1>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin orci erat, gravida vitae auctor sed, fringilla sit amet sem. Etiam scelerisque, ligula ac scelerisque egestas, sem arcu commodo ligula, in imperdiet arcu ipsum nec magna. Proin purus tellus, dictum at volutpat tempor, ultrices ut arcu. Nam ut diam vitae dui tristique tincidunt sed a est. Aenean rutrum, lectus at laoreet consectetur, erat leo vestibulum massa, eu pellentesque justo nisi a arcu. Aliquam fermentum volutpat eros, sed tempus dolor luctus eget. Sed sodales dapibus nisi ut venenatis. Phasellus suscipit risus nunc, non adipiscing purus. Morbi tristique dolor ac lacus euismod lacinia. Praesent ac nisi nec elit pharetra pulvinar. Vestibulum porttitor turpis vitae velit pretium vitae tincidunt sapien varius. Nullam suscipit malesuada elit, et lacinia mauris pretium id. In sem felis, fermentum nec lobortis vel, elementum quis odio. Nullam bibendum magna quis lacus condimentum ut vestibulum nunc ultricies. In augue nisl, tincidunt vel convallis a, pretium vel diam. Sed tincidunt odio sit amet nulla cursus porta. Aenean sed quam sem, a semper mauris. Maecenas ac nulla metus.
</div>
<div id="8">
<h1>4</h1>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin orci erat, gravida vitae auctor sed, fringilla sit amet sem. Etiam scelerisque, ligula ac scelerisque egestas, sem arcu commodo ligula, in imperdiet arcu ipsum nec magna. Proin purus tellus, dictum at volutpat tempor, ultrices ut arcu. Nam ut diam vitae dui tristique tincidunt sed a est. Aenean rutrum, lectus at laoreet consectetur, erat leo vestibulum massa, eu pellentesque justo nisi a arcu. Aliquam fermentum volutpat eros, sed tempus dolor luctus eget. Sed sodales dapibus nisi ut venenatis. Phasellus suscipit risus nunc, non adipiscing purus. Morbi tristique dolor ac lacus euismod lacinia. Praesent ac nisi nec elit pharetra pulvinar. Vestibulum porttitor turpis vitae velit pretium vitae tincidunt sapien varius. Nullam suscipit malesuada elit, et lacinia mauris pretium id. In sem felis, fermentum nec lobortis vel, elementum quis odio. Nullam bibendum magna quis lacus condimentum ut vestibulum nunc ultricies. In augue nisl, tincidunt vel convallis a, pretium vel diam. Sed tincidunt odio sit amet nulla cursus porta. Aenean sed quam sem, a semper mauris. Maecenas ac nulla metus.
</div>
<div id="9">
<h1>1</h1>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin orci erat, gravida vitae auctor sed, fringilla sit amet sem. Etiam scelerisque, ligula ac scelerisque egestas, sem arcu commodo ligula, in imperdiet arcu ipsum nec magna. Proin purus tellus, dictum at volutpat tempor, ultrices ut arcu. Nam ut diam vitae dui tristique tincidunt sed a est. Aenean rutrum, lectus at laoreet consectetur, erat leo vestibulum massa, eu pellentesque justo nisi a arcu. Aliquam fermentum volutpat eros, sed tempus dolor luctus eget. Sed sodales dapibus nisi ut venenatis. Phasellus suscipit risus nunc, non adipiscing purus. Morbi tristique dolor ac lacus euismod lacinia. Praesent ac nisi nec elit pharetra pulvinar. Vestibulum porttitor turpis vitae velit pretium vitae tincidunt sapien varius. Nullam suscipit malesuada elit, et lacinia mauris pretium id. In sem felis, fermentum nec lobortis vel, elementum quis odio. Nullam bibendum magna quis lacus condimentum ut vestibulum nunc ultricies. In augue nisl, tincidunt vel convallis a, pretium vel diam. Sed tincidunt odio sit amet nulla cursus porta. Aenean sed quam sem, a semper mauris. Maecenas ac nulla metus.
</div>
<div id="10">
<h1>2</h1>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin orci erat, gravida vitae auctor sed, fringilla sit amet sem. Etiam scelerisque, ligula ac scelerisque egestas, sem arcu commodo ligula, in imperdiet arcu ipsum nec magna. Proin purus tellus, dictum at volutpat tempor, ultrices ut arcu. Nam ut diam vitae dui tristique tincidunt sed a est. Aenean rutrum, lectus at laoreet consectetur, erat leo vestibulum massa, eu pellentesque justo nisi a arcu. Aliquam fermentum volutpat eros, sed tempus dolor luctus eget. Sed sodales dapibus nisi ut venenatis. Phasellus suscipit risus nunc, non adipiscing purus. Morbi tristique dolor ac lacus euismod lacinia. Praesent ac nisi nec elit pharetra pulvinar. Vestibulum porttitor turpis vitae velit pretium vitae tincidunt sapien varius. Nullam suscipit malesuada elit, et lacinia mauris pretium id. In sem felis, fermentum nec lobortis vel, elementum quis odio. Nullam bibendum magna quis lacus condimentum ut vestibulum nunc ultricies. In augue nisl, tincidunt vel convallis a, pretium vel diam. Sed tincidunt odio sit amet nulla cursus porta. Aenean sed quam sem, a semper mauris. Maecenas ac nulla metus.
</div>
<div id="11">
<h1>3</h1>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin orci erat, gravida vitae auctor sed, fringilla sit amet sem. Etiam scelerisque, ligula ac scelerisque egestas, sem arcu commodo ligula, in imperdiet arcu ipsum nec magna. Proin purus tellus, dictum at volutpat tempor, ultrices ut arcu. Nam ut diam vitae dui tristique tincidunt sed a est. Aenean rutrum, lectus at laoreet consectetur, erat leo vestibulum massa, eu pellentesque justo nisi a arcu. Aliquam fermentum volutpat eros, sed tempus dolor luctus eget. Sed sodales dapibus nisi ut venenatis. Phasellus suscipit risus nunc, non adipiscing purus. Morbi tristique dolor ac lacus euismod lacinia. Praesent ac nisi nec elit pharetra pulvinar. Vestibulum porttitor turpis vitae velit pretium vitae tincidunt sapien varius. Nullam suscipit malesuada elit, et lacinia mauris pretium id. In sem felis, fermentum nec lobortis vel, elementum quis odio. Nullam bibendum magna quis lacus condimentum ut vestibulum nunc ultricies. In augue nisl, tincidunt vel convallis a, pretium vel diam. Sed tincidunt odio sit amet nulla cursus porta. Aenean sed quam sem, a semper mauris. Maecenas ac nulla metus.
</div>
<div id="12">
<h1>4</h1>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin orci erat, gravida vitae auctor sed, fringilla sit amet sem. Etiam scelerisque, ligula ac scelerisque egestas, sem arcu commodo ligula, in imperdiet arcu ipsum nec magna. Proin purus tellus, dictum at volutpat tempor, ultrices ut arcu. Nam ut diam vitae dui tristique tincidunt sed a est. Aenean rutrum, lectus at laoreet consectetur, erat leo vestibulum massa, eu pellentesque justo nisi a arcu. Aliquam fermentum volutpat eros, sed tempus dolor luctus eget. Sed sodales dapibus nisi ut venenatis. Phasellus suscipit risus nunc, non adipiscing purus. Morbi tristique dolor ac lacus euismod lacinia. Praesent ac nisi nec elit pharetra pulvinar. Vestibulum porttitor turpis vitae velit pretium vitae tincidunt sapien varius. Nullam suscipit malesuada elit, et lacinia mauris pretium id. In sem felis, fermentum nec lobortis vel, elementum quis odio. Nullam bibendum magna quis lacus condimentum ut vestibulum nunc ultricies. In augue nisl, tincidunt vel convallis a, pretium vel diam. Sed tincidunt odio sit amet nulla cursus porta. Aenean sed quam sem, a semper mauris. Maecenas ac nulla metus.
</div>
</div>
</body>
Is there a way to do this?
I was thinking of using jQuery .position() http://api.jquery.com/position/
.position() will give you the location of an element based on it's offset parent (so if the element is inside an absolutely positioned element you probably won't get the coordinates from the document element).
Try using .offset() instead:
Get the current coordinates of the first element in the set of matched
elements, relative to the document.
Source: http://api.jquery.com/offset
Here is a demo: http://jsfiddle.net/PNCbK/ (JSFiddle seems to be having issues right now, here is a JSBin of the same code: http://jsbin.com/ezobux/edit#javascript,html,live)

Categories