0% found this document useful (0 votes)
33 views8 pages

Boton

The document describes accessibility features that can be toggled including increasing or decreasing font size, resetting font size, toggling grayscale, contrast modes, and saturation modes. It includes the HTML and JavaScript code to implement these features.

Uploaded by

Santiago Clavijo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
33 views8 pages

Boton

The document describes accessibility features that can be toggled including increasing or decreasing font size, resetting font size, toggling grayscale, contrast modes, and saturation modes. It includes the HTML and JavaScript code to implement these features.

Uploaded by

Santiago Clavijo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 8

<link

href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC"
crossorigin="anonymous">
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"
crossorigin="anonymous"></script>

<div class="dmtop margin-accesibilidad">


<button type="button" class="btn btnAccesibilidad" id="botoon" data-bs-
toggle="modal"
data-bs-target="#modalAcc">
</button>
</div>

<script defer
src="https://cdn.jsdelivr.net/npm/alpinejs@3.13.5/dist/cdn.min.js"></script>

<div x-data="{ grayscale: 0, contrasteMode: 0, saturacionMode: 0, leerMode: 0,


resaltar: 0, indicadoresS: ['gray', 'gray', 'red'],indicadoresC: ['gray', 'gray',
'red'], indicadoresL: ['gray', 'gray', 'red'], indicadoresG: ['gray', 'gray',
'gray', 'gray', 'gray', 'red'] }"
x-init="

$watch('grayscale', value => {


switch (value) {
case 20:
document.documentElement.style.filter = 'grayscale(20%)';
indicadoresG = ['red', 'gray', 'gray', 'gray', 'gray',
'gray'];
break;
case 40:
document.documentElement.style.filter = 'grayscale(40%)';
indicadoresG = ['red', 'red', 'gray', 'gray', 'gray',
'gray'];
break;
case 60:
document.documentElement.style.filter = 'grayscale(60%)';
indicadoresG = ['red', 'red', 'red', 'gray', 'gray',
'gray'];
break;
case 80:
document.documentElement.style.filter = 'grayscale(80%)';
indicadoresG = ['red', 'red', 'red', 'red', 'gray',
'gray'];
break;
case 100:
document.documentElement.style.filter = 'grayscale(100%)';
indicadoresG = ['red', 'red', 'red', 'red', 'red', 'gray'];
break;
case 0:
document.documentElement.style.filter = 'grayscale(0)';
indicadoresG = ['gray', 'gray', 'gray', 'gray', 'gray',
'red'];
break;
}
});

$watch('contrasteMode', value => {


switch (value % 3) {
case 0:
document.documentElement.style.filter = 'invert(0)';
indicadoresC = ['gray', 'gray', 'red']
break;
case 1:
document.documentElement.style.filter = 'invert(1)';
indicadoresC = ['red', 'gray', 'gray']
break;
case 2:
document.documentElement.style.filter = 'sepia(1)';
indicadoresC = ['gray', 'red', 'gray']
break;

}
});
$watch('saturacionMode', value => {
switch (value % 3) {
case 0:
document.documentElement.style.filter = 'saturate(1)';
indicadoresS = ['gray', 'gray', 'red']
break;
case 1:
document.documentElement.style.filter = 'saturate(2)';
indicadoresS = ['red', 'gray' , 'gray']
break;
case 2:
document.documentElement.style.filter = 'saturate(0.5)';
indicadoresS = ['gray', 'red', 'gray']
break;

}
});
$watch('leerMode', value => {
let crosshair = document.getElementById('crosshair');
let readingMask = document.getElementById('readingMask'); //
Asegúrate de tener una referencia a este elemento
let e = { pageX: window.innerWidth / 2, pageY: window.innerHeight *
0.95 }; // 75% hacia abajo en la pantalla
switch (value % 3) {
case 0: // normal mode
document.onmousemove = null;
crosshair.style.display = 'none';
readingMask.style.display = 'none';
document.body.style.cursor = 'auto';
document.body.classList.remove('large-cursor')
document.body.classList.remove('blur');
indicadoresL = ['gray', 'gray', 'red']
break;
case 1: // crosshair mode
document.onmousemove = function(e) {
crosshair.style.left = e.pageX - (crosshair.offsetWidth
/ 2) + 'px';
crosshair.style.top = e.pageY - (crosshair.offsetHeight
/ 2) + 'px';
crosshair.style.display = 'block';
readingMask.style.display = 'none';
document.body.style.cursor = 'auto';
indicadoresL = ['red', 'gray', 'gray']
}
document.onmousemove(e); // Ejecuta la función
inmediatamente
break;
case 2:
document.onmousemove = function(e) {
readingMask.style.left = e.pageX -
(readingMask.offsetWidth / 2) + 'px';
readingMask.style.top = e.pageY -
(readingMask.offsetHeight / 2) + 'px';
readingMask.style.display = 'block';
crosshair.style.display = 'none';
document.body.style.cursor = 'auto';
document.body.classList.add('blur');
indicadoresL = ['gray', 'red', 'gray']
}
document.onmousemove(e); // Ejecuta la función
inmediatamente
break;
}
});

$watch('resaltar', value => {


let links = document.querySelectorAll('a');
links.forEach(link => {
if (value) {
link.style.backgroundColor = 'black';
link.style.color = 'yellow';
} else {
link.style.backgroundColor = '';
link.style.color= '';
}

});
})
">

<div id="readingMask" class="reading-mask"></div>


<!-- Modal -->
<div class="modal fade" id="modalAcc" tabindex="-1" aria-
labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-scrollable" id="modalDialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="titulo">Accesibilidad</h5>
<button type="button" class="btn-close" data-bs-
dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div id="contet1" onclick="increaseFontSize()">

<div>
<button id="bton1" onclick="increaseFontSize()">
<img id="aumentar" src="images/aumentar.png"
alt="aumentar fuente">
</button>
</div>

<div id="fonts">
<span class="button-text">Aumentar Fuente</span>
</div>

</div>

<div id="contet2" onclick="decreaseFontSize()">

<div>
<button id="bton3" onclick="decreaseFontSize()">
<img id="disminuir" src="images/disminuir.png"
alt="disminuir fuente">
</button>
</div>

<div>
<span class="button-text">Disminuir Fuente</span>
</div>

</div>

<div id="contet3" onclick="resetFontSize()">

<div>
<button id="bton2" onclick="resetFontSize()">
<img id="restaurar" src="images/restaurar.png"
alt="Restaurar tamaño de fuente">
</button>
</div>

<div>
<span class="button-text">Restablecer Fuente</span>
</div>

</div>

<div id="contet5" @click="saturacionMode = (saturacionMode


+ 1) % 3" class="indicators">

<div>
<button id="bton6" @click="saturacionMode =
(saturacionMode + 1) % 3">
<img id="saturar" src="images/saturar.png"
alt="saturacion">
</button>
</div>

<div>
<span class="button-text">Modo saturar</span>
<span :style="'color: ' +
indicadoresS[0]">Alto</span>
<span :style="'color: ' +
indicadoresS[1]">Bajo</span>
<span :style="'color: ' +
indicadoresS[2]">Normal</span>
</div>

</div>

<div id="contet6" @click="contrasteMode = (contrasteMode +


1) % 3">

<div>

<button id="bton5" @click="contrasteMode =


(contrasteMode + 1) % 3">
<img id="contraste" src="images/contraste.png"
alt="contraste">
</button>

</div>

<div>
<span class="button-text">Modo contraste</span>
<span :style="'color: ' +
indicadoresC[0]">Alto</span>
<span :style="'color: ' +
indicadoresC[1]">Bajo</span>
<span :style="'color: ' +
indicadoresC[2]">Normal</span>
</div>

</div>

<div id="contet7" @click="leerMode = (leerMode + 1) % 3">

<div>

<button id="bton7" @click="leerMode = (leerMode +


1) % 3">
<img id="lectura" src="images/lectura.png"
alt="Cambiar a modo lectura">
</button>

</div>

<div>
<span class="button-text">Ayudas lectoras</span>
<span :style="'color: ' + indicadoresL[0]">Linea
guia</span>
<span :style="'color: ' +
indicadoresL[1]">Mascara</span>
<span :style="'color: ' +
indicadoresL[2]">Normal</span>
</div>

</div>

<div id="contet8" @click="resaltar = !resaltar">

<div>

<button id="bton4" @click="resaltar = !resaltar">


<img id="resaltar" src="images/link.png"
alt="Resaltar links">
</button>

</div>

<div>
<span class="button-text">Resaltar links</span>
</div>

</div>

<div id="contet9" @click="window.scrollTo({ top: 0,


behavior: 'smooth' })">

<div>
<button id="bton8" @click="window.scrollTo({ top:
0, behavior: 'smooth' })">
<img id="inicio" src="images/subir.png"
alt="subir">
</button>
</div>

<div>
<span class="button-text">Ir arriba</span>
</div>

</div>

<div id="contet10"
@click="window.scrollTo({ top:
document.body.scrollHeight, belhavior: 'smooth'})">

<div>
<button id="bton9"
@click="window.scrollTo({ top:
document.body.scrollHeight, belhavior: 'smooth'})">
<img id="final" src="images/bajar.png"
alt="bajar">
</button>

</div>

<div>
<span class="button-text">Ir abajo</span>
</div>

</div>

<div id="contet11"
@click="grayscale = Math.min(grayscale + 20) % 120;
if(grayscale === 120) grayscale = 0;">

<div>
<button id="bton10"
@click="grayscale = Math.min(grayscale + 120) %
120; if(grayscale === 120) grayscale = 0;">
<img id="mas" src="images/anadir.png"
alt="escala de grises">
</button>
</div>

<div>
<span class="button-text">Escala gris</span>
<span :style="'color: ' +
indicadoresG[0]">20%</span>
<span :style="'color: ' +
indicadoresG[1]">40%</span>
<span :style="'color: ' +
indicadoresG[2]">60%</span>
<span :style="'color: ' +
indicadoresG[3]">80%</span>
<span :style="'color: ' +
indicadoresG[4]">100%</span>
<span :style="'color: ' +
indicadoresG[5]">0%</span>
</div>

</div>

</div>

</div>
</div>
</div>
</div>

<div id="crosshair" class="crosshair">


<div class="line horizontal"></div>
<div class="line vertical"></div>
</div>

<script>
const originalFontSizes = new Map();
let timeoutId;

// Almacenar los tamaños de fuente originales al cargar la página


document.addEventListener('DOMContentLoaded', function () {
document.querySelectorAll('*').forEach(element => {
let fontSize = window.getComputedStyle(element).fontSize;
originalFontSizes.set(element, fontSize);
});

document.querySelectorAll('#contet1, #contet2, #contet3, #contet5,


#contet6, #contet7, #contet8, #contet9, #contet10, #contet11,
#contet12').forEach(element => {
element.addEventListener('mouseenter', function () {
// Cancelar el timeout si ya existe uno
if (timeoutId) {
clearTimeout(timeoutId);
}

// Agregar un retraso antes de agregar la clase 'active'


timeoutId = setTimeout(() => {
this.classList.add('active');
}, 0);
});
element.addEventListener('mouseleave', function () {
// Cancelar el timeout si ya existe uno
if (timeoutId) {
clearTimeout(timeoutId);
}

// Quitar la clase 'active' inmediatamente


this.classList.remove('active');
});
});
});

function changeFontSize(element, change) {


// Omitir elementos dentro del modal y del botón
if (document.querySelector('#modalAcc').contains(element)) {
return;
}

let fontSize = parseFloat(window.getComputedStyle(element).fontSize);


element.style.fontSize = `${fontSize + change}px`;
}

function increaseFontSize() {
document.querySelectorAll('*').forEach(element =>
changeFontSize(element, 5));
}

function resetFontSize() {
// Restablecer a los tamaños de fuente originales
originalFontSizes.forEach((originalFontSize, element) => {
element.style.fontSize = originalFontSize;
});
}

function decreaseFontSize() {
document.querySelectorAll('*').forEach(element =>
changeFontSize(element, -5));
}

var myModal = new bootstrap.Modal(document.getElementById('modalAcc'), {


backdrop: false
});

myModal._element.addEventListener('shown.bs.modal', function () {
document.body.style.overflowY = 'visible';
});

myModal._element.addEventListener('hidden.bs.modal', function () {
document.body.style.overflowY = 'auto';
});

</script>

You might also like