B
blankito1998
Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
pero quiero que permita solo arrastrar hacia arriba cuando el atributo este en 0 o nullClaro, puedo ayudarte a agregar esa funcionalidad. Vamos a modificar el código para que solo permita arrastrar el div cuando el atributocleamde.subodyno seanullo0.
### Código Modificado
Aquí tienes el código ajustado para implementar esa lógica:
JavaScript:document.addEventListener("DOMContentLoaded", () => { let isDragging = false; let startY; let movedDistance = 0; let currentDiv = null; const divHeight = 200; const alertThreshold = divHeight * 0.5; // Umbral del 50% let previousBottom = 0; // Para comparación de la posición anterior let hasMoved = false; // Flag para verificar si se ha movido const startDrag = (e) => { // Verificar si el atributo 'cleam' es nulo o 0 const subBody = document.querySelector('.subody'); const cleamValue = subBody.getAttribute('cleam'); if (cleamValue === null || cleamValue === '0') { return; // No permitir arrastrar } isDragging = true; startY = e.touches ? e.touches[0].clientY : e.clientY; hasMoved = false; // Reseteamos el flag al iniciar el drag }; const drag = (e) => { if (isDragging && currentDiv) { const y = e.touches ? e.touches[0].clientY : e.clientY; const distance = startY - y; const currentBottom = parseInt(window.getComputedStyle(currentDiv).bottom) || 0; // Permitir movimiento hacia arriba y abajo movedDistance = currentBottom + distance; currentDiv.style.bottom = movedDistance + 'px'; startY = y; // Actualizar startY para el próximo movimiento hasMoved = true; // Marcar que se ha movido } }; const endDrag = () => { isDragging = false; if (currentDiv && hasMoved) { const currentBottom = parseInt(window.getComputedStyle(currentDiv).bottom) || 0; // Comprobar si se ha subido o bajado más del 50% if (movedDistance >= previousBottom + alertThreshold) { alert("¡Subió!"); } else if (movedDistance <= previousBottom - alertThreshold) { alert("¡Bajó!"); } // Resetter la posición a la original solo después de la evaluación currentDiv.style.bottom = "0px"; previousBottom = movedDistance; // Actualizar a la nueva posición movedDistance = 0; // Reiniciar el movimiento currentDiv = null; // Reiniciar referencia hasMoved = false; // Reiniciar el flag } }; document.addEventListener('mousedown', (e) => { if (e.target.classList.contains('drag-handle')) { currentDiv = e.target.closest('.metagets'); // Asignar el div padre startDrag(e); // Iniciar arrastre } }); document.addEventListener('mousemove', drag); document.addEventListener('mouseup', endDrag); document.addEventListener('touchstart', (e) => { if (e.target.classList.contains('drag-handle')) { currentDiv = e.target.closest('.metagets'); startDrag(e); } }); document.addEventListener('touchmove', drag); document.addEventListener('touchend', endDrag); });
### Cambios Clave
1. Verificación del Atributocleam: Antes de permitir el arrastre, el código comprueba el valor del atributocleamen el elemento.subody. Si el valor esnullo'0', la funciónstartDragretorna y evita que el arrastre inicie.
2. Retorno Temprano enstartDrag: Si el valor decleamno permite el arrastre, no se ejecuta el resto del código dentro destartDrag, garantizando que el usuario no pueda mover el div.
### Resumen
Con estos cambios, el div solo se podrá arrastrar cuando el atributocleamde.subodyno seanullni0. Si necesitas más cambios o ajustes, ¡házmelo saber!

