Je fais appel à votre aide concernant un bout de code trouvé sur codepen. En effet, je souhaiterais ajouter une timeline verticale à mon site dans l'idée d'avoir quelque chose de la sorte : https://codepen.io/seomoneyaff/pen/KQZYjo
Le dev ne facilite pas la tâche en utilisant du pug, scss et babel mais j'ai trouvé le moyen de convertir via https://pughtml.com/ ou https://www.cssportal.com/scss-to-css/
J'arrive à quelques chose de la sorte (après conversion html/css/js) :
Code : Tout sélectionner
<html>
<article>
<nav>
<ul>
<li><span>2015</span></li>
<li><span>2016</span></li>
<li><span>2017</span></li>
<li><span>2018</span></li>
<li><span>2019</span></li>
<li><span>2020</span></li>
</ul>
</nav>
<section>
<div>
<h2>2015</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sollicitudin, dolor malesuada mattis tincidunt, dolor urna faucibus dolor, et ornare sem leo sit amet orci. Etiam nec laoreet mauris. Mauris eleifend augue vitae purus viverra, at consectetur dolor pretium. Suspendisse mollis blandit orci, at malesuada mi sodales nec. Vivamus ultrices, quam in rutrum porta, quam leo semper metus, ac varius enim felis pretium leo. In congue nec risus nec tempor. Cras et congue velit. .</p>
<h2>2016</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sollicitudin, dolor malesuada mattis tincidunt, dolor urna faucibus dolor, et ornare sem leo sit amet orci. Etiam nec laoreet mauris. Mauris eleifend augue vitae purus viverra, at consectetur dolor pretium. Suspendisse mollis blandit orci, at malesuada mi sodales nec. Vivamus ultrices, quam in rutrum porta, quam leo semper metus, ac varius enim felis pretium leo. In congue nec risus nec tempor. Cras et congue velit.</p>
<h2>2017</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sollicitudin, dolor malesuada mattis tincidunt, dolor urna faucibus dolor, et ornare sem leo sit amet orci. Etiam nec laoreet mauris. Mauris eleifend augue vitae purus viverra, at consectetur dolor pretium. Suspendisse mollis blandit orci, at malesuada mi sodales nec. Vivamus ultrices, quam in rutrum porta, quam leo semper metus, ac varius enim felis pretium leo. In congue nec risus nec tempor. Cras et congue velit.</p>
<h2>2018</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sollicitudin, dolor malesuada mattis tincidunt, dolor urna faucibus dolor, et ornare sem leo sit amet orci. Etiam nec laoreet mauris. Mauris eleifend augue vitae purus viverra, at consectetur dolor pretium. Suspendisse mollis blandit orci, at malesuada mi sodales nec. Vivamus ultrices, quam in rutrum porta, quam leo semper metus, ac varius enim felis pretium leo. In congue nec risus nec tempor. Cras et congue velit.</p>
<h2>2019</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sollicitudin, dolor malesuada mattis tincidunt, dolor urna faucibus dolor, et ornare sem leo sit amet orci. Etiam nec laoreet mauris. Mauris eleifend augue vitae purus viverra, at consectetur dolor pretium. Suspendisse mollis blandit orci, at malesuada mi sodales nec. Vivamus ultrices, quam in rutrum porta, quam leo semper metus, ac varius enim felis pretium leo. In congue nec risus nec tempor. Cras et congue velit.</p>
<h2>2020</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sollicitudin, dolor malesuada mattis tincidunt, dolor urna faucibus dolor, et ornare sem leo sit amet orci. Etiam nec laoreet mauris. Mauris eleifend augue vitae purus viverra, at consectetur dolor pretium. Suspendisse mollis blandit orci, at malesuada mi sodales nec. Vivamus ultrices, quam in rutrum porta, quam leo semper metus, ac varius enim felis pretium leo. In congue nec risus nec tempor. Cras et congue velit.</p>
</div>
</section>
</article>
</html>
<style>
@import url('https://fonts.googleapis.com/css?family=Exo+2:400,700&subset=cyrillic');
html {
box-sizing: border-box;
}
*, *::before, *::after {
box-sizing: inherit;
}
body {
font-family: 'Exo 2', sans-serif;
line-height: 1.5;
}
.wrapper {
margin: 0 auto;
padding: 0 16.66% 50px;
width: 100%;
}
article {
position: relative;
max-width: 980px;
margin: 0 auto;
}
.timeline__nav {
position: fixed;
z-index: 99;
top: 0;
transition: top 0.3s ease-out;
}
.timeline__nav ul {
list-style: none;
list-style-position: inside;
margin: 15px 0;
}
.timeline__nav ul li {
margin: 15px 0;
padding-left: 0;
list-style-type: none;
color: #bfc1c3;
border-bottom: 1px dotted rgba(0, 0, 0, 0.3);
cursor: pointer;
transition: all 0.3s ease-out;
}
.timeline__nav ul li.active {
font-weight: bold;
color: #f94125;
border-bottom: 1px dotted transparent;
transform: scale(1.2);
}
.timeline__nav ul li:hover {
color: #000;
}
</style>
<script>
$(() => {
let stickyTop = 0,
scrollTarget = false
let timeline = $('.timeline__nav'),
items = $('li', timeline),
milestones = $('.timeline__section .milestone'),
offsetTop = parseInt(timeline.css('top'))
const TIMELINE_VALUES = {
start: 190,
step: 30
}
$(window).resize(function () {
timeline.removeClass('fixed')
stickyTop = timeline.offset().top - offsetTop
$(window).trigger('scroll')
}).trigger('resize')
$(window).scroll(function () {
if ($(window).scrollTop() > stickyTop) {
timeline.addClass('fixed')
} else {
timeline.removeClass('fixed')
}
}).trigger('scroll')
items.find('span').click(function () {
let li = $(this).parent(),
index = li.index(),
milestone = milestones.eq(index)
if (! li.hasClass('active') && milestone.length) {
scrollTarget = index
let scrollTargetTop = milestone.offset().top - 80
$('html, body').animate({ scrollTop: scrollTargetTop }, {
duration: 400,
complete: function complete() {
scrollTarget = false
}
})
}
})
$(window).scroll(function () {
let viewLine = $(window).scrollTop() + $(window).height() / 3,
active = -1
if (scrollTarget === false) {
milestones.each(function () {
if ($(this).offset().top - viewLine > 0) {
return false
}
active++
})
} else {
active = scrollTarget
}
timeline.css('top', -1 * active * TIMELINE_VALUES.step + TIMELINE_VALUES.start + 'px')
items.filter('.active').removeClass('active')
items.eq(active != -1 ? active : 0).addClass('active')
}).trigger('scroll')
})
</script>
Avez vous des pistes ? Merci d'avance
