首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在页面加载时停止运行CSS转换

在页面加载时停止运行CSS转换
EN

Stack Overflow用户
提问于 2020-08-22 22:42:30
回答 3查看 764关注 0票数 0

编辑:添加了自己的答案,它可以工作。如果有人能改进它,那就太好了!

有没有办法阻止CSS过渡在后台播放/运行?假设在页面的底部有一个CSS动画,但它在页面加载后立即加载,但我们还没有滚动到页面的底部。所以CSS动画从未被看到过!如果能够在没有JavaScript的情况下阻止或触发页面加载时的动画/过渡效果,那就太好了。我不想重复每次用户滚动页面或悬停时的动画。动画应该等待,直到用户滚动并且该部分在屏幕上可见。

我尝试了下面的方法,但是不起作用!

HTML

代码语言:javascript
复制
<body class="preload"> 

CSS

代码语言:javascript
复制
.preload * {
  -webkit-transition: none !important;
  -moz-transition: none !important;
  -ms-transition: none !important;
  -o-transition: none !important;
}

Javascript

代码语言:javascript
复制
$(window).load(function() {
  $("body").removeClass("preload");
});

如果能够在没有JavaScript的情况下阻止或触发页面加载时的动画/过渡效果,那就太好了。这是link的网站。当滚动大约25%时,有6个带有动画的环。

EN

回答 3

Stack Overflow用户

发布于 2020-08-22 22:50:02

我不认为没有javascript是不可能的,然而,你可以为这样的动画使用你选择的库(比如this one,或者你可以实现一个自定义的解决方案。

对于自定义解决方案,您将使用Intersection Observer API来检测元素何时滚动到视图中,然后将动画类添加到该元素上。

票数 1
EN

Stack Overflow用户

发布于 2021-01-15 02:48:26

这对我很有效,我改变了这一点:

旧CSS

代码语言:javascript
复制
.preload * {
      -webkit-transition: none !important;
      -moz-transition: none !important;
      -ms-transition: none !important;
      -o-transition: none !important;
    }

新CSS

代码语言:javascript
复制
.preload {
  transition: none !important;
}
票数 1
EN

Stack Overflow用户

发布于 2020-08-23 00:04:32

使用以下代码,它可以很好地工作,请参见结果link

在此CSS中添加了动画功能

代码语言:javascript
复制
.divname .is-visible {
    animation: progress 2s ease-out forwards;
}

.divname与其他正常的CSS功能。因此,javascript每次都调用.is-visible并启用动画。

代码语言:javascript
复制
// Detect request animation frame
var scroll = window.requestAnimationFrame ||
             // IE Fallback
             function(callback){ window.setTimeout(callback, 1000/60)};
var elementsToShow = document.querySelectorAll('.show-on-scroll'); 

function loop() {

  elementsToShow.forEach(function (element) {
    if (isElementInViewport(element)) {
      element.classList.add('is-visible');
    } else {
      element.classList.remove('is-visible');
    }
  });

  scroll(loop);
}

// Call the loop for the first time
loop();

// Helper function from: http://stackoverflow.com/a/7557433/274826
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.bottom >= 0)
    ||
    (rect.bottom >= (window.innerHeight || document.documentElement.clientHeight) &&
      rect.top <= (window.innerHeight || document.documentElement.clientHeight))
    ||
    (rect.top >= 0 &&
      rect.bottom <= (window.innerHeight || document.documentElement.clientHeight))
  );
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63537419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档