首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Javascript实现CSS剪辑路径动画

使用Javascript实现CSS剪辑路径动画
EN

Stack Overflow用户
提问于 2018-09-08 02:03:48
回答 3查看 384关注 0票数 0

我尝试用JavaScript对Clip-Path属性进行动画处理。

意思是:它在SetTimeout的帮助下“成长”。

我试过了,但不起作用。http://jsfiddle.net/071dm2h3/8/

代码语言:javascript
复制
var el = document.getElementById("image")

function grow(i) {
    el.style.clipPath = "circle("+ i +"px at 190px 160px)";
}

var i;
for(i = 0; i < 100; i++) {
  setTimeout(grow(i), 400);
}

这里我漏掉了什么?setTimeout不是应该在每个循环中更改i的值,以便我可以立即看到结果吗?

EN

回答 3

Stack Overflow用户

发布于 2018-09-08 02:15:28

为了让它工作,我重写了你的setTimeout在你的循环周围,以使图像增长。

代码语言:javascript
复制
setTimeout( function(){ 
 for(i = 0; i < 100; i++) {
  grow(i)
 }
},400);

这是jsfiddle

票数 0
EN

Stack Overflow用户

发布于 2018-09-08 02:16:58

不,setTimeout只触发一次,而且只触发一次。此外,您使用setTimeout的方式将导致意外的结果。你基本上是在说:

我想从现在起调用400毫秒后的grow(i) 100次。

这意味着从现在开始的400毫秒后,simultaneously.将被调用100次grow(i)你不会想要这样的,你想要调用` between (I) 100次,每次迭代之间等待400毫秒。

相反,您应该使用setInterval,它将在每次调用之间等待一段时间,或者让每个setTimeout在一段时间之后安排下一个超时。

考虑一下:

这将等待2秒,然后同时打印所有1,2,3,4

代码语言:javascript
复制
for (let i = 0; i < 5; i++) {
  setTimeout(() => console.log(i), 2000);
}

这将在一个持续时间后打印每个迭代:

代码语言:javascript
复制
function iteration(i) {
  console.log(i);
  if (i > 3) return;
  setTimeout(() => iteration(i + 1), 500);
}

iteration(0);

票数 0
EN

Stack Overflow用户

发布于 2018-09-08 02:23:29

将您的javascript更改为以下内容

代码语言:javascript
复制
var el = document.getElementById("image")

function grow(i) {
console.log(i)
    el.style.clipPath = "circle("+ i +"px at 190px 160px)";
}

var i;
for(i = 0; i < 100; i++) {
  setTimeout( ((i) => () =>  grow(i))(i), i*10);
}

请把这个读一遍setTimeout in for-loop does not print consecutive values

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52227592

复制
相关文章

相似问题

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