Calculate the end of the screen

0

Well, I have a button that opens a div .

If this button is in the middle of the screen , then I open the div p>

If the button is the end of the screen and when you open the div div below the button .

But How to calculate if the button is on the end of the screen ?

Look at: NO It is at the end of the page , but YES at the end of the visible part of the page .

    
asked by anonymous 10.10.2017 / 14:39

2 answers

1

This code checks if the element (in this case, a button) is at or near the end of the visible area of the screen:

$(window).on("scroll load", function(){
    dist_bot_top = $("#botao").offset().top; // distância do botão para o início do documento
    janela_scroll = $(window).scrollTop(); // distância que a página foi rolada
    altura_bot = $("#botao").outerHeight(); // altura real do botão
    // Abaixo subtraio a distância do botão para o início do documento
    // pela distância que a página foi rolada (isso me dá a distância
    // real do botão até o topo da área visível da janela) e comparo
    // se é igual ou maior que a área visível da janela: window.innerHeight
    if((dist_bot_top-janela_scroll)+altura_bot >= window.innerHeight){
        console.log("Botão está no final");
    }
    // este "else" é apenas para apagar o console, pode deletar
    else{
        console.clear();
    }
});

$(window).on("scroll load", function(){
	dist_bot_top = $("#botao").offset().top; // distância do botão para o início do documento
	janela_scroll = $(window).scrollTop(); // distância que a página foi rolada
	altura_bot = $("#botao").outerHeight(); // altura real do botão
	// Abaixo subtraio a distância do botão para o início do documento
	// pela distância que a página foi rolada (isso me dá a distância
	// real do botão até o topo da área visível da janela) e comparo
	// se é igual ou maior que a área visível da janela: window.innerHeight
	if((dist_bot_top-janela_scroll)+altura_bot >= window.innerHeight){
		console.log("Botão está no final");
	}
	// este "else" é apenas para apagar o console, pode deletar
	else{
		console.clear();
	}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>Roleparabaixo<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><inputid="botao" type="button" value="ok" />

<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
    
10.10.2017 / 15:42
0

Well, adapting here was as below.

But do you have a way to optimize this code?

I think it's not well-written, although it's working correctly.

$(document).ready(function(e) {

    // entrega o primeiro elemento da select option à div .selecionada
    $(".selectOptions .selecionada").html($(".selectOptions select > option:first-child").html());

    /*popula as li's*/
    $(".selectOptions select > option").each(function() {
        //Não exibe a primeira li pois esta já está sendo exibida na .selecionada
        if ($(this).is(':first-child')) $(".selectOptions ul").append("<li value='" + this.value + "' style='display:none;'>" + this.text + "</li>");
        else $(".selectOptions ul").append("<li style='display:block;' value='" + this.value + "'>" + this.text + "</li>");
    });

    //contador de vezes que abre e fecha a ul
    contador = 0;

    $(".selectOptions .selecionada").click(function(e) {

        quantasLis = $(".selectOptions ul li").length;

        if (contador % 2 == 0) {

            $(".selectOptions .selecionada").addClass("setaCima").removeClass("setaBaixo");
            $(".selectOptions ul").css("display", "block");
            $(".selectOptions ul li").css("display", "none").slideDown(400);

            if (quantasLis > 4) {
                $(".selectOptions ul").css('height', '175px');
                $(".selectOptions ul").css("overflow-y", "scroll");
            } else {
                $(".selectOptions ul").css('height', (quantasLis*35)+'px');
                $(".selectOptions ul").css("overflow-y", "auto");
            }


            janela = $(window).height();

            selecionadaPosicao = $(".selectOptions .selecionada").offset().top;
            selecionadaAltura = $(".selectOptions .selecionada").height();
            ulAltura = $(".selectOptions ul").height();
            janelaScroll = $(window).scrollTop(); // distância que a página foi rolada

            posicaoFinal = ulAltura + $(".selectOptions .selecionada").outerHeight();

            total = selecionadaPosicao + selecionadaAltura + ulAltura - janelaScroll;

            if (total >= janela)
                $(".selectOptions ul").css("bottom", posicaoFinal, "important");
            else             
                $(".selectOptions ul").css("bottom", "0", "important");


        } else {

            $(".selectOptions .selecionada").addClass("setaBaixo").removeClass("setaCima");
            $(".selectOptions ul li").slideUp(400, function() {
                $(".selectOptions ul").css("overflow-y", "hidden");
            });
        }

        contador++;

        e.stopPropagation();

    });

    /*ai clicar na li, busca correspondência na select option e o checa (marca)*/
    $('.selectOptions ul li').on('click', function(evt) {
        /*Joga a li selecionada na label .selecionada*/
        $(".selectOptions .selecionada").html($(this).html());
        /*Joga a li selecionada ao topo da ul*/
        $($(this).closest('ul')).prepend($(this));
        // Armazena nome do maos que quer selecionar
        var li = $(this).attr("value");
        // Guarda em opcao o elemento que retornar do filtro que vai testar entre as
        // options possíveis
        var opcao = $('.selectOptions select option').filter(function() {
            // testa entre as options qual delas tem o mesmo conteúdo que o desejado
            return $(this).attr('value') === li;
        });
        // Redefine o atributo do elemento encontrado pra selecionado.
        opcao.attr('selected', true);

    });

    // ao clicar em qualquer coissa, fecha a ul caso ela esteja aberta
    $(document).on('click', function(e) {
        if (
            $(".selectOptions ul").css("overflow-y") == "auto" ||
            $(".selectOptions ul").css("overflow-y") == "scroll") {
            $(".selectOptions .selecionada").trigger("click");
        }
    });

});
    
10.10.2017 / 20:13