Кнопка ничего не анимирует, так как метод animate не вызывался.Также в вашем коде, когда вы вызывали animate, он заканчивался бесконечным циклом, так как requestAnimationFrame будет продолжать многократно вызывать animate, поэтому я добавил условие вокруг requestAnimationFrame (animate), чтобы проверить высоту квадратов и прекратить его выполнение, когда оно достигнет дна,аналогично тому, что вы использовали в своей функции обновления.
Чтобы создать новый квадрат каждый раз, когда вы нажимаете кнопку, я переместил создание прямоугольников в функцию btn1.Если вы хотите сохранить старые квадраты при создании новых, вам нужно будет отслеживать их вне холста и перерисовывать их со всеми остальными анимациями.
Я догадался, как выглядит ваш HTML, но вы можетеЗапустите приведенный ниже код, он упадет на два квадрата, но учтите, что условие останова только на жестко закодированном.
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
document.getElementById("b1").addEventListener("click", btn1, false);
var r2;
var rec;
function btn1() {
var inputx = document.getElementById("work").value;
var inputy = document.getElementById("y").value;
var inputs = document.getElementById("s").value;
r2 = new Rectangle(500, 50, 50);
rec = new Rectangle(parseInt(inputx, 10), parseInt(inputy, 10), parseInt(inputs, 10));
animate();
}
//animate
function animate() {
if (r2.y + r2.s <= 400) {
requestAnimationFrame(animate);
}
ctx.clearRect(0,0,1450,400);
r2.draw();
r2.update();
rec.draw();
rec.update();
}
function Rectangle(x,y,s){
this.x = x;
this.y = y;
this.s = s;
this.draw = function(){
ctx.fillStyle = "rgba(0,200,0,1)";
ctx.fillRect(this.x,this.y,this.s,this.s);
}
this.update = function(){
this.y= this.y+2;
}
}
<div>
<input id='work'>
<input id='y'>
<input id='s'>
<button id="b1"> Create Sqaure</button>
</div>
<canvas id="myCanvas" width=600 height=400></canvas>