Eu tenho um div, com uma barra de rolagem, quando chega ao fim, minha página começa a rolar. Existe alguma maneira de interromper esse comportamento?
javascript
html
Jeevan
fonte
fonte
Respostas:
Você pode desativar a rolagem de toda a página fazendo algo assim:
fonte
Encontrei a solução.
http://jsbin.com/itajok
Isso é o que eu precisava.
E este é o código.
http://jsbin.com/itajok/edit#javascript,html
Usa um plug-in jQuery.
Atualização devido ao aviso de suspensão de uso
De jquery-mousewheel :
Então,
event.deltaY
agora deve ser usado:Demo
fonte
A solução selecionada é uma obra de arte. Achei que valia a pena um plugin ....
Isso tem sido um incômodo contínuo para mim e essa solução é tão limpa em comparação com outros hacks que já vi. Curioso para saber mais sobre como funciona e como seria amplamente apoiado, mas um brinde a Jeevan e a quem o criou originalmente. BTW - o editor de respostas stackoverflow precisa disso!
ATUALIZAR
Eu acredito que isso é melhor porque ele não tenta manipular o DOM, apenas evita o borbulhamento condicionalmente ...
Funciona muito bem no cromo e muito mais simples do que outras soluções ... deixe-me saber como fica em outro lugar ...
FIDDLE
fonte
wheel
eventoVocê poderia usar um evento mouseover no div para desativar a barra de rolagem do corpo e, em seguida, um evento mouseout para ativá-lo novamente?
Por exemplo, o HTML
E então o javascript assim:
fonte
document.body
.Esta é uma maneira para vários navegadores de fazer isso no eixo Y; ela funciona em desktops e dispositivos móveis. Testado em OSX e iOS.
fonte
scrollTop === maxScroll
byscrollTop >= maxScroll
. Parece ser estranho em um caso, era necessárioEu escrevi resolvendo este problema
fonte
e.currentTarget
.false
não precisa ser especificado,addEventListener
pois é o padrão. Além disso, as comparações devem ser simples desigualdades (>
e<
), não>=
ou<=
.Se entendi sua pergunta corretamente, você deseja evitar a rolagem do conteúdo principal quando o mouse estiver sobre uma div (digamos uma barra lateral). Para isso, a barra lateral não pode ser filha do container de rolagem do conteúdo principal (que era a janela do navegador), para evitar que o evento scroll borbulhe para seu pai.
Isso possivelmente requer algumas alterações de marcação da seguinte maneira:
Veja se está funcionando neste exemplo de violino e compare isso com este exemplo de violino, que tem um comportamento de saída do mouse ligeiramente diferente da barra lateral.
Consulte também rolar apenas um div específico com a barra de rolagem principal do navegador .
fonte
Conforme respondido aqui , a maioria dos navegadores modernos agora oferece suporte à
overscroll-behavior: none;
propriedade CSS, que evita o encadeamento de rolagem. E é isso, apenas uma linha!fonte
overscroll-behavior: contain;
.isso desativa a rolagem na janela se você inserir o elemento seletor. funciona como amuletos.
fonte
Você pode desativar a rolagem de toda a página fazendo algo assim, mas exiba a barra de rolagem!
fonte
fonte
Com base na resposta do ceed, aqui está uma versão que permite o aninhamento de elementos protegidos por rolagem. Somente o elemento sobre o qual o mouse está passando irá rolar, e ele rola de maneira bastante suave. Esta versão também é reentrante. Ele pode ser usado várias vezes no mesmo elemento e removerá e reinstalará corretamente os manipuladores.
Uma maneira fácil de usar é adicionar uma classe, por exemplo
scroll-guard
, a todos os elementos da página em que você permite a rolagem. Em seguida, use$('.scroll-guard').scrollGuard()
para protegê-los.fonte
Se você aplicar um
overflow: hidden
estilo, ele deve desaparecereditar: na verdade eu li sua pergunta errado, isso só vai esconder a barra de rolagem, mas eu não acho que é isso que você está procurando.
fonte
Não consegui fazer com que nenhuma das respostas funcionasse no Chrome e no Firefox, então criei este amálgama:
fonte