Skip to content

Commit

Permalink
Se ha agregado una ventana que muestre que se está descargando el arc…
Browse files Browse the repository at this point in the history
…hivo de vídeo, se añadió una confirmación para saber si de verdad desea descargar el vídeo o seguir reproduciéndolo y se modificó la vista principal donde se integró una animación en el fondo para simular el espacio con un efecto que detecte el movimiento del mouse
  • Loading branch information
alejandrojosue committed Jan 10, 2024
1 parent 45735ab commit 36478ee
Show file tree
Hide file tree
Showing 5 changed files with 415 additions and 87 deletions.
68 changes: 65 additions & 3 deletions css/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,80 @@
}

body {
background: rgb(47, 108, 240);
overflow-x: hidden;
/* background: rgb(47, 108, 240);
overflow-x: hidden; */
width: 100%;
height: 100vh;
background-color: #111;
background-image: radial-gradient(circle at top right, rgba(121, 68, 154, 0.13), transparent),
radial-gradient(circle at 20% 80%, rgba(41, 196, 255, 0.13), transparent)
}

canvas {
position: fixed;
width: 100%;
height: 100%;
}

body::before {
/* body::before {
content: '';
position: absolute;
width: 100%;
height: 100%;
background-color: #fff;
opacity: .3;
clip-path: polygon(0 0, 100% 100%, 0 100%);
} */

.downloading {
width: 100vw;
height: 100vh;
display: none;
flex-direction: column;
position: absolute;
justify-content: center;
align-items: center;
z-index: 1;
background-color: rgba(0, 0, 0, .8);
}

.loader {
position: relative;
width: 150px;
height: 150px;
animation: loader 8s linear infinite;
}

.loader span {
position: absolute;
top: calc(10px * var(--i));
bottom: calc(10px * var(--i));
right: calc(10px * var(--i));
left: calc(10px * var(--i));
border: solid 5px transparent;
border-bottom: solid 5px #fff;
border-right: solid 5px #fff;
border-radius: 50%;
animation: loader 2s cubic-bezier(.1, .63, .78, -0.29) infinite;
animation-delay: calc(.1s * var(--i));
}

.textLoader {
color: white;
margin-top: 5px;
font-weight: 700;
font-size: x-large;
/* display: none; */
}

@keyframes loader {
0% {
transform: rotate(0deg);
}

100% {
transform: rotate(360deg);
}
}

a {
Expand Down
27 changes: 25 additions & 2 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,40 @@
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="author" content="Alejandro Díaz">
<meta name="description" content="Una app para grabar la pantalla de nuestra PC.">
<meta name="apple-mobile-web-app-capable" content="yes">
<link rel="shortcut icon" href="./iconos/icono16x16.png">
<link rel="stylesheet" href="./css/style.css">
<link rel="manifest" href="./manifest.json">
<title>Pip</title>
</head>

<body>
<a href="" class="detener"><span>DETENER Y DESCARGAR GRABACION</span></a>
<a href="#" class="empezar"><span>EMPEZAR A GRABAR</span></a>
<!-- Fondo de Estrellas móviles -->
<canvas></canvas>

<!-- Ventana de Descarga -->
<div class="downloading">
<div class="loader">
<span style="--i:0"></span>
<span style="--i:1"></span>
<span style="--i:2"></span>
<span style="--i:3"></span>
<span style="--i:4"></span>
<span style="--i:5"></span>
</div>
<div class="textLoader">Descargando Vídeo</div>
</div>

<!-- Botones para grabar y descargar vídeo -->
<a href="#" class="btnDetener"><span>DETENER Y DESCARGAR GRABACION</span></a>
<a href="#" class="btnEmpezar"><span>EMPEZAR A GRABAR</span></a>

<!-- Mensaje de solo disponible para PCs -->
<span class="info">DISPONIBLE SOLO PARA COMPUTARORAS</span>
<h1 id="tiempo">00:00:00</h1>
<script src="./js/animationBody.js"></script>
<script src="./main.js"></script>
</body>

Expand Down
226 changes: 226 additions & 0 deletions js/animationBody.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,226 @@
/* * . * . * * .
. * move your mouse to over the stars .
* . . change these values: . *
. * . . * . */
const STAR_COLOR = '#fff';
const STAR_SIZE = 3;
const STAR_MIN_SCALE = 0.2;
const OVERFLOW_THRESHOLD = 50;
const STAR_COUNT = (window.innerWidth + window.innerHeight) / 8;

const canvas = document.querySelector('canvas'),
context = canvas.getContext('2d');

let scale = 1, // device pixel ratio
width,
height;

let stars = [];

let pointerX,
pointerY;

let velocity = { x: 0, y: 0, tx: 0, ty: 0, z: 0.0005 };

let touchInput = false;

generate();
resize();
step();

window.onresize = resize;
canvas.onmousemove = onMouseMove;
canvas.ontouchmove = onTouchMove;
canvas.ontouchend = onMouseLeave;
document.onmouseleave = onMouseLeave;

function generate() {

for (let i = 0; i < STAR_COUNT; i++) {
stars.push({
x: 0,
y: 0,
z: STAR_MIN_SCALE + Math.random() * (1 - STAR_MIN_SCALE)
});
}

}

function placeStar(star) {

star.x = Math.random() * width;
star.y = Math.random() * height;

}

function recycleStar(star) {

let direction = 'z';

let vx = Math.abs(velocity.x),
vy = Math.abs(velocity.y);

if (vx > 1 || vy > 1) {
let axis;

if (vx > vy) {
axis = Math.random() < vx / (vx + vy) ? 'h' : 'v';
}
else {
axis = Math.random() < vy / (vx + vy) ? 'v' : 'h';
}

if (axis === 'h') {
direction = velocity.x > 0 ? 'l' : 'r';
}
else {
direction = velocity.y > 0 ? 't' : 'b';
}
}

star.z = STAR_MIN_SCALE + Math.random() * (1 - STAR_MIN_SCALE);

if (direction === 'z') {
star.z = 0.1;
star.x = Math.random() * width;
star.y = Math.random() * height;
}
else if (direction === 'l') {
star.x = -OVERFLOW_THRESHOLD;
star.y = height * Math.random();
}
else if (direction === 'r') {
star.x = width + OVERFLOW_THRESHOLD;
star.y = height * Math.random();
}
else if (direction === 't') {
star.x = width * Math.random();
star.y = -OVERFLOW_THRESHOLD;
}
else if (direction === 'b') {
star.x = width * Math.random();
star.y = height + OVERFLOW_THRESHOLD;
}

}

function resize() {

scale = window.devicePixelRatio || 1;

width = window.innerWidth * scale;
height = window.innerHeight * scale;

canvas.width = width;
canvas.height = height;

stars.forEach(placeStar);

}

function step() {

context.clearRect(0, 0, width, height);

update();
render();

requestAnimationFrame(step);

}

function update() {

velocity.tx *= 0.96;
velocity.ty *= 0.96;

velocity.x += (velocity.tx - velocity.x) * 0.8;
velocity.y += (velocity.ty - velocity.y) * 0.8;

stars.forEach((star) => {

star.x += velocity.x * star.z;
star.y += velocity.y * star.z;

star.x += (star.x - width / 2) * velocity.z * star.z;
star.y += (star.y - height / 2) * velocity.z * star.z;
star.z += velocity.z;

// recycle when out of bounds
if (star.x < -OVERFLOW_THRESHOLD || star.x > width + OVERFLOW_THRESHOLD || star.y < -OVERFLOW_THRESHOLD || star.y > height + OVERFLOW_THRESHOLD) {
recycleStar(star);
}

});

}

function render() {

stars.forEach((star) => {

context.beginPath();
context.lineCap = 'round';
context.lineWidth = STAR_SIZE * star.z * scale;
context.globalAlpha = 0.5 + 0.5 * Math.random();
context.strokeStyle = STAR_COLOR;

context.beginPath();
context.moveTo(star.x, star.y);

var tailX = velocity.x * 2,
tailY = velocity.y * 2;

// stroke() wont work on an invisible line
if (Math.abs(tailX) < 0.1) tailX = 0.5;
if (Math.abs(tailY) < 0.1) tailY = 0.5;

context.lineTo(star.x + tailX, star.y + tailY);

context.stroke();

});

}

function movePointer(x, y) {

if (typeof pointerX === 'number' && typeof pointerY === 'number') {

let ox = x - pointerX,
oy = y - pointerY;

velocity.tx = velocity.tx + (ox / 8 * scale) * (touchInput ? 1 : -1);
velocity.ty = velocity.ty + (oy / 8 * scale) * (touchInput ? 1 : -1);

}

pointerX = x;
pointerY = y;

}

function onMouseMove(event) {

touchInput = false;

movePointer(event.clientX, event.clientY);

}

function onTouchMove(event) {

touchInput = true;

movePointer(event.touches[0].clientX, event.touches[0].clientY, true);

event.preventDefault();

}

function onMouseLeave() {

pointerX = null;
pointerY = null;

}
Loading

0 comments on commit 36478ee

Please sign in to comment.