Javascript 仅当在特定div的视图上滚动时才激活CSS动画
我有一个用CSS和HTML制作的图表,在这个图表中有一个图表加载的动画。我只想在包含图表的div视图上滚动时启动此动画 我只想在我在页面上的时候给图表充电,我知道我必须使用javascript,但我是JS的初学者,所以我不知道是否可以这样做 这是图表的重点: HTMLJavascript 仅当在特定div的视图上滚动时才激活CSS动画,javascript,html,css,hidden,Javascript,Html,Css,Hidden,我有一个用CSS和HTML制作的图表,在这个图表中有一个图表加载的动画。我只想在包含图表的div视图上滚动时启动此动画 我只想在我在页面上的时候给图表充电,我知道我必须使用javascript,但我是JS的初学者,所以我不知道是否可以这样做 这是图表的重点: HTML 可以使用onscroll事件并检查元素是否在视口中 document.addEventListener('DOMContentLoaded', function() { var charElem = document.
可以使用onscroll事件并检查元素是否在视口中
document.addEventListener('DOMContentLoaded', function() {
var charElem = document.querySelector('.chart');
var isVisible = false;
window.onscroll = function() {
if(isElementInViewport(charElem) && !isVisible) {
charElem.className += " anim";
isVisible = true;
}
}
function isElementInViewport (el) {
//special bonus for those using jQuery
if (typeof jQuery === "function" && el instanceof jQuery) {
el = el[0];
}
var rect = el.getBoundingClientRect();
return (
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */
rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */
);
}
});
document.addEventListener('DOMContentLoaded',function(){
var charElem=document.querySelector('.chart');
var isVisible=false;
window.onscroll=函数(){
如果(IsElementViewPort(charElem)&&!isVisible){
charElem.className+=“anim”;
isVisible=true;
}
}
函数IsElementViewPort(el){
//为使用jQuery的用户提供特别奖励
if(jQuery的类型==“函数”&&el实例jQuery){
el=el[0];
}
var rect=el.getBoundingClientRect();
返回(
rect.top>=0&&
rect.left>=0&&
你也可以使用某些类型的视图内插件。@sheriffderek:是的,最初我想用jquery写答案,并包含这样的引用。但我不确定OP是否使用jquery。这个解决方案很完美,但我不知道为什么它在我的网站上不起作用。你可能没有先加载DOM(比如,当JS运行时页面还没有被读取)如果您使用jquery,那么在dom.ready中包含我的代码片段,如果没有jquery,那么创建document.addEventListener('DOMContentLoaded',fn,false);调用此处理程序中的所有内容
.chart {
display: table;
table-layout: fixed;
width: 90%;
/*max-width: 700px;*/
height: 65%;
margin: 0 auto;
background-image: linear-gradient(to top, rgba(0, 0, 0, 0.1) 2%, rgba(0, 0, 0, 0) 2%);
background-size: 100% 50px;
background-position: left top;
}
.chart li {
position: relative;
display: table-cell;
vertical-align: bottom;
height: 200px;
}
.chart span {
margin: 0 1em;
display: block;
/*background: rgba(209, 236, 250, 0.75);*/
animation: draw 1s ease-in-out;
}
.chart span:before {
position: absolute;
left: 0;
right: 0;
top: 100%;
padding: 5px 1em 0;
display: block;
text-align: center;
content: attr(title);
word-wrap: break-word;
}
@keyframes draw {
0% {
height: 0;
}
}
document.addEventListener('DOMContentLoaded', function() {
var charElem = document.querySelector('.chart');
var isVisible = false;
window.onscroll = function() {
if(isElementInViewport(charElem) && !isVisible) {
charElem.className += " anim";
isVisible = true;
}
}
function isElementInViewport (el) {
//special bonus for those using jQuery
if (typeof jQuery === "function" && el instanceof jQuery) {
el = el[0];
}
var rect = el.getBoundingClientRect();
return (
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */
rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */
);
}
});