Jump to content
Sign in to follow this  
timbios

Новая кнопка «Вверх»

Recommended Posts

Внешний вид кнопки

 

Идея заключается в том, чтобы, по аналогии с Вконтакте, переход наверх осуществлялся при клике по всей свободной левой части страницы, а не только по самой кнопке. Для этого составим следующий html-код:

 


Здесь все просто, в контейнер div с классом leftbar-wrap мы помещаем элемент a.left-controlbar, который и будет выполнять роль кнопки. Вложенные теги span использованы для визуального оформления: подсветки и вывода надписи.

 

 

Теперь перейдем к описанию стилей для нашей боковой панели с кнопками.




/* описание контейнера */
.leftbar-wrap {
  position: fixed;
  height: 100%;
  top: 0;
  left: 0;
}


/* описание кнопки «Вверх» */
.left-controlbar {
  height: 100%;
  display: block;
  text-decoration: none;
}


/* описание кнопки «Вернуться» */
#scroll-back {
  display: block;
  height: 100%;
  top: 0;
  display: none;
  text-align: center;
}


/* описание столбца фонового цвета для обеих кнопок */
.active-area {
  width: 100px;
  height: 100%;
  display: block;
  text-align: center;
}


/* задаем прозрачность фонового цвета при наведении на активную область страницы */
.leftbar-wrap:hover .active-area {
  background: rgba(99, 156, 191, 0.2);
}


/* делаем подсветку немного ярче при наведении на надпись */
.leftbar-wrap .active-area:hover {
  background: rgba(99, 156, 191, 0.3);
}


/* центрируем надпись у кнопок */
.bar-desc {
  top: 50%;
  position: relative;
  display: inline-block;
}


На этом с внешним видом, пожалуй, закончили.

 

Управление кнопками

 

Теперь необходимо вдохнуть в нашу разметку немного жизни. Для этого напишем небольшую функцию на javascript с применением фреймворка jQuery.




function initSideControls() {
  var control_min_width = $('.active-area').width();
  var content_width = $('#page').width(); //Здесь должна быть ширина вашего сайта (если верстка не резиновая).
  var window_width = $(window).width();
  var $bar_wrap = $('.leftbar-wrap');
  var $bar = $bar_wrap.find('.left-controlbar');
  var $scroll_back = $('#scroll-back');
  var prev_top = parseInt($scroll_back.attr('href').substr(1));
   
  if (window_width - content_width - (2 * control_min_width) > 0) {
    $bar.show();
     
    var bar_width = (window_width - content_width) / 2;
     
    $bar_wrap.css({width: bar_width});
     
    if (!prev_top) $scroll_back.hide();
     
    $bar.off('click').on('click', function(e) {
      e.preventDefault();
      prev_top = $(window).scrollTop();
      $('html, body').animate({scrollTop: 0}, 'normal', function() {
        $scroll_back.attr('href', '#' + prev_top).css({display: 'block', opacity: 0}).animate({opacity: 1}, 'fast');
      });
    });
  }
  else {
    $bar.hide();
  }
}


Алгоритм функции достаточно простой. После определения всех параметров, мы проверяем поместяться ли наши кнопки в область между левым краем окна браузера и контентом. Это необходимо для того, чтобы кнопки не налазили на содержимое сайта (функцию нужно вызывать каждый раз при изменении размеров окна браузера). Если размер области удовлетворяет условиям, то мы привязываем обработчик прокрутки к самой кнопке «Вверх».

 

Теперь нужно инициализировать кнопки, вызвав нашу функцию в момент, когда страница полностью загружена. Для этого воспользуемся функцией $(document).ready() из фреймворка jQuery.




$(document).ready(function() {
  var $scroll_back = $('#scroll-back');
  var $bar = $('.left-controlbar');
   
  var threshold = 300; //порог полной видимости кнопки при скроллинге
   
  $(window)
    /* функция, которая управляет видимостью кнопки "Вверх" в зависимости от положения полос прокрутки */
    .scroll(function() {
      var new_opacity = ($(window).scrollTop()       new_opacity ? $bar.show() : $bar.hide();
      $bar.css({opacity: new_opacity});
      var offset = parseInt($scroll_back.attr('href').substr(1));
      if (new_opacity) {
        $scroll_back.hide();
      }
      else {
        if (offset) $scroll_back.css({display: 'block', opacity: 0}).animate({opacity: 1}, 'fast');
      }
    })
    .scroll()
    /* связываем событие изменения размеров окна браузера и функцию инициализации кнопок */
    .resize(initSideControls)
    .resize();
   
  /* функция для возврата пользователя на место, с которого он поднялся вверх */
  $scroll_back.click(function(e) {
    e.preventDefault();
    $('html, body').animate({scrollTop: $(this).attr('href').substr(1)}, 'normal');
    $(this).attr('href', '#0').hide();
  });
});


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

 

Благодарю за внимание.

 

 

P.S. Статья взята со стороннего ресурса.

Share this post


Link to post

Так много кода для кнопки "Вверх" я еще не видел.

Там просто еще и функция возврата на то мест, с которого ты вернулся в начало.Только кода в html нету

Share this post


Link to post

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
Sign in to follow this  
×