Jump to content
s3c0

[RESOLVIDO] DIV + JS

Recommended Posts

Amigo, estou com um probleminha e não consigo resolver...

 

já revirei a internet inteira, mas não encontrei nada parecido com o que preciso.

 

A questão é o seguinte. Queria executar um comando JS assim que uma div aparecer na tela.

 

Abaixo estou deixando os codes

 

<script src="js/jquery.min.js" type="text/javascript"></script>
<style>
						#progress {
							width:100%;
							height:20px;
							border: solid #808080 2px;
						    border-radius: 5px;
							background-image: linear-gradient( 90deg, green, yellow, red );
						}
						#processador{
							width: 0%;
							height: 16px;
							background-color: rgba(0, 0, 0, 0.5);
						}
						#memoria{
							width: 0%;
							height: 16px;
							background-color: rgba(0, 0, 0, 0.5);
						}
						#hd{
							width: 0%;
							height: 16px;
							background-color: rgba(0, 0, 0, 0.5);
						}
						</style>
						Processador
						<span data-bind="Usage"><div id="progress"><div id="processador"></div></div><div style="text-align:right;">20%</div></span>
						
						Memória
						<span data-bind="Usage"><div id="progress"><div id="memoria"></div></div><div style="text-align:right;">50%</div></span>
						
						Hard Disk
						<span data-bind="Usage"><div id="progress"><div id="hd"></div></div><div style="text-align:right;">80%</div></span>

 

 

JS

 

<script type="text/javascript">
						$("#processador").html(function(){
								alert("ok");
								var width = 1;
								var id = setInterval(frame, 10);
								var id2 = setInterval(frame2, 10);
								var id3 = setInterval(frame3, 10);
								  function frame() {
									if (width >= 20) {
									  clearInterval(id);
									} else {
									  width++; 
									  document.getElementById("processador").style.width = width + '%';
									}
								  }
								  function frame2() {
									if (width >= 50) {
									  clearInterval(id2);
									} else {
									  width++; 
									  document.getElementById("memoria").style.width = width + '%';
									}
								  }
								  function frame3() {
									if (width >= 80) {
									  clearInterval(id3);
									} else {
									  width++; 
									  document.getElementById("hd").style.width = width + '%';
									}
								  }
							  
						});
						</script>

 

A "animação" em si, está funcionando perfeitamente, porém ao carregar a página e não no momento em que a DIV aparece na tela

Share this post


Link to post
Share on other sites
44 minutos atrás, Maujor disse:

Olá @2s3co

Precisamos mais informações para ajudar:

1-) "...e não no momento em que a DIV aparece na tela"
No seu HTML não consta o DIV que "vai aparecer" na tela.

2-)Qual é o evento que faz com que o DIV apareça?

 

Olá @Maujor boa noite e obrigado pela resposta.

 

o DIV está sim no HTML.

 

<div id="processador"></div>

 

Acho que não ficou muito claro o que estou tentando fazer...

 

Ao rolar a página, quando esse DIV aparecer na tela, automaticamente executa o JS.

 

Da forma que está o JS é executado assim que a página é carregada

Share this post


Link to post
Share on other sites

Se eu entendi direito acho que é isso mais ou menos algo como isso:

document.addEventListener('scroll', function () {
    console.log(window.pageYOffset);
}, false);

 

Mais informações sobre eventos de scroll caso seja necessário:

https://developer.mozilla.org/pt-BR/docs/Web/Events/scroll

Share this post


Link to post
Share on other sites
11 horas atrás, Omar~ disse:

Se eu entendi direito acho que é isso mais ou menos algo como isso:


document.addEventListener('scroll', function () {
    console.log(window.pageYOffset);
}, false);

 

Mais informações sobre eventos de scroll caso seja necessário:

https://developer.mozilla.org/pt-BR/docs/Web/Events/scroll

 

@Omar~ é isso mesmo que estava precisando. Muitíssimo obrigado

 

consegui adaptar no meu script e está como queria.

 

Porém me surgiu um outro problema. Tem como parar o JS assim que atingir aquela "linha"? Pois toda vez que passa por aquela "linha", o JS é executado novamente.

 

if (window.pageYOffset == 2800){
	//função
}

 

Share this post


Link to post
Share on other sites

Use o método removeEventListener()
https://developer.mozilla.org/pt-BR/docs/Web/API/EventTarget/removeEventListener

document.addEventListener('scroll', function () {
   ...;   
 document.removeEventListener('scroll', function, false)   
}, false);

Share this post


Link to post
Share on other sites
7 minutos atrás, Maujor disse:

Use o método removeEventListener()
https://developer.mozilla.org/pt-BR/docs/Web/API/EventTarget/removeEventListener


document.addEventListener('scroll', function () {
   ...;   
 document.removeEventListener('scroll', function, false)   
}, false);

 

Olá @Maujor obrigado pela resposta.

 

usei da forma orientada, porém dá erro na linha add

 

Uncaught SyntaxError: Unexpected token ,

 

 

Share this post


Link to post
Share on other sites

Já que você está usando jQuery veja a solução a seguir:

$( window ).scroll(function() {
  if ($(window).scrollTop() == 2800){
    $('#processador').show(function(){
      var width1 = 0; var width2 = 0; var width3 = 0;
      var id = setInterval(frame, 30);
      var id2 = setInterval(frame2, 30);
      var id3 = setInterval(frame3, 30);
        function frame() {
          if (width1 >= 20) {
            clearInterval(id);
          } else {
            width1++; 
            document.getElementById("processador").style.width = width1 + '%';
            document.getElementById("proc1").innerHTML = width1 + '%';
          }
        }
        function frame2() {
          if (width2 >= 50) {
            clearInterval(id2);
          } else {
            width2++; 
            document.getElementById("memoria").style.width = width2 + '%';
            document.getElementById("mem1").innerHTML = width2 + '%';
          }
        }
        function frame3() {
          if (width3 >= 80) {
            clearInterval(id3);
          } else {
            width3++; 
            document.getElementById("hd").style.width = width3 + '%';
            document.getElementById("hd1").innerHTML = width3 + '%';
          }
        }  
    })  
    $(window).off('scroll');  
  }
})

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By guzulino
      Eu preciso criar um sistema de busca em tempo real vamos dizer assim, na realidade eu até consegui achar boa parte dele.
      <form onsubmit="return false;"> <input id="campo_cpu" type="text" name="nome_cpu" placeholder="Modelo do processador"> </form> <script src="auto-complete.js"></script> <script> var demo1 = new autoComplete({ selector: '#campo_cpu', minChars: 1, source: function(term, suggest){ term = term.toLowerCase(); var choices = ['ActionScript', 'AppleScript', 'Asp', 'Assembly', 'BASIC', 'Batch', 'C', 'C++', 'CSS', 'Clojure', 'COBOL', 'ColdFusion', 'Erlang', 'Fortran', 'Groovy', 'Haskell', 'HTML', 'Java', 'JavaScript', 'Lisp', 'Perl', 'PHP', 'PowerShell', 'Python', 'Ruby', 'Scala', 'Scheme', 'SQL', 'TeX', 'XML']; var suggestions = []; for (i=0;i<choices.length;i++) if (~choices[i].toLowerCase().indexOf(term)) suggestions.push(choices[i]); suggest(suggestions); } }); </script> Eu consegui esse código e ele funciona tranquilamente, mas isso é só um teste, o usuário vai digitar o que ele precisa e no banco de dados eu mais de 5000 registros, então eu preciso que seja feita uma consulta no banco de dados para que ele mostre o que tem lá, acho que colocar 5000 numa string é um #@?&#036;%~ trampo além de eu achar que vai dar caquinha, o problema é que eu não faço a mínima ideia de como fazer isso, eu acho que é tipo uma consulta no banco a cada caractére digitado mostrando somente os resultados compatíveis, mas como disse antes não tenho ideia, se alguém agradeço desde já. Valeu
    • By tiagosoliver
      Boa noite galera,
       
      Estou precisando a partir de um json serializado, criar um menu dinâmico, pelo javascript. O json e a estrutura do menu eu coloquei na imagem em anexo. Obrigado desde já.

    • By Sapinn
      Salve salve.
      Mas uma dúvida minha aqui É o seguinte tenho uma pagina que tem um texto de um usuario e eu gostaria de imprimir esta página usando javascript. Sei que usando o window.print() da pra imprimir o problema é que não fica organizado. Então eu gostaria de imprimir outra pagina na qual eu organizaria melhor o  texto e outra informações do usuario para impressão. Alguém tem algum codigo ae que faça isso?
       
      Desde já agradeço.
    • By dev-02
      <b>Dias</b> <span id="dia"></span> - <b>Tempo</b> <span id="hora"></span>:<span id="minuto"></span>:<span id="segundo"></span> var data = 15; var target_date = new Date(`\n October ${data}, 2019`).getTime(); var dias, horas, minutos, segundos; var regressiva = document.getElementById("regressiva"); setInterval(function() { Timer(); }, 1000); function Timer() { var current_date = new Date().getTime(); var segundos_f = (target_date - current_date) / 1000; dias = parseInt(segundos_f / 86400); segundos_f = segundos_f % 86400; horas = parseInt(segundos_f / 3600); segundos_f = segundos_f % 3600; minutos = parseInt(segundos_f / 60); segundos = parseInt(segundos_f % 60); document.getElementById('dia').innerHTML = dias; document.getElementById('hora').innerHTML = horas < 10 ? `0${horas}` : `${horas}`; document.getElementById('minuto').innerHTML = minutos < 10 ? `0${minutos}` : `${minutos}`; document.getElementById('segundo').innerHTML = segundos < 10 ? `0${segundos}` : `${segundos}`; if(horas == 0 && minutos == 0 && segundos == 0) { data = data + 2; } }  
    • By joicitias
      Olá, 
      Estou aprendendo a programar ainda, e preciso fazer com que ao clicar em um botão o  conteúdo selecionado de um select seja copiado para uma textarea. 
       
       

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.