Tengo un contenedor div con tamaño fijo y desbordamiento: scroll, está lleno de divs más pequeños formando una especie de lista. he aquí un ejemplo de violín: http://jsfiddle.net/etYSC/2/¿Cómo puedo hacer que una barra de desplazamiento solo se desplace a intervalos fijos?
Lo que quiero es que el desplazamiento nunca corte una caja, mostrando siempre 3 cuadros completos (en este ejemplo), por lo que se desplazará siempre un número fijo de píxeles.
¿Cómo puedo hacer esto?
Estoy usando la biblioteca jquery.
Google ha sido una amante dura en esta cuestión debido a las palabras clave engañosas.
- solución
que era capaz de refinar código kiranvj un poco más y estoy muy satisfecho con el resultado final.
de tomar la div anterior:
var scrollTimerHandle = "";
var positionTimerHandle = "";
$("#container").scroll(function() {
var boxSize = 84;
var newScrollPosition = parseInt(this.scrollTop/boxSize) * boxSize,
_this = this;
clearInterval(scrollTimerHandle);
scrollTimerHandle = setTimeout(function() {
positionTimerHandle = setInterval(function(){
if (_this.scrollTop == newScrollPosition){
clearInterval(positionTimerHandle);
} else {
_this.scrollTop--;
}
}, 5);
}, 600);
});
ajuste a la div cercano
var scrollTimerHandle = "";
var positionTimerHandle = "";
$("#container").scroll(function() {
var boxSize = 84;
var preScrollPosition = parseInt(this.scrollTop/boxSize) * boxSize;
var newScrollPosition = this.scrollTop - preScrollPosition < boxSize /2
? preScrollPosition : preScrollPosition + boxSize;
_this = this;
clearInterval(scrollTimerHandle);
scrollTimerHandle = setTimeout(function() {
positionTimerHandle = setInterval(function(){
if (_this.scrollTop == newScrollPosition){
clearInterval(positionTimerHandle);
} else {
if (_this.scrollTop > newScrollPosition){
_this.scrollTop--;
} else {
_this.scrollTop++;
}
}
}, 5);
}, 700);
});
Gracias por toda la ayuda, estaba perdido en cómo abordar esto y aprendí un buen negocio hoy.
Esta es una pregunta difícil, porque si no me equivoco, sólo inspeccionar la posición de desplazamiento * después de * se produce el desplazamiento. Eso significa que, si fuerza el desplazamiento en incrementos (en este caso, la altura de sus bloques), habrá una gran cantidad de tartamudeo a medida que el contenedor se desplaza unos pocos píxeles y luego salta hacia atrás o hacia adelante. Puede eliminar la barra de desplazamiento por completo y proporcionar sus propios botones que desplazan el contenedor en el incremento deseado. – jackwanders
@kiranvj obtuvo mi forma definitiva, no es como me imaginé cuando pregunté, pero me gusta más. gracias por tu ayuda. – petervaz