Compare commits
2 Commits
41446d9e02
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 82749e7bbd | |||
| 2f862eb80e |
@@ -34,6 +34,10 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "Manejo de Objeciones",
|
"title": "Manejo de Objeciones",
|
||||||
|
"content": "contenido/mo.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Actividad",
|
||||||
"content": "contenido/08.html"
|
"content": "contenido/08.html"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -88,7 +88,7 @@
|
|||||||
<div class="w-100">
|
<div class="w-100">
|
||||||
<div class="ratio ratio-16x9">
|
<div class="ratio ratio-16x9">
|
||||||
<video id="video" class="embed-responsive-item" controls autoplay poster="video/poster.jpg">
|
<video id="video" class="embed-responsive-item" controls autoplay poster="video/poster.jpg">
|
||||||
<source src="video/dummy.mp4" type="video/mp4" />
|
<source src="video/Drossagyn.mp4" type="video/mp4" />
|
||||||
Your browser does not support the video tag.
|
Your browser does not support the video tag.
|
||||||
</video>
|
</video>
|
||||||
<div class="play-button-container">
|
<div class="play-button-container">
|
||||||
|
|||||||
@@ -0,0 +1,303 @@
|
|||||||
|
<style>
|
||||||
|
.fake {
|
||||||
|
background-image: url('img/mo.png');
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- Contenedor de la Burbuja --- */
|
||||||
|
.speech-bubble {
|
||||||
|
position: relative;
|
||||||
|
background: #ffffff; /* Fondo blanco */
|
||||||
|
color: #333333; /* Texto oscuro para legibilidad */
|
||||||
|
border-radius: 0.5em;
|
||||||
|
padding: 1.5rem;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
min-height: 120px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); /* Sombra para resaltar sobre el fondo */
|
||||||
|
transition: all 0.3s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bubble-text {
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- Animaciones de Personajes (Foco visual) --- */
|
||||||
|
.speaker-active {
|
||||||
|
transform: scale(1.05);
|
||||||
|
filter: drop-shadow(0 4px 10px rgba(0, 0, 0, 0.2));
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.speaker-inactive {
|
||||||
|
opacity: 0.6;
|
||||||
|
transform: scale(0.95);
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- COMPORTAMIENTO MOBILE (Apilamiento vertical de Bootstrap) --- */
|
||||||
|
@media (max-width: 767.98px) {
|
||||||
|
/* Apunta hacia arriba (al Médico) */
|
||||||
|
.speech-bubble-left::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
top: -20px;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
border: 20px solid transparent;
|
||||||
|
border-width: 0 20px 20px 20px;
|
||||||
|
border-bottom-color: #ffffff; /* Coincide con el fondo blanco */
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Apunta hacia abajo (al Representante) */
|
||||||
|
.speech-bubble-right::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
top: auto;
|
||||||
|
bottom: -20px;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
border: 20px solid transparent;
|
||||||
|
border-width: 20px 20px 0 20px;
|
||||||
|
border-top-color: #ffffff; /* Coincide con el fondo blanco */
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- COMPORTAMIENTO DESKTOP (md y superior) --- */
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
/* Apunta hacia la izquierda */
|
||||||
|
.speech-bubble-left::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 50%;
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
border: 20px solid transparent;
|
||||||
|
border-right-color: #ffffff; /* Coincide con el fondo blanco */
|
||||||
|
border-left: 0;
|
||||||
|
margin-top: -20px;
|
||||||
|
margin-left: -20px;
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Apunta hacia la derecha */
|
||||||
|
.speech-bubble-right::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
left: auto;
|
||||||
|
top: 50%;
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
border: 20px solid transparent;
|
||||||
|
border-left-color: #ffffff; /* Coincide con el fondo blanco */
|
||||||
|
border-right: 0;
|
||||||
|
margin-top: -20px;
|
||||||
|
margin-right: -20px;
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div class='page-sco py-3 py-md-4 bg-transparent'>
|
||||||
|
<div class='container'>
|
||||||
|
<div class='row justify-content-center align-items-center'>
|
||||||
|
<div class='col-12 anim0'>
|
||||||
|
<div class='row justify-content-center align-items-center'>
|
||||||
|
|
||||||
|
<div class='col-12 text-center'>
|
||||||
|
<h2 class='mb-4 fw-semibold text-center'>Manejo de Objeciones</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Avatar Médico -->
|
||||||
|
<div class='col-6 col-md-3 text-center'>
|
||||||
|
<img src='img/med.png' class='img-fluid speaker-inactive' alt='Médico' id="medico">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Contenedor Dinámico de Diálogo -->
|
||||||
|
<div class='col-12 col-md-6 text-center'>
|
||||||
|
<div id="dialogue-bubble" class="speech-bubble">
|
||||||
|
<div id="dialogue-text" class="bubble-text">
|
||||||
|
<!-- El texto se inyecta dinámicamente mediante JS -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Avatar Representante -->
|
||||||
|
<div class='col-6 col-md-3 text-center'>
|
||||||
|
<img src='img/rep.png' class='img-fluid speaker-inactive' alt='Representante' id="rep">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
/**
|
||||||
|
* Módulo de Diálogo Interactivo
|
||||||
|
* Orquesta la secuencia de texto y audio, manipulando el DOM según el hablante activo.
|
||||||
|
*/
|
||||||
|
$(function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
$('body').addClass('fake');
|
||||||
|
|
||||||
|
// Configuración de la secuencia del diálogo
|
||||||
|
const mo = [
|
||||||
|
{
|
||||||
|
text: "No utilizo Drossagyn porque la terapia hormonal aumenta el riesgo de cáncer (principalmente de mama) en las pacientes.",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/0027-Drossagyn-ob1.mp3') : null,
|
||||||
|
img: '#medico'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Doctor, entiendo perfectamente esa preocupación, porque durante muchos años el tema del riesgo oncológico asociado a la terapia hormonal generó mucha cautela en la práctica clínica.",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo01.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Sin embargo, en los últimos años la evidencia ha permitido confirmar la seguridad de la terapia hormonal.",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo02.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "De hecho, este cambio de perspectiva fue tan contundente que en 2025 la FDA retiró las advertencias de seguridad, precisamente porque la evidencia acumulada permitió redefinir el verdadero perfil riesgo-beneficio de estas terapias.",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo03.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Además, cuando hablamos de Drossagyn, estamos hablando de estriol administrado por vía local; la absorción sistémica es mínima, con concentraciones plasmáticas muy bajas, insuficientes para generar la exposición hormonal sostenida que en el pasado se asociaba a preocupación oncológica en las terapias sistémicas.",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo04.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Al mismo tiempo, la administración local de Drossagyn logra una excelente eficacia sobre los tejidos vaginales, restaurando el grosor epitelial, la elasticidad y la lubricación, con un impacto clínico muy claro sobre los síntomas y la calidad de vida de la paciente.",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo05.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Mis pacientes, en general, tienen mala adherencia a tratamientos con cremas vaginales.",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/0029-Drossagyn-ob2.mp3') : null,
|
||||||
|
img: '#medico'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Entiendo, doctor, de acuerdo con lo que me comenta, que algunas pacientes pueden tener dudas iniciales sobre la aplicación vaginal",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo06.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Sin embargo, cuando experimentan la mejoría directa en síntomas como resequedad, ardor o dispareunia, la adherencia mejora significativamente.",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo07.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Drossagyn actúa directamente en el tejido afectado, lo que permite una recuperación más fisiológica y eficaz del epitelio vaginal, favoreciendo que la paciente perciba el beneficio y continúe el tratamiento.",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo08.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "¿No le parece que valdría mucho la pena transmitir a sus pacientes los beneficios que pueden obtener en relación con su calidad de vida con el uso de Drossagyn?",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo09.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Reconozco la importancia de la terapia hormonal local, sin embargo, me funciona muy bien Ovestin. ¿Por qué cambiaría?",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/0031-Drossagyn-ob3.mp3') : null,
|
||||||
|
img: '#medico'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Doctor, gracias por su comentario.",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo10.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Entiendo con esto que ya cuenta con experiencia en el uso de estriol local. Permítame mencionarle una de las ventajas de Drossagyn: ofrece estriol en una formulación farmacéutica desarrollada bajo estándares europeos y con el respaldo científico de Besins Healthcare, líder global en salud hormonal femenina.",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo11.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Esto le permite contar con una opción confiable dentro de un portafolio especializado en el manejo del síndrome genitourinario de la menopausia. Aunado a lo anterior, Drossagyn es una crema muy ligera y de fácil aplicación que no dejará residuos molestos en la paciente.",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo12.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Un beneficio adicional es que su presentación cubrirá los 3 meses iniciales de tratamiento indicados por las guías para tratar los síntomas genitourinarios de la menopausia.",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo13.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Sin duda, es un tema que puede llamar la atención de sus pacientes.",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo14.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "¿no le parece, Doctor?",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo15.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
// Caché de elementos del DOM
|
||||||
|
const $bubble = $('#dialogue-bubble');
|
||||||
|
const $text = $('#dialogue-text');
|
||||||
|
const $medico = $('#medico');
|
||||||
|
const $rep = $('#rep');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ejecuta un nodo de diálogo recursivamente hasta finalizar el array.
|
||||||
|
* @param {number} index - Índice actual de la conversación.
|
||||||
|
*/
|
||||||
|
function playDialogueStep(index) {
|
||||||
|
// Condición de cierre: Secuencia terminada
|
||||||
|
if (index >= mo.length) {
|
||||||
|
if (typeof CourseNav !== 'undefined' && typeof CourseNav.completeLesson === 'function') {
|
||||||
|
CourseNav.setSlideVisited();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const currentStep = mo[index];
|
||||||
|
|
||||||
|
// 1. Actualizar texto con transición limpia
|
||||||
|
$text.hide().html(`<p class="mb-0 m-0">${currentStep.text}</p>`).fadeIn(300);
|
||||||
|
|
||||||
|
// 2. Gestionar la orientación de la burbuja y el foco en los personajes
|
||||||
|
if (currentStep.img === '#medico') {
|
||||||
|
$bubble.removeClass('speech-bubble-right').addClass('speech-bubble-left');
|
||||||
|
$medico.removeClass('speaker-inactive').addClass('speaker-active');
|
||||||
|
$rep.removeClass('speaker-active').addClass('speaker-inactive');
|
||||||
|
} else if (currentStep.img === '#rep') {
|
||||||
|
$bubble.removeClass('speech-bubble-left').addClass('speech-bubble-right');
|
||||||
|
$rep.removeClass('speaker-inactive').addClass('speaker-active');
|
||||||
|
$medico.removeClass('speaker-active').addClass('speaker-inactive');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. Reproducir audio e instanciar el listener recursivo
|
||||||
|
if (typeof CourseNav !== 'undefined' && CourseNav.audioController && currentStep.sound) {
|
||||||
|
CourseNav.audioController.stopAllSoundsAndPlay(currentStep.sound);
|
||||||
|
|
||||||
|
// Asumiendo que CourseNav utiliza Howler.js u otra API basada en eventos (on/once)
|
||||||
|
currentStep.sound.once("end", function () {
|
||||||
|
playDialogueStep(index + 1);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// Fallback para entornos de desarrollo donde el audio no esté cargado
|
||||||
|
console.warn(`[Modo Desarrollo]: Simulando delay para el audio de: ${currentStep.img}`);
|
||||||
|
setTimeout(() => {
|
||||||
|
playDialogueStep(index + 1);
|
||||||
|
}, 4000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Inicializar el diálogo
|
||||||
|
playDialogueStep(0);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 306 KiB |
|
After Width: | Height: | Size: 60 KiB |
@@ -1,4 +1,4 @@
|
|||||||
<!DOCTYPE html>
|
<!doctype html>
|
||||||
<html lang="es">
|
<html lang="es">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
@@ -15,9 +15,9 @@
|
|||||||
<link rel="stylesheet" href="css/sweetalert2.min.css" />
|
<link rel="stylesheet" href="css/sweetalert2.min.css" />
|
||||||
<link rel="stylesheet" href="css/swiper-bundle.min.css" />
|
<link rel="stylesheet" href="css/swiper-bundle.min.css" />
|
||||||
<link rel="stylesheet" href="css/driver.css" />
|
<link rel="stylesheet" href="css/driver.css" />
|
||||||
<link rel="stylesheet" href="font/roboto/stylesheet.css">
|
<link rel="stylesheet" href="font/roboto/stylesheet.css" />
|
||||||
<link rel="stylesheet" href="css/theme.min.css" />
|
<link rel="stylesheet" href="css/theme.min.css" />
|
||||||
<link rel="stylesheet" href="css/sal.css">
|
<link rel="stylesheet" href="css/sal.css" />
|
||||||
<link rel="stylesheet" href="css/style.min.css" />
|
<link rel="stylesheet" href="css/style.min.css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
@@ -29,7 +29,10 @@
|
|||||||
<a class="navbar-brand p-0 disabled order-1" href="#">
|
<a class="navbar-brand p-0 disabled order-1" href="#">
|
||||||
<img src="img/template/logo.svg" width="180" alt="Logo" />
|
<img src="img/template/logo.svg" width="180" alt="Logo" />
|
||||||
</a>
|
</a>
|
||||||
<div id="titleSco" class="flex-grow-1 title_head_sco text-center text-white fw-bold fs-5 order-3 order-md-2"></div>
|
<div
|
||||||
|
id="titleSco"
|
||||||
|
class="flex-grow-1 title_head_sco text-center text-white fw-bold fs-5 order-3 order-md-2"
|
||||||
|
></div>
|
||||||
<div class="d-flex align-items-center text-white order-2 order-md-3 ms-auto">
|
<div class="d-flex align-items-center text-white order-2 order-md-3 ms-auto">
|
||||||
<!-- <button class="btn-glossary controls-btn me-2" id="btn-glossary" aria-label="Glossary">
|
<!-- <button class="btn-glossary controls-btn me-2" id="btn-glossary" aria-label="Glossary">
|
||||||
<i class="fa-regular fa-book-section fa-xl"></i>
|
<i class="fa-regular fa-book-section fa-xl"></i>
|
||||||
@@ -39,7 +42,17 @@
|
|||||||
<div class="position-relative">
|
<div class="position-relative">
|
||||||
<svg viewBox="0 0 100 100" class="w-100 h-100">
|
<svg viewBox="0 0 100 100" class="w-100 h-100">
|
||||||
<circle cx="50" cy="50" r="45" stroke="#f7f7f7" stroke-width="10" fill="none" />
|
<circle cx="50" cy="50" r="45" stroke="#f7f7f7" stroke-width="10" fill="none" />
|
||||||
<circle id="coursenav-progress-circle" cx="50" cy="50" r="45" stroke="#009ace" stroke-width="10" fill="none" stroke-dasharray="283" stroke-dashoffset="283" />
|
<circle
|
||||||
|
id="coursenav-progress-circle"
|
||||||
|
cx="50"
|
||||||
|
cy="50"
|
||||||
|
r="45"
|
||||||
|
stroke="#009ace"
|
||||||
|
stroke-width="10"
|
||||||
|
fill="none"
|
||||||
|
stroke-dasharray="283"
|
||||||
|
stroke-dashoffset="283"
|
||||||
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
<i id="coursenav-audio-icon" class="fa-duotone fa-solid fa-volume"></i>
|
<i id="coursenav-audio-icon" class="fa-duotone fa-solid fa-volume"></i>
|
||||||
</div>
|
</div>
|
||||||
@@ -62,10 +75,20 @@
|
|||||||
</header>
|
</header>
|
||||||
|
|
||||||
<!-- OFFCANVAS DESDE DERECHA -->
|
<!-- OFFCANVAS DESDE DERECHA -->
|
||||||
<div class="offcanvas offcanvas-end bg-green-1 text-white" tabindex="-1" id="coursenav-offcanvas" aria-labelledby="coursenav-offcanvas-label">
|
<div
|
||||||
|
class="offcanvas offcanvas-end bg-green-1 text-white"
|
||||||
|
tabindex="-1"
|
||||||
|
id="coursenav-offcanvas"
|
||||||
|
aria-labelledby="coursenav-offcanvas-label"
|
||||||
|
>
|
||||||
<div class="offcanvas-header">
|
<div class="offcanvas-header">
|
||||||
<h5 id="coursenav-offcanvas-label" class="offcanvas-title">Índice</h5>
|
<h5 id="coursenav-offcanvas-label" class="offcanvas-title">Índice</h5>
|
||||||
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button>
|
<button
|
||||||
|
type="button"
|
||||||
|
class="btn-close text-reset"
|
||||||
|
data-bs-dismiss="offcanvas"
|
||||||
|
aria-label="Close"
|
||||||
|
></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="offcanvas-body d-flex flex-column p-0">
|
<div class="offcanvas-body d-flex flex-column p-0">
|
||||||
<!-- Menú principal -->
|
<!-- Menú principal -->
|
||||||
@@ -96,18 +119,33 @@
|
|||||||
<main id="coursenav-main-content"></main>
|
<main id="coursenav-main-content"></main>
|
||||||
|
|
||||||
<!-- FOOTER -->
|
<!-- FOOTER -->
|
||||||
<footer class="mt-auto py-1 d-flex flex-wrap justify-content-center align-items-center gap-2 gap-md-3 px-2 px-md-4" style="background-color: rgba(220, 220, 220, .7);">
|
<footer
|
||||||
|
class="mt-auto py-1 d-flex flex-wrap justify-content-center align-items-center gap-2 gap-md-3 px-2 px-md-4"
|
||||||
|
style="background-color: rgba(220, 220, 220, 0.7)"
|
||||||
|
>
|
||||||
<div class="aviso-privacidad flex-fill flex-md-none order-2 order-md-1">
|
<div class="aviso-privacidad flex-fill flex-md-none order-2 order-md-1">
|
||||||
<p class="mb-0 small text-center text-md-start">Uso exclusivo de capacitación interna, prohibida su reproducción y/o distribución</p>
|
<p class="mb-0 small text-center text-md-start">
|
||||||
|
Uso exclusivo de capacitación interna, prohibida su reproducción y/o distribución
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="d-flex justify-content-center align-items-center gap-3 position-relative ms-md-auto flex-fill flex-md-none order-1 order-md-2">
|
<div
|
||||||
<button id="coursenav-prev-btn" class="coursenav-btn-navigation bg-green-1 text-white" data-bs-toggle="tooltip"
|
class="d-flex justify-content-center align-items-center gap-3 position-relative ms-md-auto flex-fill flex-md-none order-1 order-md-2"
|
||||||
title="Anterior">
|
>
|
||||||
|
<button
|
||||||
|
id="coursenav-prev-btn"
|
||||||
|
class="coursenav-btn-navigation bg-green-1 text-white"
|
||||||
|
data-bs-toggle="tooltip"
|
||||||
|
title="Anterior"
|
||||||
|
>
|
||||||
<i class="fa-solid fa-arrow-down fa-rotate-90"></i>
|
<i class="fa-solid fa-arrow-down fa-rotate-90"></i>
|
||||||
</button>
|
</button>
|
||||||
<div id="pagination" class="paginacion_sco fw-bold"></div>
|
<div id="pagination" class="paginacion_sco fw-bold"></div>
|
||||||
<button id="coursenav-next-btn" class="coursenav-btn-navigation bg-green-1 text-white" data-bs-toggle="tooltip"
|
<button
|
||||||
title="Siguiente">
|
id="coursenav-next-btn"
|
||||||
|
class="coursenav-btn-navigation bg-green-1 text-white"
|
||||||
|
data-bs-toggle="tooltip"
|
||||||
|
title="Siguiente"
|
||||||
|
>
|
||||||
<i class="fa-solid fa-arrow-down fa-rotate-270"></i>
|
<i class="fa-solid fa-arrow-down fa-rotate-270"></i>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -121,12 +159,26 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Offcanvas: inicialmente vacío -->
|
<!-- Offcanvas: inicialmente vacío -->
|
||||||
<div class="offcanvas offcanvas-end" tabindex="-1" id="offcanvasGlossary" aria-labelledby="offcanvasGlossaryLabel">
|
<div
|
||||||
|
class="offcanvas offcanvas-end"
|
||||||
|
tabindex="-1"
|
||||||
|
id="offcanvasGlossary"
|
||||||
|
aria-labelledby="offcanvasGlossaryLabel"
|
||||||
|
>
|
||||||
<div class="offcanvas-header">
|
<div class="offcanvas-header">
|
||||||
<h1 class="offcanvas-title text-danger text-center amor fw-bold" id="offcanvasGlossaryLabel" style="width: 90%;">
|
<h1
|
||||||
|
class="offcanvas-title text-danger text-center amor fw-bold"
|
||||||
|
id="offcanvasGlossaryLabel"
|
||||||
|
style="width: 90%"
|
||||||
|
>
|
||||||
OGestan<sup>®</sup> Plus
|
OGestan<sup>®</sup> Plus
|
||||||
</h1>
|
</h1>
|
||||||
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Cerrar"></button>
|
<button
|
||||||
|
type="button"
|
||||||
|
class="btn-close text-reset"
|
||||||
|
data-bs-dismiss="offcanvas"
|
||||||
|
aria-label="Cerrar"
|
||||||
|
></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="offcanvas-body overflow-auto">
|
<div class="offcanvas-body overflow-auto">
|
||||||
<!-- Aquí irá el contenido de manual_pld_ft.html -->
|
<!-- Aquí irá el contenido de manual_pld_ft.html -->
|
||||||
|
|||||||
@@ -4,5 +4,7 @@
|
|||||||
"path": "."
|
"path": "."
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"settings": {}
|
"settings": {
|
||||||
|
"liveServer.settings.port": 5501
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,10 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "Manejo de Objeciones",
|
"title": "Manejo de Objeciones",
|
||||||
|
"content": "contenido/mo.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Actividad de aprendizaje",
|
||||||
"content": "contenido/07.html"
|
"content": "contenido/07.html"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -88,7 +88,7 @@
|
|||||||
<div class="w-100">
|
<div class="w-100">
|
||||||
<div class="ratio ratio-16x9">
|
<div class="ratio ratio-16x9">
|
||||||
<video id="video" class="embed-responsive-item" controls autoplay poster="video/poster.jpg">
|
<video id="video" class="embed-responsive-item" controls autoplay poster="video/poster.jpg">
|
||||||
<source src="video/dummy.mp4" type="video/mp4" />
|
<source src="video/OGestanPlus.mp4" type="video/mp4" />
|
||||||
Your browser does not support the video tag.
|
Your browser does not support the video tag.
|
||||||
</video>
|
</video>
|
||||||
<div class="play-button-container">
|
<div class="play-button-container">
|
||||||
|
|||||||
@@ -0,0 +1,259 @@
|
|||||||
|
<style>
|
||||||
|
.fake {
|
||||||
|
background-image: url('img/mo.png');
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- Contenedor de la Burbuja --- */
|
||||||
|
.speech-bubble {
|
||||||
|
position: relative;
|
||||||
|
background: #ffffff; /* Fondo blanco */
|
||||||
|
color: #333333; /* Texto oscuro para legibilidad */
|
||||||
|
border-radius: 0.5em;
|
||||||
|
padding: 1.5rem;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
min-height: 120px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); /* Sombra para resaltar sobre el fondo */
|
||||||
|
transition: all 0.3s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bubble-text {
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- Animaciones de Personajes (Foco visual) --- */
|
||||||
|
.speaker-active {
|
||||||
|
transform: scale(1.05);
|
||||||
|
filter: drop-shadow(0 4px 10px rgba(0, 0, 0, 0.2));
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.speaker-inactive {
|
||||||
|
opacity: 0.6;
|
||||||
|
transform: scale(0.95);
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- COMPORTAMIENTO MOBILE (Apilamiento vertical de Bootstrap) --- */
|
||||||
|
@media (max-width: 767.98px) {
|
||||||
|
/* Apunta hacia arriba (al Médico) */
|
||||||
|
.speech-bubble-left::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
top: -20px;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
border: 20px solid transparent;
|
||||||
|
border-width: 0 20px 20px 20px;
|
||||||
|
border-bottom-color: #ffffff; /* Coincide con el fondo blanco */
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Apunta hacia abajo (al Representante) */
|
||||||
|
.speech-bubble-right::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
top: auto;
|
||||||
|
bottom: -20px;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
border: 20px solid transparent;
|
||||||
|
border-width: 20px 20px 0 20px;
|
||||||
|
border-top-color: #ffffff; /* Coincide con el fondo blanco */
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- COMPORTAMIENTO DESKTOP (md y superior) --- */
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
/* Apunta hacia la izquierda */
|
||||||
|
.speech-bubble-left::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 50%;
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
border: 20px solid transparent;
|
||||||
|
border-right-color: #ffffff; /* Coincide con el fondo blanco */
|
||||||
|
border-left: 0;
|
||||||
|
margin-top: -20px;
|
||||||
|
margin-left: -20px;
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Apunta hacia la derecha */
|
||||||
|
.speech-bubble-right::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
left: auto;
|
||||||
|
top: 50%;
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
border: 20px solid transparent;
|
||||||
|
border-left-color: #ffffff; /* Coincide con el fondo blanco */
|
||||||
|
border-right: 0;
|
||||||
|
margin-top: -20px;
|
||||||
|
margin-right: -20px;
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div class='page-sco py-3 py-md-4 bg-transparent'>
|
||||||
|
<div class='container'>
|
||||||
|
<div class='row justify-content-center align-items-center'>
|
||||||
|
<div class='col-12 anim0'>
|
||||||
|
<div class='row justify-content-center align-items-center'>
|
||||||
|
|
||||||
|
<div class='col-12 text-center'>
|
||||||
|
<h2 class='mb-4 fw-semibold text-center'>Manejo de Objeciones</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Avatar Médico -->
|
||||||
|
<div class='col-6 col-md-3 text-center'>
|
||||||
|
<img src='img/med.png' class='img-fluid speaker-inactive' alt='Médico' id="medico">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Contenedor Dinámico de Diálogo -->
|
||||||
|
<div class='col-12 col-md-6 text-center'>
|
||||||
|
<div id="dialogue-bubble" class="speech-bubble">
|
||||||
|
<div id="dialogue-text" class="bubble-text">
|
||||||
|
<!-- El texto se inyecta dinámicamente mediante JS -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Avatar Representante -->
|
||||||
|
<div class='col-6 col-md-3 text-center'>
|
||||||
|
<img src='img/rep.png' class='img-fluid speaker-inactive' alt='Representante' id="rep">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
/**
|
||||||
|
* Módulo de Diálogo Interactivo
|
||||||
|
* Orquesta la secuencia de texto y audio, manipulando el DOM según el hablante activo.
|
||||||
|
*/
|
||||||
|
$(function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
$('body').addClass('fake');
|
||||||
|
|
||||||
|
// Configuración de la secuencia del diálogo
|
||||||
|
const mo = [
|
||||||
|
{
|
||||||
|
text: "¿Por qué Ogestan Plus tiene tan poca cantidad de hierro bisglicinato?",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/0026-objecion_1_ogestanplus.mp3') : null,
|
||||||
|
img: '#medico'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Doctor, comprendo que la cantidad de hierro en la formulación de Ogestan Plus llame su atención.",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo01.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Permítame compartirle que esta corresponde a la cantidad óptima que debe contener un suplemento alimenticio como lo es Ogestan Plus. Este producto no fue formulado como un medicamento para corregir una anemia ferropénica establecida ni como tratamiento de una deficiencia diagnosticada; para esos casos, por supuesto, usted requerirá esquemas terapéuticos específicos con dosis más altas según el perfil clínico de la paciente.",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo02.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Ogestan Plus está pensado como una suplementación complementaria y de mantenimiento para mujeres en etapa de embarazo e incluso en lactancia, buscando cubrir los requerimientos fisiológicos diarios al sumarse a la alimentación habitual, pero evitando la sobrecarga gastrointestinal que suele comprometer la adherencia, a diferencia de otros hierros como el sulfato ferroso, por ejemplo.",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo03.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Sabemos que la ingesta dietética recomendada de hierro durante el embarazo es de 27 mg al día.",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo04.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "En una paciente sin deficiencia previa, una dieta promedio suele aportar entre 12 y 15 mg diarios.",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo05.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Por eso, al aportar 14 mg de hierro bisglicinato, Ogestan Plus permite alcanzar un total cercano a los 27-30 mg diarios, que es justamente el rango fisiológico recomendado para acompañar el embarazo de forma preventiva. Además, no se trata solo de la cantidad, sino de la forma química. ",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo06.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "El hierro bisglicinato tiene una biodisponibilidad superior y una tolerancia digestiva considerablemente mejor que otras sales tradicionales, lo que favorece el apego al tratamiento por parte de las pacientes. Con Ogestan Plus estará seguro y con la tranquilidad de que sus pacientes no cursarán con síntomas gastrointestinales molestos como náusea, diarrea o estreñimiento, por mencionar algunos.",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo07.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{
|
||||||
|
text: "Entonces, más que pensar en 'poca cantidad', la pregunta sería: ¿es la dosis fisiológicamente suficiente, bien tolerada y sostenible durante todo el embarazo? Ogestan Plus está diseñado para ofrecer justo ese equilibrio entre eficacia preventiva, biodisponibilidad y adherencia. Interesante, ¿no le parece, doctor?",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo08.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
// Caché de elementos del DOM
|
||||||
|
const $bubble = $('#dialogue-bubble');
|
||||||
|
const $text = $('#dialogue-text');
|
||||||
|
const $medico = $('#medico');
|
||||||
|
const $rep = $('#rep');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ejecuta un nodo de diálogo recursivamente hasta finalizar el array.
|
||||||
|
* @param {number} index - Índice actual de la conversación.
|
||||||
|
*/
|
||||||
|
function playDialogueStep(index) {
|
||||||
|
// Condición de cierre: Secuencia terminada
|
||||||
|
if (index >= mo.length) {
|
||||||
|
if (typeof CourseNav !== 'undefined' && typeof CourseNav.completeLesson === 'function') {
|
||||||
|
CourseNav.setSlideVisited();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const currentStep = mo[index];
|
||||||
|
|
||||||
|
// 1. Actualizar texto con transición limpia
|
||||||
|
$text.hide().html(`<p class="mb-0 m-0">${currentStep.text}</p>`).fadeIn(300);
|
||||||
|
|
||||||
|
// 2. Gestionar la orientación de la burbuja y el foco en los personajes
|
||||||
|
if (currentStep.img === '#medico') {
|
||||||
|
$bubble.removeClass('speech-bubble-right').addClass('speech-bubble-left');
|
||||||
|
$medico.removeClass('speaker-inactive').addClass('speaker-active');
|
||||||
|
$rep.removeClass('speaker-active').addClass('speaker-inactive');
|
||||||
|
} else if (currentStep.img === '#rep') {
|
||||||
|
$bubble.removeClass('speech-bubble-left').addClass('speech-bubble-right');
|
||||||
|
$rep.removeClass('speaker-inactive').addClass('speaker-active');
|
||||||
|
$medico.removeClass('speaker-active').addClass('speaker-inactive');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. Reproducir audio e instanciar el listener recursivo
|
||||||
|
if (typeof CourseNav !== 'undefined' && CourseNav.audioController && currentStep.sound) {
|
||||||
|
CourseNav.audioController.stopAllSoundsAndPlay(currentStep.sound);
|
||||||
|
|
||||||
|
// Asumiendo que CourseNav utiliza Howler.js u otra API basada en eventos (on/once)
|
||||||
|
currentStep.sound.once("end", function () {
|
||||||
|
playDialogueStep(index + 1);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// Fallback para entornos de desarrollo donde el audio no esté cargado
|
||||||
|
console.warn(`[Modo Desarrollo]: Simulando delay para el audio de: ${currentStep.img}`);
|
||||||
|
setTimeout(() => {
|
||||||
|
playDialogueStep(index + 1);
|
||||||
|
}, 4000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Inicializar el diálogo
|
||||||
|
playDialogueStep(0);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 306 KiB |
|
After Width: | Height: | Size: 66 KiB |
@@ -1,4 +1,4 @@
|
|||||||
<!DOCTYPE html>
|
<!doctype html>
|
||||||
<html lang="es">
|
<html lang="es">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
@@ -15,9 +15,9 @@
|
|||||||
<link rel="stylesheet" href="css/sweetalert2.min.css" />
|
<link rel="stylesheet" href="css/sweetalert2.min.css" />
|
||||||
<link rel="stylesheet" href="css/swiper-bundle.min.css" />
|
<link rel="stylesheet" href="css/swiper-bundle.min.css" />
|
||||||
<link rel="stylesheet" href="css/driver.css" />
|
<link rel="stylesheet" href="css/driver.css" />
|
||||||
<link rel="stylesheet" href="font/roboto/stylesheet.css">
|
<link rel="stylesheet" href="font/roboto/stylesheet.css" />
|
||||||
<link rel="stylesheet" href="css/theme.min.css" />
|
<link rel="stylesheet" href="css/theme.min.css" />
|
||||||
<link rel="stylesheet" href="css/sal.css">
|
<link rel="stylesheet" href="css/sal.css" />
|
||||||
<link rel="stylesheet" href="css/style.min.css" />
|
<link rel="stylesheet" href="css/style.min.css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
@@ -29,7 +29,10 @@
|
|||||||
<a class="navbar-brand p-0 disabled order-1" href="#">
|
<a class="navbar-brand p-0 disabled order-1" href="#">
|
||||||
<img src="img/template/logo.svg" width="180" alt="Logo" />
|
<img src="img/template/logo.svg" width="180" alt="Logo" />
|
||||||
</a>
|
</a>
|
||||||
<div id="titleSco" class="flex-grow-1 title_head_sco text-center text-white fw-bold fs-5 order-3 order-md-2"></div>
|
<div
|
||||||
|
id="titleSco"
|
||||||
|
class="flex-grow-1 title_head_sco text-center text-white fw-bold fs-5 order-3 order-md-2"
|
||||||
|
></div>
|
||||||
<div class="d-flex align-items-center text-white order-2 order-md-3 ms-auto">
|
<div class="d-flex align-items-center text-white order-2 order-md-3 ms-auto">
|
||||||
<!-- <button class="btn-glossary controls-btn me-2" id="btn-glossary" aria-label="Glossary">
|
<!-- <button class="btn-glossary controls-btn me-2" id="btn-glossary" aria-label="Glossary">
|
||||||
<i class="fa-regular fa-book-section fa-xl"></i>
|
<i class="fa-regular fa-book-section fa-xl"></i>
|
||||||
@@ -39,7 +42,17 @@
|
|||||||
<div class="position-relative">
|
<div class="position-relative">
|
||||||
<svg viewBox="0 0 100 100" class="w-100 h-100">
|
<svg viewBox="0 0 100 100" class="w-100 h-100">
|
||||||
<circle cx="50" cy="50" r="45" stroke="#f7f7f7" stroke-width="10" fill="none" />
|
<circle cx="50" cy="50" r="45" stroke="#f7f7f7" stroke-width="10" fill="none" />
|
||||||
<circle id="coursenav-progress-circle" cx="50" cy="50" r="45" stroke="#009ace" stroke-width="10" fill="none" stroke-dasharray="283" stroke-dashoffset="283" />
|
<circle
|
||||||
|
id="coursenav-progress-circle"
|
||||||
|
cx="50"
|
||||||
|
cy="50"
|
||||||
|
r="45"
|
||||||
|
stroke="#009ace"
|
||||||
|
stroke-width="10"
|
||||||
|
fill="none"
|
||||||
|
stroke-dasharray="283"
|
||||||
|
stroke-dashoffset="283"
|
||||||
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
<i id="coursenav-audio-icon" class="fa-duotone fa-solid fa-volume"></i>
|
<i id="coursenav-audio-icon" class="fa-duotone fa-solid fa-volume"></i>
|
||||||
</div>
|
</div>
|
||||||
@@ -62,10 +75,20 @@
|
|||||||
</header>
|
</header>
|
||||||
|
|
||||||
<!-- OFFCANVAS DESDE DERECHA -->
|
<!-- OFFCANVAS DESDE DERECHA -->
|
||||||
<div class="offcanvas offcanvas-end bg-secondary text-white" tabindex="-1" id="coursenav-offcanvas" aria-labelledby="coursenav-offcanvas-label">
|
<div
|
||||||
|
class="offcanvas offcanvas-end bg-secondary text-white"
|
||||||
|
tabindex="-1"
|
||||||
|
id="coursenav-offcanvas"
|
||||||
|
aria-labelledby="coursenav-offcanvas-label"
|
||||||
|
>
|
||||||
<div class="offcanvas-header">
|
<div class="offcanvas-header">
|
||||||
<h5 id="coursenav-offcanvas-label" class="offcanvas-title">Índice</h5>
|
<h5 id="coursenav-offcanvas-label" class="offcanvas-title">Índice</h5>
|
||||||
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button>
|
<button
|
||||||
|
type="button"
|
||||||
|
class="btn-close text-reset"
|
||||||
|
data-bs-dismiss="offcanvas"
|
||||||
|
aria-label="Close"
|
||||||
|
></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="offcanvas-body d-flex flex-column p-0">
|
<div class="offcanvas-body d-flex flex-column p-0">
|
||||||
<!-- Menú principal -->
|
<!-- Menú principal -->
|
||||||
@@ -96,18 +119,33 @@
|
|||||||
<main id="coursenav-main-content"></main>
|
<main id="coursenav-main-content"></main>
|
||||||
|
|
||||||
<!-- FOOTER -->
|
<!-- FOOTER -->
|
||||||
<footer class="mt-auto py-1 d-flex flex-wrap justify-content-center align-items-center gap-2 gap-md-3 px-2 px-md-4" style="background-color: rgba(24, 53, 104, .7);">
|
<footer
|
||||||
|
class="mt-auto py-1 d-flex flex-wrap justify-content-center align-items-center gap-2 gap-md-3 px-2 px-md-4"
|
||||||
|
style="background-color: rgba(24, 53, 104, 0.7)"
|
||||||
|
>
|
||||||
<div class="aviso-privacidad flex-fill flex-md-none order-2 order-md-1">
|
<div class="aviso-privacidad flex-fill flex-md-none order-2 order-md-1">
|
||||||
<p class="mb-0 small text-white text-center text-md-start">Uso exclusivo de capacitación interna, prohibida su reproducción y/o distribución</p>
|
<p class="mb-0 small text-white text-center text-md-start">
|
||||||
|
Uso exclusivo de capacitación interna, prohibida su reproducción y/o distribución
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="d-flex justify-content-center align-items-center gap-3 position-relative ms-md-auto flex-fill flex-md-none order-1 order-md-2">
|
<div
|
||||||
<button id="coursenav-prev-btn" class="coursenav-btn-navigation bg-orange-1 text-white" data-bs-toggle="tooltip"
|
class="d-flex justify-content-center align-items-center gap-3 position-relative ms-md-auto flex-fill flex-md-none order-1 order-md-2"
|
||||||
title="Anterior">
|
>
|
||||||
|
<button
|
||||||
|
id="coursenav-prev-btn"
|
||||||
|
class="coursenav-btn-navigation bg-orange-1 text-white"
|
||||||
|
data-bs-toggle="tooltip"
|
||||||
|
title="Anterior"
|
||||||
|
>
|
||||||
<i class="fa-solid fa-arrow-down fa-rotate-90"></i>
|
<i class="fa-solid fa-arrow-down fa-rotate-90"></i>
|
||||||
</button>
|
</button>
|
||||||
<div id="pagination" class="paginacion_sco fw-bold"></div>
|
<div id="pagination" class="paginacion_sco fw-bold"></div>
|
||||||
<button id="coursenav-next-btn" class="coursenav-btn-navigation bg-secondary text-white" data-bs-toggle="tooltip"
|
<button
|
||||||
title="Siguiente">
|
id="coursenav-next-btn"
|
||||||
|
class="coursenav-btn-navigation bg-secondary text-white"
|
||||||
|
data-bs-toggle="tooltip"
|
||||||
|
title="Siguiente"
|
||||||
|
>
|
||||||
<i class="fa-solid fa-arrow-down fa-rotate-270"></i>
|
<i class="fa-solid fa-arrow-down fa-rotate-270"></i>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -121,12 +159,26 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Offcanvas: inicialmente vacío -->
|
<!-- Offcanvas: inicialmente vacío -->
|
||||||
<div class="offcanvas offcanvas-end" tabindex="-1" id="offcanvasGlossary" aria-labelledby="offcanvasGlossaryLabel">
|
<div
|
||||||
|
class="offcanvas offcanvas-end"
|
||||||
|
tabindex="-1"
|
||||||
|
id="offcanvasGlossary"
|
||||||
|
aria-labelledby="offcanvasGlossaryLabel"
|
||||||
|
>
|
||||||
<div class="offcanvas-header">
|
<div class="offcanvas-header">
|
||||||
<h1 class="offcanvas-title text-danger text-center amor fw-bold" id="offcanvasGlossaryLabel" style="width: 90%;">
|
<h1
|
||||||
|
class="offcanvas-title text-danger text-center amor fw-bold"
|
||||||
|
id="offcanvasGlossaryLabel"
|
||||||
|
style="width: 90%"
|
||||||
|
>
|
||||||
OGestan<sup>®</sup> Plus
|
OGestan<sup>®</sup> Plus
|
||||||
</h1>
|
</h1>
|
||||||
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Cerrar"></button>
|
<button
|
||||||
|
type="button"
|
||||||
|
class="btn-close text-reset"
|
||||||
|
data-bs-dismiss="offcanvas"
|
||||||
|
aria-label="Cerrar"
|
||||||
|
></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="offcanvas-body overflow-auto">
|
<div class="offcanvas-body overflow-auto">
|
||||||
<!-- Aquí irá el contenido de manual_pld_ft.html -->
|
<!-- Aquí irá el contenido de manual_pld_ft.html -->
|
||||||
|
|||||||
@@ -4,5 +4,7 @@
|
|||||||
"path": "."
|
"path": "."
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"settings": {}
|
"settings": {
|
||||||
|
"liveServer.settings.port": 5501
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,10 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "Manejo de Objeciones",
|
"title": "Manejo de Objeciones",
|
||||||
|
"content": "contenido/mo.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Actividad de aprendizaje",
|
||||||
"content": "contenido/06.html"
|
"content": "contenido/06.html"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -88,7 +88,7 @@
|
|||||||
<div class="w-100">
|
<div class="w-100">
|
||||||
<div class="ratio ratio-16x9">
|
<div class="ratio ratio-16x9">
|
||||||
<video id="video" class="embed-responsive-item" controls autoplay poster="video/poster.jpg">
|
<video id="video" class="embed-responsive-item" controls autoplay poster="video/poster.jpg">
|
||||||
<source src="video/dummy.mp4" type="video/mp4" />
|
<source src="video/OGestanPre.mp4" type="video/mp4" />
|
||||||
Your browser does not support the video tag.
|
Your browser does not support the video tag.
|
||||||
</video>
|
</video>
|
||||||
<div class="play-button-container">
|
<div class="play-button-container">
|
||||||
|
|||||||
@@ -0,0 +1,234 @@
|
|||||||
|
<style>
|
||||||
|
.fake {
|
||||||
|
background-image: url('img/mo.png');
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- Contenedor de la Burbuja --- */
|
||||||
|
.speech-bubble {
|
||||||
|
position: relative;
|
||||||
|
background: #ffffff; /* Fondo blanco */
|
||||||
|
color: #333333; /* Texto oscuro para legibilidad */
|
||||||
|
border-radius: 0.5em;
|
||||||
|
padding: 1.5rem;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
min-height: 120px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); /* Sombra para resaltar sobre el fondo */
|
||||||
|
transition: all 0.3s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bubble-text {
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- Animaciones de Personajes (Foco visual) --- */
|
||||||
|
.speaker-active {
|
||||||
|
transform: scale(1.05);
|
||||||
|
filter: drop-shadow(0 4px 10px rgba(0, 0, 0, 0.2));
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.speaker-inactive {
|
||||||
|
opacity: 0.6;
|
||||||
|
transform: scale(0.95);
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- COMPORTAMIENTO MOBILE (Apilamiento vertical de Bootstrap) --- */
|
||||||
|
@media (max-width: 767.98px) {
|
||||||
|
/* Apunta hacia arriba (al Médico) */
|
||||||
|
.speech-bubble-left::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
top: -20px;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
border: 20px solid transparent;
|
||||||
|
border-width: 0 20px 20px 20px;
|
||||||
|
border-bottom-color: #ffffff; /* Coincide con el fondo blanco */
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Apunta hacia abajo (al Representante) */
|
||||||
|
.speech-bubble-right::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
top: auto;
|
||||||
|
bottom: -20px;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
border: 20px solid transparent;
|
||||||
|
border-width: 20px 20px 0 20px;
|
||||||
|
border-top-color: #ffffff; /* Coincide con el fondo blanco */
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- COMPORTAMIENTO DESKTOP (md y superior) --- */
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
/* Apunta hacia la izquierda */
|
||||||
|
.speech-bubble-left::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 50%;
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
border: 20px solid transparent;
|
||||||
|
border-right-color: #ffffff; /* Coincide con el fondo blanco */
|
||||||
|
border-left: 0;
|
||||||
|
margin-top: -20px;
|
||||||
|
margin-left: -20px;
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Apunta hacia la derecha */
|
||||||
|
.speech-bubble-right::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
left: auto;
|
||||||
|
top: 50%;
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
border: 20px solid transparent;
|
||||||
|
border-left-color: #ffffff; /* Coincide con el fondo blanco */
|
||||||
|
border-right: 0;
|
||||||
|
margin-top: -20px;
|
||||||
|
margin-right: -20px;
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div class='page-sco py-3 py-md-4 bg-transparent'>
|
||||||
|
<div class='container'>
|
||||||
|
<div class='row justify-content-center align-items-center'>
|
||||||
|
<div class='col-12 anim0'>
|
||||||
|
<div class='row justify-content-center align-items-center'>
|
||||||
|
|
||||||
|
<div class='col-12 text-center'>
|
||||||
|
<h2 class='mb-4 fw-semibold text-center'>Manejo de Objeciones</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Avatar Médico -->
|
||||||
|
<div class='col-6 col-md-3 text-center'>
|
||||||
|
<img src='img/med.png' class='img-fluid speaker-inactive' alt='Médico' id="medico">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Contenedor Dinámico de Diálogo -->
|
||||||
|
<div class='col-12 col-md-6 text-center'>
|
||||||
|
<div id="dialogue-bubble" class="speech-bubble">
|
||||||
|
<div id="dialogue-text" class="bubble-text">
|
||||||
|
<!-- El texto se inyecta dinámicamente mediante JS -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Avatar Representante -->
|
||||||
|
<div class='col-6 col-md-3 text-center'>
|
||||||
|
<img src='img/rep.png' class='img-fluid speaker-inactive' alt='Representante' id="rep">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
/**
|
||||||
|
* Módulo de Diálogo Interactivo
|
||||||
|
* Orquesta la secuencia de texto y audio, manipulando el DOM según el hablante activo.
|
||||||
|
*/
|
||||||
|
$(function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
$('body').addClass('fake');
|
||||||
|
|
||||||
|
// Configuración de la secuencia del diálogo
|
||||||
|
const mo = [
|
||||||
|
{
|
||||||
|
text: "¿Por qué en la formulación de OGestan<sup>®</sup> Pré no observo los omegas?",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/0031-ogestanpre.mp3') : null,
|
||||||
|
img: '#medico'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Doctor, es una muy buena observación. De hecho, la ausencia de omegas en OGestan<sup>®</sup> Pré responde a una decisión en la composición de la fórmula completamente intencionada.",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo01.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "La clave está en el posicionamiento de OGestan<sup>®</sup> Pré, el cual fue diseñado específicamente para la etapa preconcepcional, que representa una verdadera ventana crítica de oportunidad biológica. ",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo02.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "En esa etapa, la prioridad clínica absoluta no es todavía el soporte estructural del neurodesarrollo avanzado —donde los omegas tienen un papel más protagónico—, sino asegurar las condiciones necesarias para una correcta organogénesis temprana y, sobre todo, la prevención de malformaciones congénitas. Por ello, prioriza los micronutrientes esenciales para esta etapa.",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo03.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
// Caché de elementos del DOM
|
||||||
|
const $bubble = $('#dialogue-bubble');
|
||||||
|
const $text = $('#dialogue-text');
|
||||||
|
const $medico = $('#medico');
|
||||||
|
const $rep = $('#rep');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ejecuta un nodo de diálogo recursivamente hasta finalizar el array.
|
||||||
|
* @param {number} index - Índice actual de la conversación.
|
||||||
|
*/
|
||||||
|
function playDialogueStep(index) {
|
||||||
|
// Condición de cierre: Secuencia terminada
|
||||||
|
if (index >= mo.length) {
|
||||||
|
if (typeof CourseNav !== 'undefined' && typeof CourseNav.completeLesson === 'function') {
|
||||||
|
CourseNav.setSlideVisited();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const currentStep = mo[index];
|
||||||
|
|
||||||
|
// 1. Actualizar texto con transición limpia
|
||||||
|
$text.hide().html(`<p class="mb-0 m-0">${currentStep.text}</p>`).fadeIn(300);
|
||||||
|
|
||||||
|
// 2. Gestionar la orientación de la burbuja y el foco en los personajes
|
||||||
|
if (currentStep.img === '#medico') {
|
||||||
|
$bubble.removeClass('speech-bubble-right').addClass('speech-bubble-left');
|
||||||
|
$medico.removeClass('speaker-inactive').addClass('speaker-active');
|
||||||
|
$rep.removeClass('speaker-active').addClass('speaker-inactive');
|
||||||
|
} else if (currentStep.img === '#rep') {
|
||||||
|
$bubble.removeClass('speech-bubble-left').addClass('speech-bubble-right');
|
||||||
|
$rep.removeClass('speaker-inactive').addClass('speaker-active');
|
||||||
|
$medico.removeClass('speaker-active').addClass('speaker-inactive');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. Reproducir audio e instanciar el listener recursivo
|
||||||
|
if (typeof CourseNav !== 'undefined' && CourseNav.audioController && currentStep.sound) {
|
||||||
|
CourseNav.audioController.stopAllSoundsAndPlay(currentStep.sound);
|
||||||
|
|
||||||
|
// Asumiendo que CourseNav utiliza Howler.js u otra API basada en eventos (on/once)
|
||||||
|
currentStep.sound.once("end", function () {
|
||||||
|
playDialogueStep(index + 1);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// Fallback para entornos de desarrollo donde el audio no esté cargado
|
||||||
|
console.warn(`[Modo Desarrollo]: Simulando delay para el audio de: ${currentStep.img}`);
|
||||||
|
setTimeout(() => {
|
||||||
|
playDialogueStep(index + 1);
|
||||||
|
}, 4000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Inicializar el diálogo
|
||||||
|
playDialogueStep(0);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 306 KiB |
|
After Width: | Height: | Size: 40 KiB |
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"folders": [
|
||||||
|
{
|
||||||
|
"path": "."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"settings": {}
|
||||||
|
}
|
||||||
@@ -29,7 +29,11 @@
|
|||||||
"content": "contenido/06.html"
|
"content": "contenido/06.html"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "Manejo de Objeciones (Actividad de aprendizaje)",
|
"title": "Manejo de Objeciones",
|
||||||
|
"content": "contenido/mo.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Actividad de aprendizaje",
|
||||||
"content": "contenido/07.html"
|
"content": "contenido/07.html"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -46,7 +46,7 @@
|
|||||||
<div class="ratio ratio-16x9">
|
<div class="ratio ratio-16x9">
|
||||||
<video id="video" class="embed-responsive-item" controls playsinline
|
<video id="video" class="embed-responsive-item" controls playsinline
|
||||||
poster="video/poster.png">
|
poster="video/poster.png">
|
||||||
<source src="video/demo.mp4" type="video/mp4">
|
<source src="video/Andractiv.mp4" type="video/mp4">
|
||||||
Your browser does not support the video tag.
|
Your browser does not support the video tag.
|
||||||
</video>
|
</video>
|
||||||
<div class="play-button-container">
|
<div class="play-button-container">
|
||||||
|
|||||||
@@ -0,0 +1,248 @@
|
|||||||
|
<style>
|
||||||
|
.fake {
|
||||||
|
background-image: url('img/mo.png');
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- Contenedor de la Burbuja --- */
|
||||||
|
.speech-bubble {
|
||||||
|
position: relative;
|
||||||
|
background: #ffffff; /* Fondo blanco */
|
||||||
|
color: #333333; /* Texto oscuro para legibilidad */
|
||||||
|
border-radius: 0.5em;
|
||||||
|
padding: 1.5rem;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
min-height: 120px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); /* Sombra para resaltar sobre el fondo */
|
||||||
|
transition: all 0.3s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bubble-text {
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- Animaciones de Personajes (Foco visual) --- */
|
||||||
|
.speaker-active {
|
||||||
|
transform: scale(1.05);
|
||||||
|
filter: drop-shadow(0 4px 10px rgba(0, 0, 0, 0.2));
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.speaker-inactive {
|
||||||
|
opacity: 0.6;
|
||||||
|
transform: scale(0.95);
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- COMPORTAMIENTO MOBILE (Apilamiento vertical de Bootstrap) --- */
|
||||||
|
@media (max-width: 767.98px) {
|
||||||
|
/* Apunta hacia arriba (al Médico) */
|
||||||
|
.speech-bubble-left::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
top: -20px;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
border: 20px solid transparent;
|
||||||
|
border-width: 0 20px 20px 20px;
|
||||||
|
border-bottom-color: #ffffff; /* Coincide con el fondo blanco */
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Apunta hacia abajo (al Representante) */
|
||||||
|
.speech-bubble-right::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
top: auto;
|
||||||
|
bottom: -20px;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
border: 20px solid transparent;
|
||||||
|
border-width: 20px 20px 0 20px;
|
||||||
|
border-top-color: #ffffff; /* Coincide con el fondo blanco */
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- COMPORTAMIENTO DESKTOP (md y superior) --- */
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
/* Apunta hacia la izquierda */
|
||||||
|
.speech-bubble-left::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 50%;
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
border: 20px solid transparent;
|
||||||
|
border-right-color: #ffffff; /* Coincide con el fondo blanco */
|
||||||
|
border-left: 0;
|
||||||
|
margin-top: -20px;
|
||||||
|
margin-left: -20px;
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Apunta hacia la derecha */
|
||||||
|
.speech-bubble-right::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
left: auto;
|
||||||
|
top: 50%;
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
border: 20px solid transparent;
|
||||||
|
border-left-color: #ffffff; /* Coincide con el fondo blanco */
|
||||||
|
border-right: 0;
|
||||||
|
margin-top: -20px;
|
||||||
|
margin-right: -20px;
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div class='page-sco py-3 py-md-4 bg-transparent'>
|
||||||
|
<div class='container'>
|
||||||
|
<div class='row justify-content-center align-items-center'>
|
||||||
|
<div class='col-12 anim0'>
|
||||||
|
<div class='row justify-content-center align-items-center'>
|
||||||
|
|
||||||
|
<div class='col-12 text-center'>
|
||||||
|
<h2 class='mb-4 fw-semibold text-center'>Manejo de Objeciones</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Avatar Médico -->
|
||||||
|
<div class='col-6 col-md-3 text-center'>
|
||||||
|
<img src='img/med.png' class='img-fluid speaker-inactive' alt='Médico' id="medico">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Contenedor Dinámico de Diálogo -->
|
||||||
|
<div class='col-12 col-md-6 text-center'>
|
||||||
|
<div id="dialogue-bubble" class="speech-bubble">
|
||||||
|
<div id="dialogue-text" class="bubble-text">
|
||||||
|
<!-- El texto se inyecta dinámicamente mediante JS -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Avatar Representante -->
|
||||||
|
<div class='col-6 col-md-3 text-center'>
|
||||||
|
<img src='img/rep.png' class='img-fluid speaker-inactive' alt='Representante' id="rep">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
/**
|
||||||
|
* Módulo de Diálogo Interactivo
|
||||||
|
* Orquesta la secuencia de texto y audio, manipulando el DOM según el hablante activo.
|
||||||
|
*/
|
||||||
|
$(function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
$('body').addClass('fake');
|
||||||
|
|
||||||
|
// Configuración de la secuencia del diálogo
|
||||||
|
const mo = [
|
||||||
|
{
|
||||||
|
text: "¿Actúa directamente en la producción de espermatozoides? ¿Atraviesa la barrera hemato-testicular?",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/0029-ANDRACTIV-objecion.mp3') : null,
|
||||||
|
img: '#medico'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "No, doctor, no la atraviesa. Los componentes de Ogestan Andractiv no atraviesan la barrera hemato-testicular, pero eso no representa una limitación terapéutica; de hecho, la mayoría de los suplementos nutricionales e incluso muchos fármacos no la atraviesan de forma directa.",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo01.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "La acción de Andractiv está diseñada desde otro enfoque fisiológico: modular el entorno metabólico y oxidativo que condiciona la calidad funcional del espermatozoide.",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo02.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Sabemos que uno de los principales factores implicados en la alteración de los parámetros seminales es el estrés oxidativo, el cual puede afectar funciones críticas como la motilidad y la capacidad de fecundación.",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo03.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Por tal motivo, la formulación de Andractiv incorpora componentes con potente actividad antioxidante, orientados a neutralizar esos radicales libres y proteger al espermatozoide del daño oxidativo sistémico que termina impactando su desempeño funcional.",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo04.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Además, su beneficio no se limita a la protección celular. La formulación está pensada para optimizar la producción energética, favoreciendo un mejor rendimiento funcional del espermatozoide y, con ello, una mejora en parámetros como movilidad y capacidad fecundante.",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo05.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Andractiv optimizará sistémicamente las condiciones bioquímicas que permiten una espermatogénesis más eficiente y un mejor desempeño funcional del espermatozoide ya formado. ¿Cuál es su opinión, doctor, en relación con lo que acabo de comentarle?",
|
||||||
|
sound: typeof CourseNav !== 'undefined' ? CourseNav.createSound('audio/mo/mo06.mp3') : null,
|
||||||
|
img: '#rep'
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
// Caché de elementos del DOM
|
||||||
|
const $bubble = $('#dialogue-bubble');
|
||||||
|
const $text = $('#dialogue-text');
|
||||||
|
const $medico = $('#medico');
|
||||||
|
const $rep = $('#rep');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ejecuta un nodo de diálogo recursivamente hasta finalizar el array.
|
||||||
|
* @param {number} index - Índice actual de la conversación.
|
||||||
|
*/
|
||||||
|
function playDialogueStep(index) {
|
||||||
|
// Condición de cierre: Secuencia terminada
|
||||||
|
if (index >= mo.length) {
|
||||||
|
if (typeof CourseNav !== 'undefined' && typeof CourseNav.completeLesson === 'function') {
|
||||||
|
CourseNav.setSlideVisited();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const currentStep = mo[index];
|
||||||
|
|
||||||
|
// 1. Actualizar texto con transición limpia
|
||||||
|
$text.hide().html(`<p class="mb-0 m-0">${currentStep.text}</p>`).fadeIn(300);
|
||||||
|
|
||||||
|
// 2. Gestionar la orientación de la burbuja y el foco en los personajes
|
||||||
|
if (currentStep.img === '#medico') {
|
||||||
|
$bubble.removeClass('speech-bubble-right').addClass('speech-bubble-left');
|
||||||
|
$medico.removeClass('speaker-inactive').addClass('speaker-active');
|
||||||
|
$rep.removeClass('speaker-active').addClass('speaker-inactive');
|
||||||
|
} else if (currentStep.img === '#rep') {
|
||||||
|
$bubble.removeClass('speech-bubble-left').addClass('speech-bubble-right');
|
||||||
|
$rep.removeClass('speaker-inactive').addClass('speaker-active');
|
||||||
|
$medico.removeClass('speaker-active').addClass('speaker-inactive');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. Reproducir audio e instanciar el listener recursivo
|
||||||
|
if (typeof CourseNav !== 'undefined' && CourseNav.audioController && currentStep.sound) {
|
||||||
|
CourseNav.audioController.stopAllSoundsAndPlay(currentStep.sound);
|
||||||
|
|
||||||
|
// Asumiendo que CourseNav utiliza Howler.js u otra API basada en eventos (on/once)
|
||||||
|
currentStep.sound.once("end", function () {
|
||||||
|
playDialogueStep(index + 1);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// Fallback para entornos de desarrollo donde el audio no esté cargado
|
||||||
|
console.warn(`[Modo Desarrollo]: Simulando delay para el audio de: ${currentStep.img}`);
|
||||||
|
setTimeout(() => {
|
||||||
|
playDialogueStep(index + 1);
|
||||||
|
}, 4000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Inicializar el diálogo
|
||||||
|
playDialogueStep(0);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 306 KiB |
|
After Width: | Height: | Size: 40 KiB |
@@ -6,7 +6,7 @@
|
|||||||
*/
|
*/
|
||||||
window.COURSE_CONFIG = {
|
window.COURSE_CONFIG = {
|
||||||
COURSE_CONFIG_URL: 'config.json',
|
COURSE_CONFIG_URL: 'config.json',
|
||||||
DEBUG: false,
|
DEBUG: true, // Cambia a false para producción
|
||||||
SHOW_PAGINATION: false, // Bandera para mostrar/ocultar paginación
|
SHOW_PAGINATION: false, // Bandera para mostrar/ocultar paginación
|
||||||
SHOW_TITLE: false, // Bandera para mostrar/ocultar título
|
SHOW_TITLE: false, // Bandera para mostrar/ocultar título
|
||||||
SHOW_GLOSSARY: false, // Bandera para mostrar/ocultar glosario
|
SHOW_GLOSSARY: false, // Bandera para mostrar/ocultar glosario
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"folders": [
|
||||||
|
{
|
||||||
|
"path": "."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"settings": {}
|
||||||
|
}
|
||||||