[英]Intersection Observer (Scroll Animation) not working
I bumped into this problem while watching the Intersection Observer
tutorial .我在看
Intersection Observer
教程时遇到了这个问题。 Mine is a div instead of an image so I did not have to specify an attribute like the one in the video and I believe I almost did everything right as I get 10 console logs because I have 10 divs with a class "box", which were used as a variable in JS file.我的是一个 div 而不是图像,所以我不必指定像视频中那样的属性,我相信我几乎做对了所有事情,因为我得到了 10 个控制台日志,因为我有 10 个带有“box”类的 div,其中被用作 JS 文件中的变量。 I used opacity and transformation for the animation as indicated in CSS.
我对动画使用了不透明度和转换,如 CSS 所示。 I appreciate what I am doing wrong that I cannot see the scroll animation happening.
我很感激我做错了什么,我看不到滚动动画的发生。
const targets = document.querySelectorAll('.box'); const lazyLoad = target => { const io = new IntersectionObserver((entries,observer) => { entries.forEach(entry => { console.log('hello World'); if(entry.isIntersecting) { const div = entry.target; div.classList.add('fade'); observer.disconnect(); } }); }); io.observe(target); }; targets.forEach(lazyLoad);
:root { --primary-color:#425b84; --secondary-color:#5b7bb4; --max-width:1100px; } * { margin:0; padding:0; box-sizing:border-box; } body { font:normal 1rem/1.5 'Arial', sans-serif; background:var(--primary-color); color:#fff; overflow-x:hidden; padding-bottom:50px; } #main-header { background:var(--secondary-color); padding:4rem 0; } .container { max-width:var(--max-width); margin:0 auto; text-align:center; } h1 { font-size:2.3rem; } #timeline ul { background:var(--primary-color); padding:50px 0; } /* Create Line */ #timeline ul li { list-style:none; position: relative; width:6px; margin:0 auto; padding-top:50px; background:#fff; } /* Boxes */ #timeline ul li div { position: relative; bottom:0; width:400px; padding:1rem; background:var(--secondary-color); transition:all 0.5s ease-in-out; opacity:0; } .fade { opacity:1; transition:all 0.5s ease-in-out; transform:translateX(0); } /* Right Side */ #timeline ul li:nth-child(odd) div { left:40px; transform:translateX(1100px); } /* Left Side */ #timeline ul li:nth-child(even) div { left:-434px; transform:translateX(-1100px); } /* Dots */ #timeline ul li:after { content:''; position: absolute; left:50%; bottom:0; width:25px; height:25px; background:var(--secondary-color); transform:translateX(-50%); border-radius:50%; transition:background 0.5s ease-in-out; } /* Arrows Base */ #timeline div:before { content:''; position: absolute; bottom:5px; width:0; height:0; border-style:solid; } /* Right Side Arrows */ #timeline ul li:nth-child(odd) div:before { left:-15px; border-width:8px 16px 8px 0; border-color:transparent var(--secondary-color) transparent transparent; } /* Left Side Arrows */ #timeline ul li:nth-child(even) div:before { right:-15px; border-width:8px 0 8px 16px; border-color:transparent transparent transparent var(--secondary-color); } @media(max-width:900px){ #timeline ul li div { width:250px; } #timeline ul li:nth-child(even) div { left:-284px; } } @media(max-width:600px) { #timeline ul li { margin-left:20px; } #timeline ul li div { width:calc(100vw - 90px); } #timeline ul li:nth-child(even) div { left:40px; } /* Right Side Arrows */ #timeline ul li:nth-child(even) div:before { left:-15px; border-width:8px 16px 8px 0; border-color:transparent var(--secondary-color) transparent transparent; } }
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <script src="https://kit.fontawesome.com/bbb16afe05.js" crossorigin="anonymous"></script> <link rel="stylesheet" href="./css/aos.css"> <link rel="stylesheet" href="./css/style.css"> <title>Knowledge Timeline</title> </head> <body> <header id="main-header"> <div class="container"> <h1><i class="fas fa-brain"></i> Knowledge Resume</h1> <h3><div class="fas fa-user"></div> Jun Jung</h3> </div> </header> <section id="timeline"> <ul> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2007: HTML & CSS</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2009: JavaScript & jQuery</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2010: PHP & Wordpress</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2011: Ruby on Rails</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2012: Python</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> <li> <div class="box" > <h3><i class="fas fa-chevron-right"></i> 2013: Node.js & React</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2014: Angular & React Native</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2015: Vue.js </h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2016:GraphQL & Apollo</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2017: Machine Learning</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> </ul> </section> <script src="./js/main.js"></script> </body> </html>
Your intersection observer is currently targeting the .box
elements which trigger the initial 10 console logs because they exist on the DOM but wont trigger on scroll because they're not on the screen (out of viewport).您的交叉点观察者当前的目标是触发初始 10 个控制台日志的
.box
元素,因为它们存在于 DOM 上,但不会在滚动时触发,因为它们不在屏幕上(在视口外)。
Also, as mentioned in the other answer, you should use a common observer for all your instances.此外,如另一个答案中所述,您应该为所有实例使用一个公共观察者。
However, if you want to use a separate observer for each instance, you can target the .box
element's parent ie the <li>
element and when the <li>
element is scrolled into view, you can just add the class to it's child element which is the .box
element you were targeting earlier using the ParentNode.children property like this:然而,如果你想为每个实例使用一个单独的观察者,你可以定位
.box
元素的父元素,即<li>
元素,当<li>
元素滚动到视图中时,你可以将类添加到它的子元素这是您之前使用ParentNode.children属性定位的.box
元素,如下所示:
const targets = document.querySelectorAll('#timeline li');
const lazyLoad = target => {
const io = new IntersectionObserver((entries,observer) => {
entries.forEach(entry => {
console.log('hello World');
if(entry.isIntersecting) {
const div = entry.target.children[0];
div.classList.add('fade');
observer.disconnect();
}
});
});
io.observe(target);
};
targets.forEach(lazyLoad);
Also, your css #timeline ul li:nth-child(odd) div
style properties is overriding your new .fade
properties because it targetting is more precise.此外,您的 css
#timeline ul li:nth-child(odd) div
样式属性会覆盖您的新.fade
属性,因为它的定位更加精确。 You will need the new .fade
properties to target the .box
element as precise as you did with the initial styles like this:您将需要新的
.fade
属性来像使用初始样式一样精确地定位.box
元素,如下所示:
#timeline ul li:nth-child(odd) div.fade {
opacity:1;
transition:all 0.5s ease-in-out;
transform:translateX(0) !important;
}
#timeline ul li:nth-child(even) div.fade {
opacity:1;
transition:all 0.5s ease-in-out;
transform:translateX(0) !important;
}
Or you can combined the above css like this:或者你可以像这样组合上面的css:
#timeline ul li:nth-child(odd) div.fade, #timeline ul li:nth-child(even) div.fade {
opacity:1;
transition:all 0.5s ease-in-out;
transform:translateX(0) !important;
}
Check and run the following Code Snippet or open this JSFiddle link for a practical example of the above:检查并运行以下代码片段或打开此JSFiddle链接以获取上述实际示例:
const targets = document.querySelectorAll('#timeline li'); const lazyLoad = target => { const io = new IntersectionObserver((entries,observer) => { entries.forEach(entry => { console.log('hello World'); if(entry.isIntersecting) { const div = entry.target.children[0]; div.classList.add('fade'); observer.disconnect(); } }); }); io.observe(target); }; targets.forEach(lazyLoad);
:root { --primary-color:#425b84; --secondary-color:#5b7bb4; --max-width:1100px; } * { margin:0; padding:0; box-sizing:border-box; } body { font:normal 1rem/1.5 'Arial', sans-serif; background:var(--primary-color); color:#fff; overflow-x:hidden; padding-bottom:50px; } #main-header { background:var(--secondary-color); padding:4rem 0; } .container { max-width:var(--max-width); margin:0 auto; text-align:center; } h1 { font-size:2.3rem; } #timeline ul { background:var(--primary-color); padding:50px 0; } /* Create Line */ #timeline ul li { list-style:none; position: relative; width:6px; margin:0 auto; padding-top:50px; background:#fff; } /* Boxes */ #timeline ul li div { position: relative; bottom:0; width:400px; padding:1rem; background:var(--secondary-color); transition:all 0.5s ease-in-out; opacity:0; } #timeline ul li:nth-child(odd) div.fade, #timeline ul li:nth-child(even) div.fade { opacity:1; transition:all 0.5s ease-in-out; transform:translateX(0) !important; } /* Right Side */ #timeline ul li:nth-child(odd) div { left:40px; transform:translateX(1100px); } /* Left Side */ #timeline ul li:nth-child(even) div { left:-434px; transform:translateX(-1100px); } /* Dots */ #timeline ul li:after { content:''; position: absolute; left:50%; bottom:0; width:25px; height:25px; background:var(--secondary-color); transform:translateX(-50%); border-radius:50%; transition:background 0.5s ease-in-out; } /* Arrows Base */ #timeline div:before { content:''; position: absolute; bottom:5px; width:0; height:0; border-style:solid; } /* Right Side Arrows */ #timeline ul li:nth-child(odd) div:before { left:-15px; border-width:8px 16px 8px 0; border-color:transparent var(--secondary-color) transparent transparent; } /* Left Side Arrows */ #timeline ul li:nth-child(even) div:before {
<header id="main-header"> <div class="container"> <h1><i class="fas fa-brain"></i> Knowledge Resume</h1> <h3><div class="fas fa-user"></div> Jun Jung</h3> </div> </header> <section id="timeline"> <ul> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2007: HTML & CSS</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2009: JavaScript & jQuery</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2010: PHP & Wordpress</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2011: Ruby on Rails</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2012: Python</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> <li> <div class="box" > <h3><i class="fas fa-chevron-right"></i> 2013: Node.js & React</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2014: Angular & React Native</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2015: Vue.js </h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2016:GraphQL & Apollo</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2017: Machine Learning</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> </ul> </section>
In the example you gave the .box
elements would not be intersecting because they are out of the viewport.在您给出的示例中,
.box
元素不会相交,因为它们在视口之外。 This is due to the transform
property on these elements which places them outside of the view.这是由于这些元素的
transform
属性将它们放置在视图之外。 Removing the transform
properties would fix it.删除
transform
属性将修复它。 You can tackle this by adding another div inside the .box
element which is transformed outside of the view.您可以通过在
.box
元素中添加另一个 div 来解决这个问题,该元素在视图之外进行转换。 This way the parent ( .box
) is observed and in the view and the child of .box
is transform outside and can be animated back whenever .box
is intersecting.这样父(
.box
)被观察到,在视图中, .box
的子在.box
变换,并且可以在.box
相交时.box
动画。
The .fade
class is not working because of the specificity on the the .box
divs.由于
.box
div 的特殊性, .fade
类.box
。 #timeline ul li div
is far more specific than .fade
and thus .fade
will always be overwritten by the id selector of #timeline ul li div
. #timeline ul li div
比.fade
更具体,因此.fade
将始终被#timeline ul li div
的 id 选择器覆盖。 To tackle this either make your selectors less specific by using .box { ... }
and .box.fade { ... }
or add the .fade
to the specific selector like so: #timeline ul li div.fade
.要解决这个问题,要么使用
.box { ... }
和.box.fade { ... }
使您的选择器不那么具体,或者像这样将.fade
添加到特定选择器: #timeline ul li div.fade
。
Also, avoid creating an instance of an IntersectionObserver
for each element.此外,避免为每个元素创建
IntersectionObserver
的实例。 A single observer can observe multiple elements.一个观察者可以观察多个元素。 Multiple instances should only be created if the
callback
argument varies.仅当
callback
参数变化时才应创建多个实例。
In your case, all .box
elements have to be handled the same.在您的情况下,所有
.box
元素都必须以相同的方式处理。
const targets = document.querySelectorAll('.box'); const onObserve = (entries, observer) => { entries.forEach(entry => { if (entry.isIntersecting) { const div = entry.target; div.classList.add('fade'); observer.unobserve(div); } }); } const io = new IntersectionObserver(onObserve); const observeTargets = targets => targets.forEach(target => { io.observe(target); }); observeTargets(targets);
:root { --primary-color: #425b84; --secondary-color: #5b7bb4; --max-width: 1100px; } * { margin: 0; padding: 0; box-sizing: border-box; } body { font: normal 1rem/1.5 'Arial', sans-serif; background: var(--primary-color); color: #fff; overflow-x: hidden; padding-bottom: 50px; } #main-header { background: var(--secondary-color); padding: 4rem 0; } .container { max-width: var(--max-width); margin: 0 auto; text-align: center; } h1 { font-size: 2.3rem; } #timeline ul { background: var(--primary-color); padding: 50px 0; } /* Create Line */ #timeline ul li { list-style: none; position: relative; width: 6px; margin: 0 auto; padding-top: 50px; background: #fff; } /* Boxes */ #timeline ul li div { position: relative; bottom: 0; width: 400px; padding: 1rem; background: var(--secondary-color); transition: all 0.5s ease-in-out; opacity: 0; } #timeline ul li div.fade { opacity: 1; transition: all 0.5s ease-in-out; transform: translateX(0); } /* Right Side */ #timeline ul li:nth-child(odd) div { left: 40px; /* transform: translateX(1100px); */ } /* Left Side */ #timeline ul li:nth-child(even) div { left: -434px; /* transform: translateX(-1100px); */ } /* Dots */ #timeline ul li:after { content: ''; position: absolute; left: 50%; bottom: 0; width: 25px; height: 25px; background: var(--secondary-color); transform: translateX(-50%); border-radius: 50%; transition: background 0.5s ease-in-out; } /* Arrows Base */ #timeline div:before { content: ''; position: absolute; bottom: 5px; width: 0; height: 0; border-style: solid; } /* Right Side Arrows */ #timeline ul li:nth-child(odd) div:before { left: -15px; border-width: 8px 16px 8px 0; border-color: transparent var(--secondary-color) transparent transparent; } /* Left Side Arrows */ #timeline ul li:nth-child(even) div:before { right: -15px; border-width: 8px 0 8px 16px; border-color: transparent transparent transparent var(--secondary-color); } @media(max-width:900px) { #timeline ul li div { width: 250px; } #timeline ul li:nth-child(even) div { left: -284px; } } @media(max-width:600px) { #timeline ul li { margin-left: 20px; } #timeline ul li div { width: calc(100vw - 90px); } #timeline ul li:nth-child(even) div { left: 40px; } /* Right Side Arrows */ #timeline ul li:nth-child(even) div:before { left: -15px; border-width: 8px 16px 8px 0; border-color: transparent var(--secondary-color) transparent transparent; } }
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <script src="https://kit.fontawesome.com/bbb16afe05.js" crossorigin="anonymous"></script> <link rel="stylesheet" href="./css/aos.css"> <link rel="stylesheet" href="./css/style.css"> <title>Knowledge Timeline</title> </head> <body> <header id="main-header"> <div class="container"> <h1><i class="fas fa-brain"></i> Knowledge Resume</h1> <h3> <div class="fas fa-user"></div> Jun Jung</h3> </div> </header> <section id="timeline"> <ul> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2007: HTML & CSS</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2009: JavaScript & jQuery</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2010: PHP & Wordpress</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2011: Ruby on Rails</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2012: Python</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2013: Node.js & React</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2014: Angular & React Native</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2015: Vue.js </h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2016:GraphQL & Apollo</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> <li> <div class="box"> <h3><i class="fas fa-chevron-right"></i> 2017: Machine Learning</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque animi at, dolorum tempora labore exercitationem sapiente voluptate possimus necessitatibus quos cum, voluptatibus maiores voluptates quam illum consequatur nemo est dolores.</p> </div> </li> </ul> </section> <script src="./js/main.js"></script> </body> </html>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.