Tema para preguntas random a Chatgpt 🤖

  • Autor Autor Carlos Arreola
  • Fecha de inicio Fecha de inicio
Para detectar si un div tiene overflow, puedes comparar su altura con la altura de su contenido. Si la altura del contenido es mayor que la altura del div, significa que hay un overflow. Aquí te dejo un ejemplo de cómo hacerlo:

JavaScript:
window.onload = function() {
    var div = document.getElementById('myDiv');
    if(div.scrollHeight > div.clientHeight || div.scrollWidth > div.clientWidth) {
        alert('Este div tiene overflow!');
    }
}
En este código, div.scrollHeight > div.clientHeight detecta el overflow vertical y div.scrollWidth > div.clientWidth detecta el overflow horizontal. Si alguna de estas condiciones es verdadera, entonces hay un overflow en el div.

Es importante mencionar que scrollHeight y scrollWidth incluyen el contenido visible más el contenido desbordado, mientras que clientHeight y clientWidth sólo incluyen el contenido visible. Por eso esta comparación puede ayudarte a detectar el overflow.

Por último, recuerda reemplazar 'myDiv' por el ID real de tu div.
mm no lo detecta en tiempo real?
 
mm no lo detecta en tiempo real?
Tienes razón, el código que te presenté revisa el overflow solo cuando se carga la pagina. Si quieres comprobar el overflow en "tiempo real" podrías agregar un observador de mutaciones que revise constantemente si hay cambios en tu div. Aquí te muestro cómo:

JavaScript:
var div = document.getElementById('myDiv');

// Crear un observador de mutaciones
var observer = new MutationObserver(function() {
    if(div.scrollHeight > div.clientHeight || div.scrollWidth > div.clientWidth) {
        alert('Este div tiene overflow!');
    }
});

// Configurar el observador para observar los cambios en los hijos del div
observer.observe(div, { childList: true });

// Revisar inmediatamente si hay overflow
if(div.scrollHeight > div.clientHeight || div.scrollWidth > div.clientWidth) {
    alert('Este div tiene overflow!');
}
En el código, un MutationObserver está configurado para observar los cambios en los hijos de 'myDiv'. Cuando hay un cambio (como cuando se agrega o se quita un hijo), el MutationObserver ejecuta la función de callback proporcionada que verifica si hay overflow.
 
Tienes razón, el código que te presenté revisa el overflow solo cuando se carga la pagina. Si quieres comprobar el overflow en "tiempo real" podrías agregar un observador de mutaciones que revise constantemente si hay cambios en tu div. Aquí te muestro cómo:

JavaScript:
var div = document.getElementById('myDiv');

// Crear un observador de mutaciones
var observer = new MutationObserver(function() {
    if(div.scrollHeight > div.clientHeight || div.scrollWidth > div.clientWidth) {
        alert('Este div tiene overflow!');
    }
});

// Configurar el observador para observar los cambios en los hijos del div
observer.observe(div, { childList: true });

// Revisar inmediatamente si hay overflow
if(div.scrollHeight > div.clientHeight || div.scrollWidth > div.clientWidth) {
    alert('Este div tiene overflow!');
}
En el código, un MutationObserver está configurado para observar los cambios en los hijos de 'myDiv'. Cuando hay un cambio (como cuando se agrega o se quita un hijo), el MutationObserver ejecuta la función de callback proporcionada que verifica si hay overflow.
y con class como seria?
 
y con class como seria?
Si tienes múltiples elementos con la misma clase y quieres verificar el overflow en cada uno de ellos, puedes utilizar un bucle para aplicar el mismo procedimiento a cada elemento. Aquí te muestro cómo:

JavaScript:
var divs = document.getElementsByClassName('myClass');

for (let i = 0; i < divs.length; i++) {
    let div = divs[i];
    let observer = new MutationObserver(function () {
        if (div.scrollHeight > div.clientHeight || div.scrollWidth > div.clientWidth) {
            alert('Este div tiene overflow!');
        }
    });

    observer.observe(div, { childList: true });

    if (div.scrollHeight > div.clientHeight || div.scrollWidth > div.clientWidth) {
        alert('Este div tiene overflow!');
    }
}

Este código detectará el overflow en tiempo real para todos los elementos que tengan la clase 'myClass'. Reemplaza 'myClass' por el nombre de tu clase.
 
Si tienes múltiples elementos con la misma clase y quieres verificar el overflow en cada uno de ellos, puedes utilizar un bucle para aplicar el mismo procedimiento a cada elemento. Aquí te muestro cómo:

JavaScript:
var divs = document.getElementsByClassName('myClass');

for (let i = 0; i < divs.length; i++) {
    let div = divs[i];
    let observer = new MutationObserver(function () {
        if (div.scrollHeight > div.clientHeight || div.scrollWidth > div.clientWidth) {
            alert('Este div tiene overflow!');
        }
    });

    observer.observe(div, { childList: true });

    if (div.scrollHeight > div.clientHeight || div.scrollWidth > div.clientWidth) {
        alert('Este div tiene overflow!');
    }
}

Este código detectará el overflow en tiempo real para todos los elementos que tengan la clase 'myClass'. Reemplaza 'myClass' por el nombre de tu clase.
no me funciona, no se que estare haciendo mal
 
no me funciona, no se que estare haciendo mal
Vamos a revisar juntos. Aquí hay algunos puntos clave de control:

1. Verifica que tu elemento tenga realmente la clase 'myClass'.

2. Si estás utilizando este código en un archivo JavaScript externo, asegúrate de que se está cargando correctamente en tu HTML con la etiqueta script.

3. Si tu script se carga en el head de tu HTML, puede que el DOM no esté completamente cargado cuando intentes seleccionar los elementos por su clase. En ese caso, envuelve tu script en window.onload = function(){...} para que se ejecute después de que se haya cargado todo el HTML.

Si aun así tienes problemas, podrías querer ver si hay algún mensaje de error en la consola del navegador (generalmente puedes abrirla con F12). Comparte cualquier mensaje de error que encuentres y podremos ayudarte mejor a solucionar el problema.
 
Tienes razón, el código que te presenté revisa el overflow solo cuando se carga la pagina. Si quieres comprobar el overflow en "tiempo real" podrías agregar un observador de mutaciones que revise constantemente si hay cambios en tu div. Aquí te muestro cómo:

JavaScript:
var div = document.getElementById('myDiv');

// Crear un observador de mutaciones
var observer = new MutationObserver(function() {
    if(div.scrollHeight > div.clientHeight || div.scrollWidth > div.clientWidth) {
        alert('Este div tiene overflow!');
    }
});

// Configurar el observador para observar los cambios en los hijos del div
observer.observe(div, { childList: true });

// Revisar inmediatamente si hay overflow
if(div.scrollHeight > div.clientHeight || div.scrollWidth > div.clientWidth) {
    alert('Este div tiene overflow!');
}
En el código, un MutationObserver está configurado para observar los cambios en los hijos de 'myDiv'. Cuando hay un cambio (como cuando se agrega o se quita un hijo), el MutationObserver ejecuta la función de callback proporcionada que verifica si hay overflow.
oks ya solucione, ahora como hago para detectar cuando el scroll esta en 0 al final y cuando no esta ni en 0 ni al final??
 
oks ya solucione, ahora como hago para detectar cuando el scroll esta en 0 al final y cuando no esta ni en 0 ni al final??
Genial que pudiste solucionarlo. Ahora, para detectar la posición de desplazamiento en un div, puedes utilizar las propiedades scrollTop y scrollHeight del elemento. Aquí te dejo un ejemplo:

JavaScript:
var div = document.getElementById('myDiv');

div.onscroll = function() {
    // Si scrollTop es 0, el scroll está al inicio
    if (div.scrollTop === 0) {
        alert('Scroll está al inicio!');
    }
    // Si scrollTop más la altura visible es igual a scrollHeight, el scroll está al final
    else if (div.scrollTop + div.clientHeight === div.scrollHeight) {
        alert('Scroll está al final!');
    }
    // Si no se cumple ninguna de las dos condiciones, el scroll está en algún punto intermedio
    else {
        alert('Scroll está en un punto intermedio!');
    }
};
En este código, adicionalmente a las propiedades scrollTop y scrollHeight, se utiliza la propiedad clientHeight para obtener la altura visible del div. Recuerda reemplazar 'myDiv' por el ID real de tu div.
 
Genial que pudiste solucionarlo. Ahora, para detectar la posición de desplazamiento en un div, puedes utilizar las propiedades scrollTop y scrollHeight del elemento. Aquí te dejo un ejemplo:

JavaScript:
var div = document.getElementById('myDiv');

div.onscroll = function() {
    // Si scrollTop es 0, el scroll está al inicio
    if (div.scrollTop === 0) {
        alert('Scroll está al inicio!');
    }
    // Si scrollTop más la altura visible es igual a scrollHeight, el scroll está al final
    else if (div.scrollTop + div.clientHeight === div.scrollHeight) {
        alert('Scroll está al final!');
    }
    // Si no se cumple ninguna de las dos condiciones, el scroll está en algún punto intermedio
    else {
        alert('Scroll está en un punto intermedio!');
    }
};
En este código, adicionalmente a las propiedades scrollTop y scrollHeight, se utiliza la propiedad clientHeight para obtener la altura visible del div. Recuerda reemplazar 'myDiv' por el ID real de tu div.
pero puedes añadir esa funcion al observer??
 
pero puedes añadir esa funcion al observer??
Lo que puedes hacer es agregar un verificador de posición del scroll dentro de la función del observador. Sin embargo, ten en cuenta que el evento del observador de mutaciones no se dispara en el scroll, sino solo cuando se producen cambios en el DOM del elemento observado. Aquí te dejo un ejemplo:

JavaScript:
var div = document.getElementById('myDiv');

var checkScroll = function() {
    if (div.scrollTop === 0) {
        console.log('Scroll está al inicio!');
    } else if (div.scrollTop + div.clientHeight >= div.scrollHeight) {
        console.log('Scroll está al final!');
    } else {
        console.log('Scroll está en un punto intermedio!');
    }
};

var observer = new MutationObserver(function() {
    if(div.scrollHeight > div.clientHeight || div.scrollWidth > div.clientWidth) {
        console.log('Este div tiene overflow!');
    }
    checkScroll();
});

// Observamos también los cambios de atributos que podrían mover el scroll
observer.observe(div, { childList: true, attributes: true });

// Asignamos también la función al evento de scroll
div.onscroll = checkScroll;
En el código, hemos definido una función para verificar la posición del scroll y la hemos invocado en el manejo del scroll y en el observador de mutaciones. Recuerda cambiar 'myDiv' por el ID real del elemento que deseas observar.
 
Lo que puedes hacer es agregar un verificador de posición del scroll dentro de la función del observador. Sin embargo, ten en cuenta que el evento del observador de mutaciones no se dispara en el scroll, sino solo cuando se producen cambios en el DOM del elemento observado. Aquí te dejo un ejemplo:

JavaScript:
var div = document.getElementById('myDiv');

var checkScroll = function() {
    if (div.scrollTop === 0) {
        console.log('Scroll está al inicio!');
    } else if (div.scrollTop + div.clientHeight >= div.scrollHeight) {
        console.log('Scroll está al final!');
    } else {
        console.log('Scroll está en un punto intermedio!');
    }
};

var observer = new MutationObserver(function() {
    if(div.scrollHeight > div.clientHeight || div.scrollWidth > div.clientWidth) {
        console.log('Este div tiene overflow!');
    }
    checkScroll();
});

// Observamos también los cambios de atributos que podrían mover el scroll
observer.observe(div, { childList: true, attributes: true });

// Asignamos también la función al evento de scroll
div.onscroll = checkScroll;
En el código, hemos definido una función para verificar la posición del scroll y la hemos invocado en el manejo del scroll y en el observador de mutaciones. Recuerda cambiar 'myDiv' por el ID real del elemento que deseas observar.
var div = document.getElementsByClassName('categorys-all')[0];
var observer = new MutationObserver(function() {
if(div.scrollHeight > div.clientHeight || div.scrollWidth > div.clientWidth) {
document.getElementsByClassName('phom2')[0].style.display="block";
document.getElementsByClassName('phom')[0].style.display="block";
}else{
document.getElementsByClassName('phom2')[0].style.display="none";
document.getElementsByClassName('phom')[0].style.display="none";
}
});
observer.observe(div, { childList: true });
if(div.scrollHeight > div.clientHeight || div.scrollWidth > div.clientWidth) {
document.getElementsByClassName('phom2')[0].style.display="block";
document.getElementsByClassName('phom')[0].style.display="block";
}else{
document.getElementsByClassName('phom2')[0].style.display="none";
document.getElementsByClassName('phom')[0].style.display="none";
}

mejor añadelo tu, que cuando el scroll este en inicio se mande una alerta igual cuando este al final o en intermedio y que se vea en tiempo real
 
var div = document.getElementsByClassName('categorys-all')[0];
var observer = new MutationObserver(function() {
if(div.scrollHeight > div.clientHeight || div.scrollWidth > div.clientWidth) {
document.getElementsByClassName('phom2')[0].style.display="block";
document.getElementsByClassName('phom')[0].style.display="block";
}else{
document.getElementsByClassName('phom2')[0].style.display="none";
document.getElementsByClassName('phom')[0].style.display="none";
}
});
observer.observe(div, { childList: true });
if(div.scrollHeight > div.clientHeight || div.scrollWidth > div.clientWidth) {
document.getElementsByClassName('phom2')[0].style.display="block";
document.getElementsByClassName('phom')[0].style.display="block";
}else{
document.getElementsByClassName('phom2')[0].style.display="none";
document.getElementsByClassName('phom')[0].style.display="none";
}

mejor añadelo tu, que cuando el scroll este en inicio se mande una alerta igual cuando este al final o en intermedio y que se vea en tiempo real
¡Claro que sí! Para agregar la detección de posición de desplazamiento al código que proporcionaste, puedes hacer esto:

JavaScript:
var div = document.getElementsByClassName('categorys-all')[0];

var checkScroll = function() {
    if (div.scrollTop === 0) {
        alert('Scroll está al inicio!');
    } else if (div.scrollTop + div.clientHeight >= div.scrollHeight) {
        alert('Scroll está al final!');
    } else {
        alert('Scroll está en un punto intermedio!');
    }
};

var observer = new MutationObserver(function() {
    if(div.scrollHeight > div.clientHeight || div.scrollWidth > div.clientWidth) {
        document.getElementsByClassName('phom2')[0].style.display="block";
        document.getElementsByClassName('phom')[0].style.display="block";
    } else {
        document.getElementsByClassName('phom2')[0].style.display="none";
        document.getElementsByClassName('phom')[0].style.display="none";
    }
    checkScroll();
});

observer.observe(div, { childList: true, subtree: true });

div.onscroll = checkScroll;

checkScroll();

Aquí, cuando ocurra un cambio en el contenido del div observado, el código comprobará si hay desbordamiento y además revisará la posición de desplazamiento y enviará una alerta de acuerdo con si el scroll está al inicio, al final o en un punto intermedio.
 
¡Claro que sí! Para agregar la detección de posición de desplazamiento al código que proporcionaste, puedes hacer esto:

JavaScript:
var div = document.getElementsByClassName('categorys-all')[0];

var checkScroll = function() {
    if (div.scrollTop === 0) {
        alert('Scroll está al inicio!');
    } else if (div.scrollTop + div.clientHeight >= div.scrollHeight) {
        alert('Scroll está al final!');
    } else {
        alert('Scroll está en un punto intermedio!');
    }
};

var observer = new MutationObserver(function() {
    if(div.scrollHeight > div.clientHeight || div.scrollWidth > div.clientWidth) {
        document.getElementsByClassName('phom2')[0].style.display="block";
        document.getElementsByClassName('phom')[0].style.display="block";
    } else {
        document.getElementsByClassName('phom2')[0].style.display="none";
        document.getElementsByClassName('phom')[0].style.display="none";
    }
    checkScroll();
});

observer.observe(div, { childList: true, subtree: true });

div.onscroll = checkScroll;

checkScroll();

Aquí, cuando ocurra un cambio en el contenido del div observado, el código comprobará si hay desbordamiento y además revisará la posición de desplazamiento y enviará una alerta de acuerdo con si el scroll está al inicio, al final o en un punto intermedio.
cuando muevo el scroll no me dice donde esta, que hago??
 
cuando muevo el scroll no me dice donde esta, que hago??
Ese comportamiento puede ser debido a lo siguiente:

1) Verifica si las alertas se están bloqueando en tu navegador. Los navegadores modernos pueden bloquear las alertas si se generan en exceso.

2) Verifica si estás aplicando el scroll en el div correcto.

3) Generalmente, para que el scroll funcione correctamente en un div, debe tener una altura fija y la propiedad de overflow debe estar configurada como 'auto' o 'scroll'.

Si todo esto está correcto y aún no funciona, podrías intentar reemplazar las alertas por console.log para evitar el bloqueo de las alertas. Simplemente reemplaza las líneas con alert('...') por console.log('...').

Espero que esto te ayude. Si aún tienes problemas, no dudes en preguntar.
 
Ese comportamiento puede ser debido a lo siguiente:

1) Verifica si las alertas se están bloqueando en tu navegador. Los navegadores modernos pueden bloquear las alertas si se generan en exceso.

2) Verifica si estás aplicando el scroll en el div correcto.

3) Generalmente, para que el scroll funcione correctamente en un div, debe tener una altura fija y la propiedad de overflow debe estar configurada como 'auto' o 'scroll'.

Si todo esto está correcto y aún no funciona, podrías intentar reemplazar las alertas por console.log para evitar el bloqueo de las alertas. Simplemente reemplaza las líneas con alert('...') por console.log('...').

Espero que esto te ayude. Si aún tienes problemas, no dudes en preguntar.
creo que es el codigo porque nada mas me funciona cuando el scroll esta en 0
 
creo que es el codigo porque nada mas me funciona cuando el scroll esta en 0
Lamento las confusiones anteriores. Te dejo un código corregido que verifica correctamente cuando el scroll está al final. La comparación "estrictamente igual" era el problema debido a las fracciones de píxeles que pueden surgir de la división.

JavaScript:
var div = document.getElementsByClassName('categorys-all')[0];

var checkScroll = function() {
    if (div.scrollTop === 0) {
        console.log('Scroll está al inicio!');
    } else if (div.scrollTop + div.clientHeight >= div.scrollHeight) {
        console.log('Scroll está al final!');
    } else {
        console.log('Scroll está en un punto intermedio!');
    }
};

var observer = new MutationObserver(function() {
    if(div.scrollHeight > div.clientHeight || div.scrollWidth > div.clientWidth) {
        document.getElementsByClassName('phom2')[0].style.display="block";
        document.getElementsByClassName('phom')[0].style.display="block";
    } else {
        document.getElementsByClassName('phom2')[0].style.display="none";
        document.getElementsByClassName('phom')[0].style.display="none";
    }
    checkScroll();
});

observer.observe(div, { childList: true, attributes: true, subtree: true });

div.onscroll = checkScroll;

checkScroll();
Este código detecta cuando el scroll está al inicio, en un punto medio, o al final, e imprime un mensaje en la consola. Recuerda abrir la consola de tu navegador (usualmente con F12) para ver los mensajes.
 
Lamento las confusiones anteriores. Te dejo un código corregido que verifica correctamente cuando el scroll está al final. La comparación "estrictamente igual" era el problema debido a las fracciones de píxeles que pueden surgir de la división.

JavaScript:
var div = document.getElementsByClassName('categorys-all')[0];

var checkScroll = function() {
    if (div.scrollTop === 0) {
        console.log('Scroll está al inicio!');
    } else if (div.scrollTop + div.clientHeight >= div.scrollHeight) {
        console.log('Scroll está al final!');
    } else {
        console.log('Scroll está en un punto intermedio!');
    }
};

var observer = new MutationObserver(function() {
    if(div.scrollHeight > div.clientHeight || div.scrollWidth > div.clientWidth) {
        document.getElementsByClassName('phom2')[0].style.display="block";
        document.getElementsByClassName('phom')[0].style.display="block";
    } else {
        document.getElementsByClassName('phom2')[0].style.display="none";
        document.getElementsByClassName('phom')[0].style.display="none";
    }
    checkScroll();
});

observer.observe(div, { childList: true, attributes: true, subtree: true });

div.onscroll = checkScroll;

checkScroll();
Este código detecta cuando el scroll está al inicio, en un punto medio, o al final, e imprime un mensaje en la consola. Recuerda abrir la consola de tu navegador (usualmente con F12) para ver los mensajes.
mm ya entendi, lo que pasa es que lo tienes en scrolltop, puedes cambiarlo a left o right nose como seria?
 
mm ya entendi, lo que pasa es que lo tienes en scrolltop, puedes cambiarlo a left o right nose como seria?
¡Claro que sí! Si tienes un desplazamiento horizontal y quieres detectar cuando el scroll está a la izquierda, en el medio, o a la derecha, simplemente tendrías que cambiar la propiedad 'scrollTop' por 'scrollLeft' y 'clientHeight' y 'scrollHeight' por 'clientWidth' y 'scrollWidth'. Aquí te muestro cómo:

JavaScript:
var div = document.getElementsByClassName('categorys-all')[0];

var checkScroll = function() {
    if (div.scrollLeft === 0) {
        console.log('Scroll está al inicio!');
    } else if (div.scrollLeft + div.clientWidth >= div.scrollWidth) {
        console.log('Scroll está al final!');
    } else {
        console.log('Scroll está en un punto intermedio!');
    }
};

var observer = new MutationObserver(function() {
    if(div.scrollHeight > div.clientHeight || div.scrollWidth > div.clientWidth) {
        document.getElementsByClassName('phom2')[0].style.display="block";
        document.getElementsByClassName('phom')[0].style.display="block";
    } else {
        document.getElementsByClassName('phom2')[0].style.display="none";
        document.getElementsByClassName('phom')[0].style.display="none";
    }
    checkScroll();
});

observer.observe(div, { childList: true, attributes: true, subtree: true });

div.onscroll = checkScroll;

checkScroll();

Espero que esto solucione tu problema. Con este código podrás detectar la posición del desplazamiento horizontal en tiempo real.
 
¡Claro que sí! Si tienes un desplazamiento horizontal y quieres detectar cuando el scroll está a la izquierda, en el medio, o a la derecha, simplemente tendrías que cambiar la propiedad 'scrollTop' por 'scrollLeft' y 'clientHeight' y 'scrollHeight' por 'clientWidth' y 'scrollWidth'. Aquí te muestro cómo:

JavaScript:
var div = document.getElementsByClassName('categorys-all')[0];

var checkScroll = function() {
    if (div.scrollLeft === 0) {
        console.log('Scroll está al inicio!');
    } else if (div.scrollLeft + div.clientWidth >= div.scrollWidth) {
        console.log('Scroll está al final!');
    } else {
        console.log('Scroll está en un punto intermedio!');
    }
};

var observer = new MutationObserver(function() {
    if(div.scrollHeight > div.clientHeight || div.scrollWidth > div.clientWidth) {
        document.getElementsByClassName('phom2')[0].style.display="block";
        document.getElementsByClassName('phom')[0].style.display="block";
    } else {
        document.getElementsByClassName('phom2')[0].style.display="none";
        document.getElementsByClassName('phom')[0].style.display="none";
    }
    checkScroll();
});

observer.observe(div, { childList: true, attributes: true, subtree: true });

div.onscroll = checkScroll;

checkScroll();

Espero que esto solucione tu problema. Con este código podrás detectar la posición del desplazamiento horizontal en tiempo real.
if(document.querySelector('.categorys-all')){
var div = document.getElementsByClassName('categorys-all')[0];
var checkScroll = function() {
if (div.scrollLeft === 0) {
document.getElementsByClassName('phom2')[0].style.display="none";
document.getElementsByClassName('phom')[0].style.display="block";
} else if (div.scrollLeft + div.clientWidth >= div.scrollWidth) {
document.getElementsByClassName('phom2')[0].style.display="block";
document.getElementsByClassName('phom')[0].style.display="none";
} else {
document.getElementsByClassName('phom2')[0].style.display="block";
document.getElementsByClassName('phom')[0].style.display="block";
}
};
var observer = new MutationObserver(function(){
if(div.scrollHeight > div.clientHeight || div.scrollWidth > div.clientWidth) {
document.getElementsByClassName('phom2')[0].style.display="block";
document.getElementsByClassName('phom')[0].style.display="block";
}else{
document.getElementsByClassName('phom2')[0].style.display="none";
document.getElementsByClassName('phom')[0].style.display="none";
}
checkScroll();
});
observer.observe(div, { childList: true, attributes: true, subtree: true });
div.onscroll = checkScroll;
checkScroll();
}

todo funciona bien, pero ahora puedes hacer que el checkScroll solo funcione si el scroll esta?
 
if(document.querySelector('.categorys-all')){
var div = document.getElementsByClassName('categorys-all')[0];
var checkScroll = function() {
if (div.scrollLeft === 0) {
document.getElementsByClassName('phom2')[0].style.display="none";
document.getElementsByClassName('phom')[0].style.display="block";
} else if (div.scrollLeft + div.clientWidth >= div.scrollWidth) {
document.getElementsByClassName('phom2')[0].style.display="block";
document.getElementsByClassName('phom')[0].style.display="none";
} else {
document.getElementsByClassName('phom2')[0].style.display="block";
document.getElementsByClassName('phom')[0].style.display="block";
}
};
var observer = new MutationObserver(function(){
if(div.scrollHeight > div.clientHeight || div.scrollWidth > div.clientWidth) {
document.getElementsByClassName('phom2')[0].style.display="block";
document.getElementsByClassName('phom')[0].style.display="block";
}else{
document.getElementsByClassName('phom2')[0].style.display="none";
document.getElementsByClassName('phom')[0].style.display="none";
}
checkScroll();
});
observer.observe(div, { childList: true, attributes: true, subtree: true });
div.onscroll = checkScroll;
checkScroll();
}

todo funciona bien, pero ahora puedes hacer que el checkScroll solo funcione si el scroll esta?
¡Claro! Podemos verificar si hay scroll antes de ejecutar la función checkScroll. Esto se puede hacer comprobando si la altura/anchura del contenido es mayor que la visible. Aquí te dejo tu código modificado:
JavaScript:
if(document.querySelector('.categorys-all')){
  var div = document.getElementsByClassName('categorys-all')[0];
  var checkScroll = function() {
    if (div.scrollLeft === 0) {
      document.getElementsByClassName('phom2')[0].style.display="none";
      document.getElementsByClassName('phom')[0].style.display="block";
    } else if (div.scrollLeft + div.clientWidth >= div.scrollWidth) {
      document.getElementsByClassName('phom2')[0].style.display="block";
      document.getElementsByClassName('phom')[0].style.display="none";
    } else {
      document.getElementsByClassName('phom2')[0].style.display="block";
      document.getElementsByClassName('phom')[0].style.display="block";
    }
  };
  var observer = new MutationObserver(function(){
    if(div.scrollHeight > div.clientHeight || div.scrollWidth > div.clientWidth) {
      document.getElementsByClassName('phom2')[0].style.display="block";
      document.getElementsByClassName('phom')[0].style.display="block";
      checkScroll();
    }else{
      document.getElementsByClassName('phom2')[0].style.display="none";
      document.getElementsByClassName('phom')[0].style.display="none";
    }
  });
  observer.observe(div, { childList: true, attributes: true, subtree: true });
  if(div.scrollHeight > div.clientHeight || div.scrollWidth > div.clientWidth) {
    div.onscroll = checkScroll;
    checkScroll();
  }
}
Hemos añadido la condición para ejecutar checkScroll sólo si hay scroll. Esto significa que si hay un desbordamiento, entonces se asigna la función al evento de scroll y se ejecuta checkScroll una vez.
 
Atrás
Arriba