Javascript 当CSS动画遇到屏幕边缘时,如何停止它?
我创建了这个演示: 单击时,将创建一个红色的下落框 问题是,仅使用css无法检测屏幕大小,事实上,在我的演示中,我指定无论屏幕的实际高度如何,框必须下降到1000px 这是关键帧的代码:Javascript 当CSS动画遇到屏幕边缘时,如何停止它?,javascript,jquery,css,animation,Javascript,Jquery,Css,Animation,我创建了这个演示: 单击时,将创建一个红色的下落框 问题是,仅使用css无法检测屏幕大小,事实上,在我的演示中,我指定无论屏幕的实际高度如何,框必须下降到1000px 这是关键帧的代码: @include keyframes("fall"){ to{ top: 1000px; } } 我不能使用底部:0px因为我不知道秋天从哪里开始,而且我没有解决我的主要问题 这是FallBox.js脚本: 我知道我可以使用溢出:隐藏在父div中,但我认为这不是
@include keyframes("fall"){
to{
top: 1000px;
}
}
我不能使用底部:0px因为我不知道秋天从哪里开始,而且我没有解决我的主要问题
这是FallBox.js脚本:
我知道我可以使用溢出:隐藏在父div中,但我认为这不是理想的解决方案。首先是因为用户可以得到一个高度更高的屏幕,然后是因为我希望框在遇到边缘时停止,因为边界是地面,它不应该通过
我在web上找到的另一个解决方案是使用CSSOMAPI,但我们甚至不确定这些API的兼容性
那么,既然javascript无法注入属性,当动画遇到屏幕边缘时,我如何停止它呢
谢谢。如果您正在寻找仅使用css的解决方案,您可以将css
calc
功能()与vh
()结合使用
document.querySelector(“.box”).addEventListener(“单击”,函数(){
this.classList.toggle(“已删除”);
})
*{
框大小:边框框;
保证金:0;
填充:0;
}
.盒子{
位置:绝对位置;
排名:0;
左:200px;
宽度:100px;
高度:100px;
背景:红色;
过渡:前2名;
}
.盒子掉下来了{
顶部:计算(100vh-100px);
}
如果您正在寻找仅使用css的解决方案,可以将csscalc
功能()与vh
()结合使用
document.querySelector(“.box”).addEventListener(“单击”,函数(){
this.classList.toggle(“已删除”);
})
*{
框大小:边框框;
保证金:0;
填充:0;
}
.盒子{
位置:绝对位置;
排名:0;
左:200px;
宽度:100px;
高度:100px;
背景:红色;
过渡:前2名;
}
.盒子掉下来了{
顶部:计算(100vh-100px);
}
您可以使用CSS功能将每个div
向上移动其自身高度的100%
。这样,您只需要两条规则就可以更改top
位置的值,而不必担心每种情况下的高度
(函数(d,M){
var div=d.createElement(“div”),
wait=0,大小;
d、 body.addEventListener(“单击”,函数(){
如果(!等待){
等待=1;
div=div.cloneNode(1);
div.classList.remove(“go”);//这是必需的,这样新创建的div就不会被添加到页面底部
尺寸=M.max(M.floor(M.random()*200),50);
div.style.height=div.style.width=size+“px”;
div.style.left=M.max(M.floor(M.random()*this.offsetWidth)-size,0)+“px”;
这名儿童(div);
setTimeout(函数(){
div.classList.add(“go”);//添加此类将启动动画。
等待=0;
},5);
}
},0);
})(文件、数学)代码>
*{框大小:边框框;边距:0;填充:0;}
html,正文{高度:100%}
div{
背景:#000;
边框:1px实心#fff;
过渡:前2s线性;
位置:绝对位置;
排名:0;
转换:translatey(-100%);
}
前进{
最高:100%;
}
您可以使用CSS功能将每个div
向上移动其自身高度的100%
。这样,您只需要两条规则就可以更改top
位置的值,而不必担心每种情况下的高度
(函数(d,M){
var div=d.createElement(“div”),
wait=0,大小;
d、 body.addEventListener(“单击”,函数(){
如果(!等待){
等待=1;
div=div.cloneNode(1);
div.classList.remove(“go”);//这是必需的,这样新创建的div就不会被添加到页面底部
尺寸=M.max(M.floor(M.random()*200),50);
div.style.height=div.style.width=size+“px”;
div.style.left=M.max(M.floor(M.random()*this.offsetWidth)-size,0)+“px”;
这名儿童(div);
setTimeout(函数(){
div.classList.add(“go”);//添加此类将启动动画。
等待=0;
},5);
}
},0);
})(文件、数学)代码>
*{框大小:边框框;边距:0;填充:0;}
html,正文{高度:100%}
div{
背景:#000;
边框:1px实心#fff;
过渡:前2s线性;
位置:绝对位置;
排名:0;
转换:translatey(-100%);
}
前进{
最高:100%;
}
不能使用百分比或vh
单位吗?不能使用百分比或vh
单位吗?
function FallBox(x, side, parent){
this.x = x;
this.parent = parent || $("body");
this.side = side || Math.random()*200;
this.createBox();
this.fall();
}
FallBox.prototype.createBox = function(){
box = document.createElement('div');
$box = $(box); // I hate brackets
$box.addClass("box");
$box.css({
width: this.side+"px",
height: this.side+"px",
left: this.x+"px",
top: "-"+(this.side+5)+"px"
});
this.box = $box;
}
FallBox.prototype.fall = function(){
this.parent.append(this.box);
this.box.addClass("fall");
}