2025-09-17 08:49:15 -06:00
< style >
. fake {
background-image : url ( img/bg05.jpg ) ;
background-repeat : no-repeat ;
background-position : center ;
background-size : cover ;
}
. hr-style {
opacity : 1 ;
width : 50 % ;
}
. drop-card {
border : 3 px dashed var ( - - bs - primary ) ;
2025-09-18 11:58:18 -06:00
width : 56 px ;
height : 56 px ;
2025-09-17 08:49:15 -06:00
}
2025-09-18 11:58:18 -06:00
/* .content-enfermedad {
width: 25%;
} */
2025-09-17 08:49:15 -06:00
. content-enfermedad img {
2025-09-18 11:58:18 -06:00
height : 250 px ;
2025-09-17 08:49:15 -06:00
}
. card-drag {
cursor : grab ;
width : 50 px ;
height : 50 px ;
}
. card-drag img {
width : 100 % ;
}
. card-drag . ui-draggable-dragging {
cursor : grabbing ;
}
. img-retro {
top : -75 px ;
left : 0 ;
right : 0 ;
margin : 0 auto ;
max-width : 40 % ;
}
< / style >
< 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' >
< div class = 'col-12' >
< div class = 'row justify-content-center' >
2025-09-18 11:58:18 -06:00
< div class = "col-11" >
2025-09-17 08:49:15 -06:00
< h2 class = "text-center fw-bold text-primary" > ¿Cómo funciona la diálisis peritoneal?< / h2 >
< hr class = "border border-3 border-verde-oscuro hr-style mx-auto my-0" >
2025-09-18 11:58:18 -06:00
< h3 class = "text-verde-oscuro fw-bold" > < span class = "text-lila-claro" > >< / span > Glucosa< / h3 >
2025-09-17 08:49:15 -06:00
< / div >
2025-09-18 11:58:18 -06:00
< div class = "col-12 mb-3" >
< div class = "card border-0 my-2 rounded bg-secondary shadow p-3 text-center" >
< div class = "d-flex justify-content-center align-items-center flex-row" >
< img src = "img/2.1.png" class = "img-fluid mx-3" >
< p class = "mb-0" > < strong > Instrucciones:< / strong > Observa los tapones, cada uno tiene un color que indica la concentración de su solución. Tu tarea es arrastrarlos hacia la solución que les corresponde.< / p >
2025-09-17 08:49:15 -06:00
< / div >
2025-09-18 11:58:18 -06:00
< / div >
< / div >
< div class = "col-12 mb-3" >
< div id = "content-drags" class = "d-flex flex-row justify-content-center gap-3" > < / div >
< / div >
< div class = "col-12" >
< div class = "card bg-transparent border-0 rounded-0 shadow-none p-0" >
< div class = "d-flex flex-row justify-content-center gap-3" >
< div class = "content-enfermedad text-center" >
< div class = "card rounded bg-custom-transparent border-0 shadow px-3 py-2 my-3" >
< img src = "img/5.1a.png" class = "img-fluid" >
< / div >
< / div >
< div class = "content-enfermedad text-center" >
< div class = "card rounded bg-custom-transparent border-0 shadow px-3 py-2 my-3" >
< img src = "img/5.2a.png" class = "img-fluid" >
< / div >
< / div >
< div class = "content-enfermedad text-center" >
< div class = "card rounded bg-custom-transparent border-0 shadow px-3 py-2 my-3" >
< img src = "img/5.3a.png" class = "img-fluid" >
< / div >
< / div >
< div class = "content-enfermedad text-center" >
< div class = "card rounded bg-custom-transparent border-0 shadow px-3 py-2 my-3" >
< img src = "img/5.4a.png" class = "img-fluid" >
2025-09-17 08:49:15 -06:00
< / div >
< / div >
< / div >
< / div >
< / div >
< / div >
< / div >
< / div >
< / div >
< / div >
< div class = "d-none" >
< div id = "pop0" >
< 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 >
< / div >
< / div >
< / div >
< / div >
< / div >
2025-09-12 16:51:04 -06:00
< script >
$ ( function ( ) {
'use strict' ;
2025-09-23 10:11:35 -06:00
$ ( '.wrap-course-content' ) . addClass ( 'fake' ) ;
2025-09-17 08:49:15 -06:00
let questions ;
let currentQuestionIndex = 0 ;
let currentQuestion ;
let correctQuestions = 0 ;
const bad = CourseNav . createSound ( 'audio/feedback-incorrect.mpeg' ) ;
const good = CourseNav . createSound ( 'audio/feedback-correct.mpeg' ) ;
const urlExcelFile = 'Drag_Drop3.xlsx' ;
function readExcelFile ( url , callback ) {
var xhr = new XMLHttpRequest ( ) ;
xhr . open ( 'GET' , url , true ) ;
xhr . responseType = 'arraybuffer' ;
xhr . onload = function ( e ) {
var arrayBuffer = xhr . response ;
var data = new Uint8Array ( arrayBuffer ) ;
var workbook = XLSX . read ( data , { type : "array" } ) ;
var result = { } ;
workbook . SheetNames . forEach ( sheetName => {
var sheet = workbook . Sheets [ sheetName ] ;
result [ sheetName ] = XLSX . utils . sheet _to _json ( sheet ) ;
} ) ;
callback ( result ) ;
} ;
xhr . send ( ) ;
}
function procesarPreguntas ( data ) {
const preguntas = data . map ( fila => {
const opciones = [ ] ;
Object . keys ( fila ) . forEach ( key => {
if ( key . startsWith ( 'opcion' ) ) {
opciones . push ( {
text : fila [ key ] . trim ( ) ,
correct : key === 'opcion_c'
} ) ;
}
} ) ;
return {
pregunta : fila . pregunta . trim ( ) ,
opciones : opciones ,
retroalimentacion _correcta : fila . retroalimentacion _correcta . trim ( ) ,
retroalimentacion _incorrecta : fila . retroalimentacion _incorrecta . trim ( )
} ;
} ) ;
return preguntas ;
}
function shuffleArray ( array ) {
for ( let i = array . length - 1 ; i > 0 ; i -- ) {
const j = Math . floor ( Math . random ( ) * ( i + 1 ) ) ;
[ array [ i ] , array [ j ] ] = [ array [ j ] , array [ i ] ] ;
}
return array ;
}
function CreateDragAndDrop ( ) {
$ ( '.content-enfermedad' ) . each ( function ( index ) {
if ( questions && questions [ index ] ) {
const dropDiv = ` <div class="position-relative card bg-transparent drop-card shadow-none rounded-0 p-0 mx-auto" data-drop=" ${ index } "></div> ` ;
$ ( dropDiv ) . insertAfter ( $ ( this ) . find ( '.card' ) ) ;
}
} ) ;
// Crear todas las respuestas en #content-drags
let allOptions = [ ] ;
questions . forEach ( ( question , index ) => {
question . opciones . forEach ( opcion => {
allOptions . push ( { text : opcion . text , index : index } ) ;
} ) ;
} ) ;
allOptions = shuffleArray ( allOptions ) ;
allOptions . forEach ( option => {
const dragDiv = ` <div class="card card-drag bg-transparent border border-2 border-secondary rounded-0 shadow-none text-white text-center" data-drag=" ${ option . index } "> ${ option . text } </div> ` ;
$ ( '#content-drags' ) . append ( dragDiv ) ;
} ) ;
}
function initializeDragAndDrop ( ) {
$ ( '.card-drag' ) . draggable ( {
revert : 'invalid' ,
revertDuration : 300 ,
containment : "#drag-drop-activity" ,
cursor : "grabbing" ,
start : function ( event , ui ) {
$ ( this ) . css ( 'z-index' , 1000 ) ;
ui . position . left = 0 ;
ui . position . top = 0 ;
} ,
drag : function ( event , ui ) {
var changeLeft = ui . position . left - ui . originalPosition . left ;
var newLeft = ui . originalPosition . left + changeLeft ;
var changeTop = ui . position . top - ui . originalPosition . top ;
var newTop = ui . originalPosition . top + changeTop ;
ui . position . left = newLeft ;
ui . position . top = newTop ;
} ,
stop : function ( event , ui ) {
$ ( this ) . css ( 'z-index' , 1 ) ;
}
} ) ;
$ ( '.drop-card' ) . droppable ( {
accept : '.card-drag' ,
tolerance : 'pointer' ,
drop : function ( event , ui ) {
const dragData = ui . helper . data ( 'drag' ) ;
const dropData = $ ( this ) . data ( 'drop' ) ;
if ( dragData == dropData ) {
good . play ( ) ;
ui . helper . css ( { position : 'static' , top : 'auto' , left : 'auto' } ) . appendTo ( this ) ;
ui . helper . draggable ( 'disable' ) ;
$ ( this ) . droppable ( 'disable' ) ;
// Verificar si todos están completados
if ( $ ( '.drop-card:not(.ui-droppable-disabled)' ) . length === 0 ) {
Completed ( ) ;
}
} else {
bad . play ( ) ;
ui . helper . draggable ( 'option' , 'revert' , true ) ;
}
}
} ) ;
}
function Completed ( ) {
const html = $ ( "#pop0" ) . html ( ) ;
Swal . fire ( {
html : html ,
2025-09-24 22:51:53 -06:00
target : document . getElementById ( 'wrap-course-content' ) ,
2025-09-17 08:49:15 -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 ,
focusConfirm : false ,
backdrop : "rgba(65, 60, 60, .95)" ,
width : "35em" ,
didOpen : ( ) => {
} ,
didClose : ( ) => {
CourseNav . audioController . stopAudio ( ) ;
//CourseNav.soundClick();
CourseNav . setSlideVisited ( ) ;
/* setTimeout(() => {
Swal.close();
CourseNav.nextSlide();
}, 100); */
} ,
} ) ;
}
readExcelFile ( urlExcelFile , function ( data ) {
const hojaDatos = data [ "DragAndDrop" ] ;
questions = procesarPreguntas ( hojaDatos ) ;
CreateDragAndDrop ( ) ;
initializeDragAndDrop ( ) ;
} ) ;
2025-09-12 16:51:04 -06:00
} ) ;
2025-09-18 11:58:18 -06:00
< / script >