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 ) ;
2026-07-01 02:25:52 -06:00
width : 80 px ;
height : 80 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 ;
2026-07-01 02:25:52 -06:00
width : 75 px ;
height : 75 px ;
2025-09-17 08:49:15 -06:00
}
. 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 >
2026-07-01 02:25:52 -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" style = "overflow: hidden" >
< div class = "col-12" >
< div id = "drag-drop-activity" class = "row justify-content-center" >
2025-09-18 11:58:18 -06:00
< div class = "col-11" >
2026-07-01 02:25:52 -06:00
< h2 class = "text-center fw-bold text-primary" > ¿Cómo funciona la diálisis peritoneal?< sup class = "fw-bold" > 1,2,4,5< / sup > < / h2 >
< hr class = "border border-3 border-verde-oscuro hr-style mx-auto my-0" / >
<!-- <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" >
2026-07-01 02:25:52 -06:00
< img src = "img/2.1.png" class = "img-fluid mx-3" / >
2025-09-18 11:58:18 -06:00
< 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" >
2026-07-01 02:25:52 -06:00
< img src = "img/5.1a.png" class = "img-fluid" / >
2025-09-18 11:58:18 -06:00
< / div >
< / div >
< div class = "content-enfermedad text-center" >
< div class = "card rounded bg-custom-transparent border-0 shadow px-3 py-2 my-3" >
2026-07-01 02:25:52 -06:00
< img src = "img/5.2a.png" class = "img-fluid" / >
2025-09-18 11:58:18 -06:00
< / div >
< / div >
< div class = "content-enfermedad text-center" >
< div class = "card rounded bg-custom-transparent border-0 shadow px-3 py-2 my-3" >
2026-07-01 02:25:52 -06:00
< img src = "img/5.3a.png" class = "img-fluid" / >
2025-09-18 11:58:18 -06:00
< / div >
< / div >
< div class = "content-enfermedad text-center" >
< div class = "card rounded bg-custom-transparent border-0 shadow px-3 py-2 my-3" >
2026-07-01 02:25:52 -06:00
< 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" >
2026-07-01 02:25:52 -06:00
< div class = "w-100 text-center" >
< img src = "img/3.5.png" class = "img-fluid" / >
2025-09-17 08:49:15 -06:00
< / 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 ) ;
2026-07-01 02:25:52 -06:00
var workbook = XLSX . read ( data , { type : 'array' } ) ;
2025-09-17 08:49:15 -06:00
var result = { } ;
2026-07-01 02:25:52 -06:00
workbook . SheetNames . forEach ( ( sheetName ) => {
2025-09-17 08:49:15 -06:00
var sheet = workbook . Sheets [ sheetName ] ;
result [ sheetName ] = XLSX . utils . sheet _to _json ( sheet ) ;
} ) ;
callback ( result ) ;
} ;
xhr . send ( ) ;
}
function procesarPreguntas ( data ) {
2026-07-01 02:25:52 -06:00
const preguntas = data . map ( ( fila ) => {
2025-09-17 08:49:15 -06:00
const opciones = [ ] ;
2026-07-01 02:25:52 -06:00
Object . keys ( fila ) . forEach ( ( key ) => {
2025-09-17 08:49:15 -06:00
if ( key . startsWith ( 'opcion' ) ) {
opciones . push ( {
text : fila [ key ] . trim ( ) ,
2026-07-01 02:25:52 -06:00
correct : key === 'opcion_c' ,
2025-09-17 08:49:15 -06:00
} ) ;
}
} ) ;
return {
pregunta : fila . pregunta . trim ( ) ,
opciones : opciones ,
retroalimentacion _correcta : fila . retroalimentacion _correcta . trim ( ) ,
2026-07-01 02:25:52 -06:00
retroalimentacion _incorrecta : fila . retroalimentacion _incorrecta . trim ( ) ,
2025-09-17 08:49:15 -06:00
} ;
} ) ;
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 ) => {
2026-07-01 02:25:52 -06:00
question . opciones . forEach ( ( opcion ) => {
2025-09-17 08:49:15 -06:00
allOptions . push ( { text : opcion . text , index : index } ) ;
} ) ;
} ) ;
allOptions = shuffleArray ( allOptions ) ;
2026-07-01 02:25:52 -06:00
allOptions . forEach ( ( option ) => {
2025-09-17 08:49:15 -06:00
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 ,
2026-07-01 02:25:52 -06:00
cursor : 'grabbing' ,
2025-09-17 08:49:15 -06:00
start : function ( event , ui ) {
$ ( this ) . css ( 'z-index' , 1000 ) ;
ui . position . left = 0 ;
ui . position . top = 0 ;
} ,
drag : function ( event , ui ) {
2025-10-22 09:04:17 -06:00
var scale = parseFloat ( $ ( '.wrap-course-content' ) . css ( 'transform' ) . split ( '(' ) [ 1 ] ) || 1 ;
2025-09-17 08:49:15 -06:00
var changeLeft = ui . position . left - ui . originalPosition . left ;
2025-10-22 09:04:17 -06:00
var newLeft = ui . originalPosition . left + changeLeft / scale ;
2025-09-17 08:49:15 -06:00
var changeTop = ui . position . top - ui . originalPosition . top ;
2025-10-22 09:04:17 -06:00
var newTop = ui . originalPosition . top + changeTop / scale ;
2025-09-17 08:49:15 -06:00
ui . position . left = newLeft ;
ui . position . top = newTop ;
} ,
stop : function ( event , ui ) {
$ ( this ) . css ( 'z-index' , 1 ) ;
2026-07-01 02:25:52 -06:00
} ,
2025-09-17 08:49:15 -06:00
} ) ;
$ ( '.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 ) ;
}
2026-07-01 02:25:52 -06:00
} ,
2025-09-17 08:49:15 -06:00
} ) ;
}
function Completed ( ) {
2026-07-01 02:25:52 -06:00
const html = $ ( '#pop0' ) . html ( ) ;
2025-09-17 08:49:15 -06:00
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' ,
2026-07-01 02:25:52 -06:00
confirmButton : 'btn text-white bg-primary amor fw-semibold animate__animated animate__pulse animate__infinite' ,
2025-09-17 08:49:15 -06:00
} ,
2026-07-01 02:25:52 -06:00
confirmButtonText : 'Cerrar' ,
2025-09-17 08:49:15 -06:00
showConfirmButton : true ,
allowOutsideClick : false ,
allowEscapeKey : false ,
focusConfirm : false ,
2026-07-01 02:25:52 -06:00
backdrop : 'rgba(65, 60, 60, .95)' ,
width : '35em' ,
didOpen : ( ) => { } ,
2025-09-17 08:49:15 -06:00
didClose : ( ) => {
CourseNav . audioController . stopAudio ( ) ;
//CourseNav.soundClick();
CourseNav . setSlideVisited ( ) ;
/* setTimeout(() => {
Swal.close();
CourseNav.nextSlide();
}, 100); */
} ,
} ) ;
}
readExcelFile ( urlExcelFile , function ( data ) {
2026-07-01 02:25:52 -06:00
const hojaDatos = data [ 'DragAndDrop' ] ;
2025-09-17 08:49:15 -06:00
questions = procesarPreguntas ( hojaDatos ) ;
CreateDragAndDrop ( ) ;
initializeDragAndDrop ( ) ;
} ) ;
2025-09-12 16:51:04 -06:00
} ) ;
2025-09-18 11:58:18 -06:00
< / script >