什么包或 html 用于创建页面加载指示器,这些指示器看起来像在获取数据后将填充的数据
What packages or html is used to create page loading indicators that look like the data that will be populated once the data is fetched
我注意到现在有些网站可以在数据所在的页面上添加一种元素填充器,然后再从服务器加载或获取数据。
在某些情况下,它会稍微闪烁或略带动画,以表明数据正在填充页面的该区域。
这是什么,是否有相应的软件包等?
有没有它的名字,所以我可以 google 它?
需要说明的是,我说的不是旋转器[=11=]
例如。当您在其网站上加载页面时,Airbnb 会使用此方法。我也在 Okcupid.com
上看到了
Css将用于加载动画!!!
获取数据时动画持续 运行.
获取数据后停止动画
这是一个简单的动画
<div class="lds-dual-ring"></div>
.lds-dual-ring {
display: inline-block;
width: 80px;
height: 80px;
}
.lds-dual-ring:after {
content: " ";
display: block;
width: 64px;
height: 64px;
margin: 8px;
border-radius: 50%;
border: 6px solid #fff;
border-color: #fff transparent #fff transparent;
animation: lds-dual-ring 1.2s linear infinite;
}
@keyframes lds-dual-ring {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
您正在寻找这类东西吗?我也找到了link that explains a bit on that, you should see. View their demo on this codepen。
据我所知,没有用于此效果的库。他们是定制的东西。您可以通过键入“内容占位符效果”来Google它。您也可以参考此 link 以获取详细信息:https://cloudcannon.com/deconstructions/2014/11/15/facebook-content-placeholder-deconstruction.html
const cardImage = document.querySelector('.card-image');
const cardTitle = document.querySelector('.card-title');
const cardDesc = document.querySelector('.card-description');
const renderCard = () => {
cardTitle.textContent = 'Card Title Yo!';
cardDesc.textContent = 'Lorem ipsum dolor, sit amet consectetur adipisicing elit. Vero dicta repellat quibusdam assumenda at distinctio similique eos? Officiis voluptatem accusamus, id odit, quos eaque nemo, dicta quidem eum eligendi veritatis.';
createImage();
cardTitle.classList.remove('loading');
cardDesc.classList.remove('loading');
cardImage.classList.remove('loading');
};
function createImage() {
const img = new Image();
img.classList.add("image");
img.setAttribute('alt', 'A cloud day at a mountain base');
img.setAttribute('src', 'https://images.unsplash.com/photo-1516646255117-f9f933680173?ixlib=rb-0.3.5&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE0NTg5fQ&s=dc874984018a4253ba7d2a3c53387135');
cardImage.appendChild(img);
}
setTimeout(() => {
renderCard();
}, 5000);
// window.addEventListener('load', () => {
// renderCard();
// });
body {
background: #f4f4f4;
margin: 0;
padding: 0;
font-family: system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue;
color: #333;
}
.container {
margin: 2rem auto;
max-width: 800px;
display: -webkit-box;
display: flex;
-webkit-box-pack: center;
justify-content: center;
}
.card {
overflow: hidden;
background: white;
border-radius: .25rem;
max-width: 380px;
width: 380px;
box-shadow: 0 15px 30px 0 rgba(0, 0, 0, 0.05), 0 5px 15px 0 rgba(0, 0, 0, 0.05);
-webkit-transition: ease box-shadow 0.3s;
transition: ease box-shadow 0.3s;
}
.card:hover {
box-shadow: 0 15px 60px 0 rgba(0, 0, 0, 0.08), 0 5px 25px 0 rgba(0, 0, 0, 0.08);
}
.card-detail {
padding: .5rem 1rem;
}
.card-detail h3 {
font-size: 1.5rem;
margin-bottom: none;
line-height: .09;
}
.card-detail p {
line-height: 1.3rem;
}
.card-image {
margin: 0;
padding: 0;
height: 200px;
overflow: hidden;
}
.card-image img {
max-width: 100%;
height: auto;
}
.loading {
position: relative;
background-color: #E2E2E2;
}
.loading.card-image {
border-radius: 0;
}
.loading::after {
display: block;
content: '';
position: absolute;
width: 100%;
height: 100%;
-webkit-transform: translateX(-100%);
transform: translateX(-100%);
background: -webkit-gradient(linear, left top, right top, from(transparent), color-stop(rgba(255, 255, 255, 0.2)), to(transparent));
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
-webkit-animation: loading 1.5s infinite;
animation: loading 1.5s infinite;
}
@-webkit-keyframes loading {
100% {
-webkit-transform: translateX(100%);
transform: translateX(100%);
}
}
@keyframes loading {
100% {
-webkit-transform: translateX(100%);
transform: translateX(100%);
}
}
.card-title.loading {
height: 1.8rem;
}
.card-image.image {
max-width: 100%;
height: auto;
}
.card-description.loading {
height: 80px;
}
<div class="container">
<section class="card">
<figure class="card-image loading"></figure>
<div class="card-detail">
<h3 class="card-title loading"></h3>
<p class="card-description loading"></p>
</div>
</section>
</div>
我注意到现在有些网站可以在数据所在的页面上添加一种元素填充器,然后再从服务器加载或获取数据。
在某些情况下,它会稍微闪烁或略带动画,以表明数据正在填充页面的该区域。
这是什么,是否有相应的软件包等? 有没有它的名字,所以我可以 google 它?
需要说明的是,我说的不是旋转器[=11=]
例如。当您在其网站上加载页面时,Airbnb 会使用此方法。我也在 Okcupid.com
上看到了Css将用于加载动画!!! 获取数据时动画持续 运行.
获取数据后停止动画
这是一个简单的动画
<div class="lds-dual-ring"></div>
.lds-dual-ring {
display: inline-block;
width: 80px;
height: 80px;
}
.lds-dual-ring:after {
content: " ";
display: block;
width: 64px;
height: 64px;
margin: 8px;
border-radius: 50%;
border: 6px solid #fff;
border-color: #fff transparent #fff transparent;
animation: lds-dual-ring 1.2s linear infinite;
}
@keyframes lds-dual-ring {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
您正在寻找这类东西吗?我也找到了link that explains a bit on that, you should see. View their demo on this codepen。
据我所知,没有用于此效果的库。他们是定制的东西。您可以通过键入“内容占位符效果”来Google它。您也可以参考此 link 以获取详细信息:https://cloudcannon.com/deconstructions/2014/11/15/facebook-content-placeholder-deconstruction.html
const cardImage = document.querySelector('.card-image');
const cardTitle = document.querySelector('.card-title');
const cardDesc = document.querySelector('.card-description');
const renderCard = () => {
cardTitle.textContent = 'Card Title Yo!';
cardDesc.textContent = 'Lorem ipsum dolor, sit amet consectetur adipisicing elit. Vero dicta repellat quibusdam assumenda at distinctio similique eos? Officiis voluptatem accusamus, id odit, quos eaque nemo, dicta quidem eum eligendi veritatis.';
createImage();
cardTitle.classList.remove('loading');
cardDesc.classList.remove('loading');
cardImage.classList.remove('loading');
};
function createImage() {
const img = new Image();
img.classList.add("image");
img.setAttribute('alt', 'A cloud day at a mountain base');
img.setAttribute('src', 'https://images.unsplash.com/photo-1516646255117-f9f933680173?ixlib=rb-0.3.5&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE0NTg5fQ&s=dc874984018a4253ba7d2a3c53387135');
cardImage.appendChild(img);
}
setTimeout(() => {
renderCard();
}, 5000);
// window.addEventListener('load', () => {
// renderCard();
// });
body {
background: #f4f4f4;
margin: 0;
padding: 0;
font-family: system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue;
color: #333;
}
.container {
margin: 2rem auto;
max-width: 800px;
display: -webkit-box;
display: flex;
-webkit-box-pack: center;
justify-content: center;
}
.card {
overflow: hidden;
background: white;
border-radius: .25rem;
max-width: 380px;
width: 380px;
box-shadow: 0 15px 30px 0 rgba(0, 0, 0, 0.05), 0 5px 15px 0 rgba(0, 0, 0, 0.05);
-webkit-transition: ease box-shadow 0.3s;
transition: ease box-shadow 0.3s;
}
.card:hover {
box-shadow: 0 15px 60px 0 rgba(0, 0, 0, 0.08), 0 5px 25px 0 rgba(0, 0, 0, 0.08);
}
.card-detail {
padding: .5rem 1rem;
}
.card-detail h3 {
font-size: 1.5rem;
margin-bottom: none;
line-height: .09;
}
.card-detail p {
line-height: 1.3rem;
}
.card-image {
margin: 0;
padding: 0;
height: 200px;
overflow: hidden;
}
.card-image img {
max-width: 100%;
height: auto;
}
.loading {
position: relative;
background-color: #E2E2E2;
}
.loading.card-image {
border-radius: 0;
}
.loading::after {
display: block;
content: '';
position: absolute;
width: 100%;
height: 100%;
-webkit-transform: translateX(-100%);
transform: translateX(-100%);
background: -webkit-gradient(linear, left top, right top, from(transparent), color-stop(rgba(255, 255, 255, 0.2)), to(transparent));
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
-webkit-animation: loading 1.5s infinite;
animation: loading 1.5s infinite;
}
@-webkit-keyframes loading {
100% {
-webkit-transform: translateX(100%);
transform: translateX(100%);
}
}
@keyframes loading {
100% {
-webkit-transform: translateX(100%);
transform: translateX(100%);
}
}
.card-title.loading {
height: 1.8rem;
}
.card-image.image {
max-width: 100%;
height: auto;
}
.card-description.loading {
height: 80px;
}
<div class="container">
<section class="card">
<figure class="card-image loading"></figure>
<div class="card-detail">
<h3 class="card-title loading"></h3>
<p class="card-description loading"></p>
</div>
</section>
</div>