Atualmente , o Twitter Bootstrap 3 possui os seguintes pontos de interrupção responsivos: 768px, 992px e 1200px, representando dispositivos pequenos, médios e grandes, respectivamente.
Como posso detectar esses pontos de interrupção usando JavaScript?
Gostaria de ouvir com JavaScript todos os eventos relacionados acionados quando a tela muda. E para poder detectar se a tela é para dispositivos pequenos, médios ou grandes.
Existe algo já feito? Quais são as suas sugestões?
javascript
twitter-bootstrap-3
dom-events
Rubens Mariuzzo
fonte
fonte
<div class="d-none d-?-block"></div>
alteração de visibilidade (insira o ponto de interrupção desejado). Essas classes CSS são para o Bootstrap 4 ... usam o que funciona no Bootstrap 3. Muito mais desempenho do que ouvir eventos de redimensionamento de janelas.Respostas:
Edit: Esta biblioteca está agora disponível através do Bower e NPM. Veja o repositório do github para obter detalhes.
RESPOSTA ATUALIZADA:
Disclaimer: Eu sou o autor.
Aqui estão algumas coisas que você pode fazer usando a versão mais recente (Responsive Bootstrap Toolkit 2.5.0):
A partir da versão 2.3.0, você não precisa dos quatro
<div>
elementos mencionados abaixo.RESPOSTA ORIGINAL:
Eu não acho que você precise de um script ou biblioteca enorme para isso. É uma tarefa bastante simples.
Insira os seguintes elementos imediatamente antes
</body>
:Essas 4 divs permitem verificar o ponto de interrupção atualmente ativo. Para uma fácil detecção de JS, use a seguinte função:
Agora, para executar uma determinada ação apenas no menor ponto de interrupção que você poderia usar:
Detectar alterações após o DOM estar pronto também é bastante simples. Tudo que você precisa é de um ouvinte de redimensionamento de janelas leve como este:
Depois de equipado, você pode começar a ouvir alterações e executar funções específicas do ponto de interrupção, como:
fonte
Se você não tiver necessidades específicas, basta fazer o seguinte:
Edit: Eu não vejo por que você deve usar outra biblioteca js quando você pode fazer isso apenas com o jQuery já incluído no seu projeto Bootstrap.
fonte
$(window).bind('resize')
... mas há outros eventos relacionados à orientação da tela do celular que afetam a dimensão da tela..on('resize')
Você já deu uma olhada no Response.js? Ele foi projetado para esse tipo de coisa. Combine Response.band e Response.resize.
http://responsejs.com/
fonte
Você pode usar o tamanho da janela e codificar os pontos de interrupção. Usando Angular:
fonte
Detectar o ponto de interrupção responsivo do Twitter Bootstrap 4.1.x usando JavaScript
O Bootstrap v.4.0.0 (e a versão mais recente do Bootstrap 4.1.x ) introduziu as opções de grade atualizadas ; portanto, o antigo conceito de detecção pode não ser aplicado diretamente (consulte as instruções de migração ):
sm
nível de grade abaixo768px
para um controle mais granular. Temos agoraxs
,sm
,md
,lg
, exl
;xs
As classes de grade foram modificadas para não exigir o infixo.Eu escrevi a função de utilitário pequeno que respeita os nomes de classes de grade atualizados e uma nova camada de grade:
Detectar o ponto de interrupção responsivo do Bootstrap v4-beta usando JavaScript
O Bootstrap v4-alpha e o Bootstrap v4-beta tiveram uma abordagem diferente nos pontos de interrupção da grade, então aqui está a maneira herdada de obter o mesmo:
Eu acho que seria útil, pois é fácil de integrar a qualquer projeto. Ele usa classes de exibição responsivas nativas do próprio Bootstrap.
fonte
Aqui minha própria solução simples:
jQuery:
VanillaJS:
fonte
Usar essa abordagem com o Response.js é melhor. Os gatilhos Response.resize em cada janela são redimensionados, onde o cruzamento só será acionado se o ponto de interrupção for alterado
fonte
Não deve haver problemas com alguma implementação manual como a mencionada por @oozic.
Aqui estão algumas bibliotecas que você pode dar uma olhada:
Observe que essas bibliotecas foram projetadas para funcionar independentemente do bootstrap, da base etc. Você pode configurar seus próprios pontos de interrupção e se divertir.
fonte
Você pode adicionar isso ao seu projeto de inicialização para verificar visualmente o ponto de interrupção ativo
Aqui está o BOOTPLY
fonte
Com base na resposta de Maciej Gurban (o que é fantástico ... se você gosta disso, basta votar na resposta dele). Se você estiver criando um serviço para consulta, poderá retornar o serviço ativo no momento com a configuração abaixo. Isso poderia substituir completamente outras bibliotecas de detecção de ponto de interrupção (como enquire.js, se você inserir alguns eventos). Observe que eu adicionei um contêiner com um ID aos elementos DOM para acelerar a travessia do DOM.
HTML
COFFEESCRIPT (AngularJS, mas isso é facilmente conversível)
JAVASCRIPT (AngularJS)
fonte
Em vez de usar $ (document) .width (), você deve definir uma regra CSS que fornece essas informações.
Acabei de escrever um artigo para obtê-lo com precisão. Veja aqui: http://www.xurei-design.be/2013/10/how-to-accurately-detect-responsive-breakpoints/
fonte
Por que não usar o jQuery para detectar a largura atual do CSS da classe de contêiner de bootstrap?
ou seja ..
Você também pode usar $ (window) .resize () para impedir que seu layout "suja a cama" se alguém redimensionar a janela do navegador.
fonte
Em vez de inserir o abaixo muitas vezes em cada página ...
Basta usar o JavaScript para inseri-lo dinamicamente em todas as páginas (observe que eu o atualizei para trabalhar com o Bootstrap 3 com
.visible-*-block
:fonte
Não tenho pontos de reputação suficientes para comentar, mas para aqueles que estão tendo problemas para serem "não reconhecidos" quando tentam usar o ResponsiveToolKit de Maciej Gurban, eu também estava recebendo esse erro até perceber que Maciej realmente faz referência ao kit de ferramentas na parte inferior do página em seu CodePen
Eu tentei fazer isso e de repente funcionou! Portanto, use o ResponsiveToolkit, mas coloque seus links na parte inferior da página:
Não sei por que faz a diferença, mas faz.
fonte
Aqui está outra maneira de detectar a viewport atual sem colocar os números de tamanho da viewport no seu javascript.
Consulte trechos de css e javascript aqui: https://gist.github.com/steveh80/288a9a8bd4c3de16d799
Após adicionar esses trechos aos arquivos css e javascript, você pode detectar a viewport atual como esta:
Se você deseja detectar um intervalo de viewport, use-o assim
fonte
O CSS do Bootstrap para a
.container
classe é assim:Portanto, isso significa que podemos confiar com segurança
jQuery('.container').css('width')
para detectar pontos de interrupção sem as desvantagens de confiarjQuery(window).width()
.Podemos escrever uma função como esta:
E então teste como
fonte
var cssWidth = parseInt( jQuery('.container').css('width') );
segundo, use faixasif ( cssWidth < 768) { return 'xs'; } else if (cssWidth >= 768 && cssWidth <= 992) { return 'sm'; } else if (cssWidth > 992 && cssWidth <= 1200) { return 'md'; } else { return 'lg'; }
Use CSS
:before
econtent
propriedade para imprimir o estado do ponto de interrupção no<span id="breakpoint-js">
modo que o JavaScript apenas precise ler esses dados para transformá-lo em uma variável a ser usada em sua função.(execute o trecho para ver o exemplo)
NOTA: Adicionei algumas linhas de CSS para usar o
<span>
sinalizador vermelho no canto superior do meu navegador. Apenas certifique-se de mudar de voltadisplay:none;
antes de publicar seu material publicamente.fonte
Eu criei um método jQuery nativo para detecção de tamanho de tela do Twitter Bootstrap. Aqui está:
JSFillde: https://jsfiddle.net/pstepniewski/7dz6ubus/
JSFillde como exemplo de tela cheia: https://jsfiddle.net/pstepniewski/7dz6ubus/embedded/result/
fonte
Para qualquer pessoa interessada nisso, escrevi uma detecção de ponto de interrupção baseada em pontos de interrupção CSS usando TypeScript e Observables. não é muito difícil criar o ES6, se você remover os tipos. No meu exemplo, eu uso o Sass, mas também é fácil remover isso.
Aqui está o meu JSFiddle: https://jsfiddle.net/StefanJelner/dorj184g/
HTML:
SCSS:
TypeScript:
Espero que isso ajude alguém.
fonte
Bootstrap4 com jQuery, solução simplificada
fonte
Eu não estava realmente satisfeito com as respostas dadas, que parecem muito complicadas de usar, então escrevi minha própria solução. No entanto, por enquanto, isso depende de sublinhado / lodash para funcionar.
https://github.com/LeShrimp/GridSizeEvents
Você pode usá-lo assim:
Isso funciona como padrão para o Bootstrap 3, pois os pontos de interrupção são codificados para 768px, 992px e 1200px. Para outras versões, você pode facilmente adaptar o código.
Internamente, isso usa matchMedia () e, portanto, garante a produção de resultados sincronizados com o Bootstrap.
fonte
Talvez isso ajude alguns de vocês, mas existe um plug-in que ajuda a detectar em qual ponto de interrupção atual do Bootstrap v4 você vê: https://www.npmjs.com/package/bs-breakpoints
Simples de usar (pode ser usado com ou sem jQuery):
fonte
Aqui está a minha solução (Bootstrap 4):
fonte
Para quem usa o knockout.js , eu queria algumas propriedades observáveis do knockout.js que me informassem quando os pontos de interrupção fossem atingidos. Optei por usar o suporte do Modernizr para consultas de mídia no estilo css, para que os números correspondessem às definições de autoinicialização e para obter os benefícios de compatibilidade do modernizr. Meu modelo de exibição knockout é o seguinte:
fonte
Aqui está uma boa maneira de detectá-lo (talvez engraçado, mas funciona) e Você pode usar o elemento necessário para que o código fique claro:
Exemplo: css:
e no documento por jQuery:
é claro que a propriedade css é qualquer.
fonte
Como o bootstrap 4 será lançado em breve, pensei em compartilhar uma função que o suporte (xl agora é uma coisa) e executa jQuery mínimo para concluir o trabalho.
fonte
Bootstrap 4
ou minificado
fonte
Se você usar Knockout , poderá usar a seguinte ligação personalizada para vincular o ponto de interrupção da viewport atual (xs, sm, md ou lg) a um observável em seu modelo. A ligação...
divs
comvisible-??
classe em uma div com iddetect-viewport
e a adiciona ao corpo se ela ainda não existir (para que você possa reutilizar essa ligação sem duplicar essas divs)fonte
Já faz um tempo desde o OP, mas aqui está a minha solução para isso usando o Bootstrap 3. No meu caso de uso, eu estava apenas segmentando linhas, mas o mesmo poderia ser aplicado ao contêiner etc.
Apenas mude .row para o que quiser.
fonte