2025-09-18 16:56:37 -06:00
< style >
. fake {
background-image : url ( img/bg04.jpg ) ;
background-repeat : no-repeat ;
background-position : center ;
background-size : cover ;
}
. hr-style {
opacity : 1 ;
2025-09-23 10:11:35 -06:00
width : 85 % ;
2025-09-18 16:56:37 -06:00
}
2025-09-23 10:11:35 -06:00
. custom-grid {
position : relative ;
display : grid ;
grid-template-columns : repeat ( 6 , 1 fr ) ;
grid-template-rows : auto ;
gap : 10 px ;
justify-content : center ;
align-items : center ;
max-width : 1280 px ; /* Esto limita el ancho total */
margin : 0 auto ;
width : 100 % ;
}
. card-container {
width : 100 % ;
aspect-ratio : 1 ;
cursor : pointer ;
}
. card-container . disabled {
filter : grayscale ( 1 ) ;
pointer-events : none ;
}
2025-09-18 16:56:37 -06:00
< / style >
2025-09-23 10:11:35 -06:00
< div class = 'page-sco py-2 py-md-4 h-100' >
< div class = 'container h-100' >
< div class = 'row justify-content-center align-items-center h-100' >
2025-09-18 16:56:37 -06:00
< div class = 'col-12' >
< div class = 'row justify-content-center' >
< div class = "col-10 mb-2" >
< h2 class = "text-center fw-bold text-primary" > ¿Qué necesito para poder realizar la Diálisis Peritoneal Continua Ambulatoria (DPCA)?< / h2 >
< hr class = "border border-3 border-verde-oscuro hr-style mx-auto my-0" >
< / div >
2025-09-23 10:11:35 -06:00
< div class = "col-10 px-0 mb-1" >
2025-09-18 16:56:37 -06:00
< div class = "card bg-verde-gris border-0 my-2 rounded-4 bg-custom p-3 text-center" >
< div class = "d-flex justify-content-center align-items-center flex-row" >
< img src = "img/08.0.png" class = "img-fluid mx-3" >
< p class = "mb-0" > < strong > Instrucciones:< / strong > Da clic en las tarjetas para encontrar los pares y descubrir los elementos necesarios para llevar a cabo la DPCA.< / p >
< / div >
< / div >
< / div >
2025-09-23 10:11:35 -06:00
< div class = "col-12" >
< di class = "tablero d-flex flex-column justify-content-center align-items-center gap-2" >
< div class = "row-questions custom-grid" id = "row-questions" >
< div class = "card-container" >
< div class = "front" >
< img src = "img/08.front.png" class = "img-fluid" >
< / div >
< div class = "back" >
< img src = "img/08.1.png" class = "img-fluid" >
< / div >
< / div >
< div class = "card-container" >
< div class = "front" >
< img src = "img/08.front.png" class = "img-fluid" >
< / div >
< div class = "back" >
< img src = "img/08.2.png" class = "img-fluid" >
< / div >
< / div >
< div class = "card-container" >
< div class = "front" >
< img src = "img/08.front.png" class = "img-fluid" >
< / div >
< div class = "back" >
< img src = "img/08.3.png" class = "img-fluid" >
< / div >
< / div >
< div class = "card-container" >
< div class = "front" >
< img src = "img/08.front.png" class = "img-fluid" >
< / div >
< div class = "back" >
< img src = "img/08.4.png" class = "img-fluid" >
< / div >
< / div >
< div class = "card-container" >
< div class = "front" >
< img src = "img/08.front.png" class = "img-fluid" >
< / div >
< div class = "back" >
< img src = "img/08.5.png" class = "img-fluid" >
< / div >
< / div >
< div class = "card-container" >
< div class = "front" >
< img src = "img/08.front.png" class = "img-fluid" >
< / div >
< div class = "back" >
< img src = "img/08.6.png" class = "img-fluid" >
< / div >
< / div >
< / div >
< div class = "row-answer custom-grid" id = "row-answer" >
< div class = "card-container" >
< div class = "front" >
< img src = "img/08.front.png" class = "img-fluid" >
< / div >
< div class = "back" >
< img src = "img/08.1c.png" class = "img-fluid" >
< / div >
< / div >
< div class = "card-container" >
< div class = "front" >
< img src = "img/08.front.png" class = "img-fluid" >
< / div >
< div class = "back" >
< img src = "img/08.2c.png" class = "img-fluid" >
< / div >
< / div >
< div class = "card-container" >
< div class = "front" >
< img src = "img/08.front.png" class = "img-fluid" >
< / div >
< div class = "back" >
< img src = "img/08.3c.png" class = "img-fluid" >
< / div >
< / div >
< div class = "card-container" >
< div class = "front" >
< img src = "img/08.front.png" class = "img-fluid" >
< / div >
< div class = "back" >
< img src = "img/08.4c.png" class = "img-fluid" >
< / div >
< / div >
< div class = "card-container" >
< div class = "front" >
< img src = "img/08.front.png" class = "img-fluid" >
< / div >
< div class = "back" >
< img src = "img/08.5c.png" class = "img-fluid" >
< / div >
< / div >
< div class = "card-container" >
< div class = "front" >
< img src = "img/08.front.png" class = "img-fluid" >
< / div >
< div class = "back" >
< img src = "img/08.6c.png" class = "img-fluid" >
< / div >
< / div >
< / div >
< / div >
< / div >
< / div >
< / div >
< / div >
< / div >
< / div >
< div class = "d-none" >
< div id = "retro-pop" >
< div class = "container-fluid" >
< div class = " w-100 text-center" >
< img src = "img/3.5.png" class = "img-fluid" >
< / div >
< div class = "row justify-content-center" >
< div class = "col-12 text-center mb-2" >
< h3 class = "text-secondary-dark fw-bold" > ¡Bien hecho!< / h3 >
< / div >
< div class = "col-12 text-center" >
< p class = "mb-0" > Has concluido la actividad.< / p >
2025-09-18 16:56:37 -06:00
< / div >
< / div >
< / div >
< / div >
< / div >
< script >
$ ( function ( ) {
"use strict" ;
2025-09-23 10:11:35 -06:00
$ ( '.wrap-course-content' ) . addClass ( 'fake' ) ;
const flip _sound = CourseNav . createSound ( 'audio/flip.mp3' ) ;
const feedbackcorrect = CourseNav . createSound ( 'audio/feedback-correct.mpeg' ) ;
const feedbackincorrect = CourseNav . createSound ( 'audio/feedback-incorrect.mpeg' ) ;
// Función para asignar pares a cada tarjeta
function assignPairs ( fatherId ) {
const optionsContainer = document . getElementById ( fatherId ) ;
const optionsArray = Array . from ( optionsContainer . children ) ;
optionsArray . forEach ( ( option , index ) => {
option . setAttribute ( 'data-par' , index ) ;
} ) ;
}
// Función para mezclar las tarjetas dentro del contenedor especificado
function randomizeOptions ( fatherId ) {
const optionsContainer = document . getElementById ( fatherId ) ;
const optionsArray = Array . from ( optionsContainer . children ) ;
const shuffledOptions = optionsArray . sort ( ( ) => Math . random ( ) - 0.5 ) ;
shuffledOptions . forEach ( option => optionsContainer . appendChild ( option ) ) ;
}
// Inicializar el plugin flip y configurar la lógica del memorama con la restricción de fila
function initializeFlip ( ) {
let flippedCards = [ ] ;
let lastFlippedRow = "" ; // Para rastrear la última fila girada
$ ( ".card-container" ) . flip ( {
trigger : 'manual' // Control manual del volteo
} ) ;
$ ( ".card-container" ) . on ( "click" , function ( ) {
const $card = $ ( this ) ;
const currentRow = $card . closest ( ".row-answer" ) . length > 0 ? "row-answer" : "row-questions" ;
// Limitar el giro a una carta por fila y evitar tres giros
if ( flippedCards . length < 2 && ( flippedCards . length === 0 || currentRow !== lastFlippedRow ) ) {
$card . flip ( true ) ;
flippedCards . push ( $card ) ;
lastFlippedRow = currentRow ;
flip _sound . play ( ) ;
// Si hay dos cartas volteadas, verificar coincidencia
if ( flippedCards . length === 2 ) {
const [ firstCard , secondCard ] = flippedCards ;
if ( firstCard . data ( "par" ) === secondCard . data ( "par" ) ) {
// Las tarjetas coinciden, dejarlas volteadas y marcar como emparejadas
firstCard . addClass ( "disabled" ) ;
secondCard . addClass ( "disabled" ) ;
// Agregar el efecto de resplandor
gsap . to ( firstCard , {
duration : 1 ,
boxShadow : "0px 0px 20px 10px #fff" ,
onComplete : function ( ) {
// Quitar el efecto de resplandor después de 2 segundos
gsap . to ( firstCard , {
duration : 1 ,
delay : 1 ,
boxShadow : "0px 0px 0px 0px #fff"
} ) ;
}
} ) ;
// Agregar el efecto de resplandor
gsap . to ( secondCard , {
duration : 1 ,
boxShadow : "0px 0px 20px 10px #fff" ,
onComplete : function ( ) {
// Quitar el efecto de resplandor después de 2 segundos
gsap . to ( secondCard , {
duration : 1 ,
delay : 1 ,
boxShadow : "0px 0px 0px 0px #fff"
} ) ;
}
} ) ;
CourseNav . audioController . stopAllSoundsAndPlay ( feedbackcorrect ) ;
flippedCards = [ ] ;
checkGameCompletion ( ) ;
} else {
CourseNav . audioController . stopAllSoundsAndPlay ( feedbackincorrect ) ;
// Las tarjetas no coinciden, voltearlas de nuevo después de un breve retraso
setTimeout ( ( ) => {
firstCard . flip ( false ) ;
secondCard . flip ( false ) ;
flippedCards = [ ] ;
lastFlippedRow = "" ; // Reiniciar el rastreo de fila
} , 850 ) ;
}
}
}
} ) ;
}
// Verificar si todas las tarjetas han sido emparejadas
function checkGameCompletion ( ) {
const totalPairs = $ ( ".card-container" ) . length / 2 ;
const matchedPairs = $ ( ".card-container.disabled" ) . length / 2 ;
if ( matchedPairs === totalPairs ) {
setTimeout ( showFeedbackPopup , 250 ) ;
}
}
function showFeedbackPopup ( ) {
const html = $ ( "#retro-pop" ) . html ( ) ;
Swal . fire ( {
html : html ,
2025-09-24 22:51:53 -06:00
target : document . getElementById ( 'wrap-course-content' ) ,
2025-09-23 10:11:35 -06:00
customClass : {
popup : 'pop_html_style border border-3 border-primary rounded-4' ,
confirmButton : 'btn text-white bg-primary amor fw-semibold animate__animated animate__pulse animate__infinite'
} ,
confirmButtonText : "Cerrar" ,
showConfirmButton : true ,
allowOutsideClick : false ,
allowEscapeKey : false ,
backdrop : "rgba(65, 60, 60, .95)" ,
width : "35em" ,
didClose : ( ) => {
CourseNav . setSlideVisited ( ) ;
}
} ) ;
}
assignPairs ( 'row-answer' ) ;
assignPairs ( 'row-questions' ) ;
randomizeOptions ( 'row-answer' ) ;
randomizeOptions ( 'row-questions' ) ;
initializeFlip ( ) ;
2025-09-18 16:56:37 -06:00
} ) ;
< / script >