【发布时间】:2019-11-15 08:05:02
【问题描述】:
我有一个简单的菜单,目前正在使用我想要动画的 CSS Grid。但是,grid-template-columns 无法流畅地制作动画。我现在做的菜单完全不同,但在寻找解决方案时,我遇到了一些我不太明白的东西。我的第一个想法,虽然它可能根本不是一个好主意,也可能不是关键帧动画的合适替代方案,但它是在 while 循环中更新样式以动画化项目的增加大小。它不起作用。
相关JS:
$('#select-oak').hover(function () {
let start = new Date().getTime();
let elapsed = 0;
while (elapsed <= 1000) {
elapsed = new Date().getTime() - start;
let val = elapsed / 1000;
if (elapsed % 100 === 0) {
$('.selector-block').css('grid-template-columns', `${1.0 + val}fr 1fr 1fr 1fr`);
console.log(1 + val);
console.log(elapsed);
}
}
}
CSS:
.selector-block {
position: relative;
overflow: hidden;
top: -32.5vh;
background-color: white;
gap: 5px;
width: 100vw;
height: 90vh;
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
clip-path: polygon(0 36%, 100% 0, 100% 60%, 0% 100%);
z-index: 3;
}
#select-oak {
position: relative;
overflow: hidden;
text-align: center;
background-color: rgb(94, 80, 21);
top: 21.5%;
width: 100%;
height: 200%;
}
#select-oak img {
position: relative;
left: -10vw;
transform: scale(1.06);
filter: blur(5px);
}
#select-oak img:hover {
filter: none;
transform: scale(1.1);
transition: ease-in-out 0.5s;
}
这似乎是一种非常规的方法,所以我并不感到惊讶它不起作用,但由于我对 CSS、JS 和 JQuery 比较陌生,我很好奇是什么阻止了它的工作只是为了提供帮助我对使用 JQuery 和 CSS 的理解。这是结果。如您所见,即使打印出正确的值,它也不会更新,直到循环的最后一次通过。
所以我有两个问题:
- 这是我的代码有问题,还是只是您不能做的事情?
- 如果可以像这样更新样式,这是一种不好的做法,为什么?
【问题讨论】:
-
flexbox 会不会比 grid 更好?那么你应该可以通过简单地操作悬停项的 flex 属性来实现这种效果。
-
@04FS 是的,它会,但这纯粹是为了我自己的实践,因为我喜欢在其他项目中使用网格来响应,所以我想看看是否有可能使这种方法起作用。主要是出于好奇和学习。
标签: javascript jquery css css-grid