Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Нижняя граница окна (https://javascript.ru/forum/dom-window/70615-nizhnyaya-granica-okna.html)

Webrow 19.09.2017 18:33

Нижняя граница окна
 
Здравствуйте, подскажите пожалуйста, что нужно указать в коде, чтобы элемент всегда появлялся снизу страницы. На данный момент для определения нижней границы в коде js используется
document.body.scrollHeight

Есть сомнения по поводу данного способа, подскажите более корректный способ для данного случая.

Код:

https://jsfiddle.net/5ro06noz/

Rasy 19.09.2017 18:46

Webrow,
position: fixed;
js не нужен.

laimas 19.09.2017 18:47

CSS - position: fixed; //left/bottom

Webrow 19.09.2017 18:57

Цитата:

Сообщение от Rasy (Сообщение 464874)
Webrow,
position: fixed;
js не нужен.

Для анимации передвижения элемента js вообще не нужен? Покажите пожалуйста пример начинающему, как это в css реализовать для моего случая, чтобы css полноценно заменил работу скрипта. Может в вопросе неправильно выразился, мне нужно чтобы элемент появлялся снизу экрана, независимо от положения скролла на странице.

Rasy 19.09.2017 19:22

Webrow,
Конкретизируй условие

Webrow 19.09.2017 19:40

Вы написали, что js не нужен. Если я вас правильно понял, то скрипт вообще не нужен и всю анимацию от появления до передвижения элемента при скроллинге страницы можно реализовать средствами css. Мой вопрос: как заменить работу скрипта из моего примера стилями css, чтобы элемент также появлялся снизу экрана и двигался при скроллинге.

j0hnik 19.09.2017 19:45

Чтобы так плавно опускался никак без JS, остальное можно!

Webrow 19.09.2017 19:51

Цитата:

Сообщение от j0hnik (Сообщение 464883)
Чтобы так плавно опускался никак без JS, остальное можно!

Хорошо, значит js оставляем, но как указать в js нижнюю границу экрана, чтоб из-за нее появлялся элемент без применения
document.body.scrollHeight
?

webmanss 19.09.2017 20:00

Как тут любят говорить конкретизируй вопрос. То у тебя плавно появлялся, то плавно опускался.
Первое легко через свойство css: opacity, второе только через js.

j0hnik 19.09.2017 20:00

document.body.scrollHeight

заменить на
window.innerHeight;

рони 19.09.2017 20:14

webmanss,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">


  .height{
    width:300px;
    height:3000px;
    background:#FFF;
  }

  .ret_block{
    height:65px;
    width:65px;
    position: fixed;
    opacity:0;
    right:100px;
    bottom: -70px;
  }
  .ret_block.up{
    transition:bottom 2s cubic-bezier(.35,1.88,.51,.97), opacity 3s ease-out;
    opacity: 1;
    bottom: 100px;
  }

  .ret{
    background:#80c111;
    opacity:0.9;
    border-radius: 50% !important;
    cursor:move;
    height:65px;
    position:absolute;
    width:65px;
    z-index:9999;
    cursor:pointer;
  }
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

  <script>
$(function() {
    var a = $(".ret_block"),
        b;
    $(window).scroll(function() {
        window.clearTimeout(b);
        a.removeClass("up");
        b = window.setTimeout(function() {
            a.addClass("up")
        }, 300)
    }).trigger("scroll")
});
  </script>
</head>

<body>
<div class="height">



 <div class="ret_block">
   <div class="ret"> </div>
 </div>



</div>

</body>
</html>

j0hnik 19.09.2017 20:21

рони,
как то не очень красиво =(

рони 19.09.2017 20:22

j0hnik,
Цитата:

Сообщение от Webrow
чтобы элемент всегда появлялся снизу страницы

что не так?

j0hnik 19.09.2017 20:29

рони, я про анимацию. изначальная версия симпатичней

рони 19.09.2017 20:45

j0hnik,
строка 25 открыта для вашего творчества :)

Rasy 19.09.2017 23:52

рони,
я думаю, тут подразумевался скроллинг элемента и его анимация при выходе из вьюпорта.

https://jsfiddle.net/5ro06noz/3/

рони 20.09.2017 00:11

Rasy,
подождём автора темы ...

Webrow 20.09.2017 00:14

Цитата:

Сообщение от j0hnik (Сообщение 464886)
document.body.scrollHeight

заменить на
window.innerHeight;

Спасибо, но с параметром window.innerHeight если проскролить страницу вниз и обновить, то элемент появляется сверху. Снизу появляется только в связке
window.innerHeight + $(window).scrollTop()


рони, спасибо за код, но в моем примере элемент появляется снизу только при обновлении страницы, ну и при скроле наверх. Я понимаю, что изначально не совсем конкретно изложил свою просьбу, но про появление снизу при каждом скроле я не говорил и мне не ясно, каким образом 25 строка вернет анимацию элемента, как в моем примере и уберет появление при каждом скроле? Хотя должен отметить, что появление элемента в вашем примере выглядит довольно интересно. Еще бы вернуть анимацию перемещения при скроле.

Цитата:

Сообщение от Rasy (Сообщение 464905)
рони,
я думаю, тут подразумевался скроллинг элемента и его анимация при выходе из вьюпорта.

https://jsfiddle.net/5ro06noz/3/

В вашем примере появление снизу тоже корректное. Далее при скроле элемент всегда должен возвращаться на одно место. В моем примере меня устраивало все, кроме функции, которая определяла, откуда будет стартовать элемент при обновлении страницы.

рони 20.09.2017 00:25

Webrow,
я пас, не понимаю что вам нужно.

Webrow 20.09.2017 00:43

Посмотрите мой пример из первого поста, все что мне нужно, это заменить document.body.scrollHeight, которая определяет, откуда будет стартовать объект при обновлении страницы. С document.body.scrollHeight при обновлении страницы даже заметно, как полоса скрола меняет размер, когда стартует объект. В ваших примерах такого не наблюдается, старт объекта происходит корректно.

рони 20.09.2017 01:30

Webrow,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">


  .height{
    width:300px;
    height:3000px;
    background:#FFF;
  }

  .ret_block{
    height:65px;
    width:65px;
    position: fixed;
    opacity:0;
    right:100px;
    bottom: -70px;
  }
  .ret_block.up{
    transition:bottom 2s cubic-bezier(.35,1.88,.51,.97), opacity 3s ease-out;
    opacity: 1;
    bottom: 100px;
  }

  .ret{
    background:#80c111;
    opacity:0.9;
    border-radius: 50% !important;
    cursor:move;
    height:65px;
    position:absolute;
    width:65px;
    z-index:9999;
    cursor:pointer;
  }
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

  <script>
$(function() {
    var a = $(".ret_block").addClass("up"),
        b,
        c = $(window).scrollTop();
    $(window).scroll(function() {
        window.clearTimeout(b);
        a.css({bottom : Math.min($(window).height()-65,Math.max(-65,c - $(window).scrollTop()) )  })
        b = window.setTimeout(function() {
            a.css({bottom : ""});
            c = $(window).scrollTop();
        }, 200)
    }).trigger("scroll")
});
  </script>
</head>

<body>
<div class="height">



 <div class="ret_block">
   <div class="ret"> </div>
 </div>



</div>

</body>
</html>


Часовой пояс GMT +3, время: 08:49.