[英]I've made an animation work on scroll, however the styling I want to apply is preventing it working
I have butchered the below from a few sources, I want to animate the text moving up highlighting on scroll. 我从一些来源了解了以下内容,我想为向上滚动显示的文本设置动画。 But I want it to look like this:
但我希望它看起来像这样:
I've got some CSS there which does it but it stops the animation working, I want this animation to work across my site for various headings, not 100% sure if the code here will do that or not! 我在那里有一些CSS可以做到这一点,但是它停止了动画的工作,我希望该动画可以在我的网站上针对各种标题工作,而不是100%确定这里的代码是否可以做到!
HTML 的HTML
<ul>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<div id = "spacer"></div>
<div class='boostheadings'><h2>TAKE NOTE, MAKE <span class="onAppear">PROGRESS</span></h2></div> <li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
<li>Item</li>
</ul>
CSS 的CSS
/*.boostheadings {
font-family: "montserrat";
font-size: 7vw;
-webkit-transform: skew(-20deg);
-moz-transform: skew(-20deg);
-o-transform: skew(-20deg);
transform: skew(-20deg);
}
*/
.onAppear {
background-image: linear-gradient(120deg, #32d2ff 0%, #32d2ff 100%);
transform: skew(30deg);
background-repeat: no-repeat;
background-size: 100% 20%;
background-position: 0 88%;
transition: background-size 0.25s ease-in;
}
.visible {
background-image: linear-gradient(120deg, #32d2ff 0%, #32d2ff 100%);
background-repeat: no-repeat;
background-position: 0 88%;
transition: background-size 1s ease-in;
background-size: 100% 90%;
transform: skew(30deg);
}
}
JS JS
var onAppear = [];
document.addEventListener("DOMContentLoaded", function() {
onAppear = [].map.call(document.querySelectorAll(".onAppear"), function(item ) {
return item;
});
}, false);
window.addEventListener("scroll", function() {
onAppear.forEach(function(elem) {
var vwTop = window.pageYOffset;
var vwBottom = (window.pageYOffset + window.innerHeight);
var elemTop = elem.offsetTop;
var elemHeight = elem.offsetHeight;
if (vwBottom > elemTop && ((vwTop - elemHeight) < elemTop)) {
elem.classList.add("visible");
} else {
elem.classList.remove("visible");
}
});
}, false);
https://codepen.io/anon/pen/xYKMbM https://codepen.io/anon/pen/xYKMbM
var onAppear = []; document.addEventListener("DOMContentLoaded", function() { onAppear = [].map.call(document.querySelectorAll(".onAppear"), function(item ) { return item; }); }, false); window.addEventListener("scroll", function() { onAppear.forEach(function(elem) { var vwTop = window.pageYOffset; var vwBottom = (window.pageYOffset + window.innerHeight); var elemTop = elem.offsetTop; var elemHeight = elem.offsetHeight; if (vwBottom > elemTop && ((vwTop - elemHeight) < elemTop)) { elem.classList.add("visible"); } else { elem.classList.remove("visible"); } }); }, false);
.boostheadings { font-family: "montserrat"; } .skewed { display: inline-block; -webkit-transform: skew(-20deg); -moz-transform: skew(-20deg); -o-transform: skew(-20deg); transform: skew(-20deg); } .onAppear { background-image: linear-gradient(120deg, #32d2ff 0%, #32d2ff 100%); background-repeat: no-repeat; background-size: 100% 20%; background-position: 0 88%; transition: background-size 0.25s ease-in; } .visible { background-image: linear-gradient(120deg, #32d2ff 0%, #32d2ff 100%); background-repeat: no-repeat; background-position: 0 88%; transition: background-size 1s ease-in; background-size: 100% 90%; }
<ul> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <div id = "spacer"></div> <div class='boostheadings'> <h2> <span class="skewed">TAKE NOTE, MAKE</span> <span class="onAppear skewed">PROGRESS</span> </h2> </div> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> </ul>
In this snippet I did not go through the rest of your code, just the thing that prevented your animation. 在此代码段中,我没有遍历您的其余代码,只是阻止了动画的事情。
In order to make sure it works, you can skew elements inside h2 tag as separate elements, not the whole .boostheadings div. 为了确保它起作用,您可以将h2标签内的元素倾斜为单独的元素,而不是整个.boostheadings div。
So in your case 2 span elements should be skewed (I wrapped first part of sentence in span, just before span with animation), which cannot be transformed as inline elements, so I gave them class "skewed" then in css gave them display: inline-block and skew transform. 因此,在您的情况下,应该歪斜2个span元素(我将span的第一部分包装在span中,紧接动画之前为span),不能将其转换为嵌入式元素,因此我给它们提供了“歪斜”类,然后在css中为它们显示:内联块和偏斜变换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.