Skip to content

Commit d2fc138

Browse files
José Miguel Sánchez AlésJosé Miguel Sánchez Alés
authored andcommitted
Aáde un ejercicio a Javascript-DOM
1 parent be08b64 commit d2fc138

File tree

21 files changed

+2093
-89
lines changed

21 files changed

+2093
-89
lines changed

docs/99.ejercicios/80-js-basico.html

Lines changed: 35 additions & 18 deletions
Large diffs are not rendered by default.

docs/99.ejercicios/81-js-dom.html

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,13 +103,18 @@ <h1>Javascript y <abbr title="Document Object Model">DOM</abbr><a class="headerl
103103
</div>
104104
<p>Podemos hacer una petición <abbr title="Asynchronous JavaScript and XML">AJAX</abbr> para obtener datos <abbr title="JavaScript Object Notation">JSON</abbr> facilitados en
105105
una dirección web. Sabiendo esto, cree una página web que muestre en una
106-
tabla los ditintos tipos de carburante para automoción vendidos en España.</p>
106+
tabla los distintos tipos de carburante para automoción vendidos en España.</p>
107107
<div class="admonition note">
108108
<p class="admonition-title">Nota</p>
109109
<p>Échele un ojo a los ejemplos que introducen la unidad sobre <a class="reference internal" href="../05.almacenamiento/index.html#lm-ut5"><span class="std std-ref">Almacenamiento</span></a>
110110
para saber la <abbr title="Uniform Resource Locator">URL</abbr>.</p>
111111
</div>
112112
</li>
113+
<li><p>En el <a class="reference download internal" download="" href="../_downloads/79a13a37ff81e505eaae46c28c381c70/mostrar.html"><code class="xref download docutils literal notranslate"><span class="pre">siguiente</span> <span class="pre">documento</span> <span class="pre">HTML</span></code></a> manipule el
114+
comportamiento del botón para que muestre u oculte el resto del texto (el
115+
incluido dentro de <code class="docutils literal notranslate"><span class="pre">span</span></code>).</p>
116+
<p class="sol-oculta"><a class="reference download internal" download="" href="../_downloads/0b72028f521aa004f275c8cb18772e9c/DOM03-conmutar.js"><code class="xref download docutils literal notranslate"><span class="pre">Solución</span> <span class="pre">propuesta</span></code></a>.</p>
117+
</li>
113118
</ol>
114119
</section>
115120

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
const link = document.getElementById("conmutador");
2+
3+
link.addEventListener("click", e => {
4+
e.preventDefault(); //No sigue el enlace.
5+
6+
const span = e.target.parentElement.querySelector("span");
7+
span.classList.toggle("extra");
8+
9+
// Cambiamos la leyenda.
10+
<script src="js/conmutar.js"></script>
11+
e.target.textContent = span.classList.contains("extra")
12+
? "Seguir leyendo..."
13+
: "Ocultar texto...";
14+
});

docs/_downloads/4073071b21e0679ca8fe21155045184b/ejM02.js

Lines changed: 35 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,31 +33,55 @@ function generarAleatorio(min, max) {
3333

3434

3535
/**
36-
* Lanza n dados hasta que todas las puntuaciones de un misma tirada sean iguales.
36+
* Lanza los dados hasta llegar a la tirada ganadora.
3737
*
38-
* @param {number} n - Número de dados en la tirada
38+
* @param {reglas} reglas - Reglas de la partida.
3939
*
40-
* @yields {number} - La puntuación de cada dado.
40+
* @yields {number[]} - La puntuación de cada dado.
4141
*/
42-
function* generarPartida(n) {
43-
let tirada;
42+
function* generarPartida({dados, caras, fin = _ => false}) {
43+
let tirada, log = [];
4444

45-
if(!Number.isInteger(n) || n < 1) {
45+
if(!Number.isInteger(dados) || dados < 1) {
4646
throw "Debe tirarse al menos un dado";
4747
}
4848

49-
// Las tiradas continúan mientras todas
50-
// las puntuaciones de una misma tirada no sean iguales.
49+
// Las tiradas continúan mientras no se cumpla
50+
// la condición definida por "fin".
5151
do {
5252
// Una tirada son "n" puntuaciones de dados
53-
tirada = Array(n).fill(null).map(e => generarAleatorio(1, numCaras));
53+
tirada = Array(dados).fill(null).map(e => generarAleatorio(1, caras));
54+
log.push(tirada);
5455
yield tirada;
55-
} while(tirada.some((e, _, arr) => e !== arr[0]));
56+
} while(!fin(log));
5657
}
5758

59+
/**
60+
* @typedef {Object} reglas
61+
*
62+
* @property {number} dados - Cantidad de dados lanzados por tirada.
63+
* @property {number} caras - Número de caras de cada dado.
64+
* @property {finCallback} fin - Función que comprueba si la tirada es ganadora.
65+
*/
66+
67+
/**
68+
* @callback finCallback
69+
*
70+
* @param {number[][]} tiradas - Resultados de todas las tiradas.
71+
*
72+
* @returns {boolean} - true, si la tirada es ganadora.
73+
*/
74+
5875
// Programa principal
5976

60-
const partida = generarPartida(numDados);
77+
const reglas = {
78+
dados: numDados,
79+
caras: numCaras,
80+
// La partida acaba cuando todos los dados de la última tirada son iguales.
81+
fin: (tiradas) => tiradas?.at(-1)?.every((e, _, arr) => e === arr[0])
82+
}
83+
84+
const partida = generarPartida(reglas);
6185
let tirada, intentos = 0;
6286

6387
for(tirada of partida) {
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<!DOCTYPE html>
2+
<html lang=es>
3+
<meta charset="UTF-8">
4+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
5+
<title>Ejercicio 1</title>
6+
7+
<style>
8+
.extra { display: none; }
9+
</style>
10+
11+
<h1>Lorem ipsum</h1>
12+
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
13+
<span class="extra">Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
14+
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
15+
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</span> <a href="#" id="conmutador">Seguir leyendo...</a>
16+
</p>
17+
</html>

0 commit comments

Comments
 (0)