820 Other

"Расширитель" кода


На сайтах которые по своей специфике нуждаются в предоставлении в статьях или сообщениях исходного кода какого-либо языка программирования, в частности, как например, и наш сайт, остро встает необходимость в более экономном использовании пространства веб-страницы. То есть размещенный на странице слишком длинный код вынуждает посетителя, которому в данный момент его содержание не важно, прокручивать довольно долго страницу вниз, так сказать к самой "соли". Можно конечно  разбивать код на несколько кусочков, но анализировать такой код не очень удобно и пространство все равно меньше не становится. Использование полос прокрутки в коде тоже довольно спорное решение, так как весь код не видно одновременно.
Так вот в этом уроке пойдет речь о создании "экспандера" (расширителя) кода на jQuery. Просто наведите на область с приведенным кодом и произойдет его раскрытие.
Но прежде чем что-то раскрыть, нужно сначала это что-то ужать.

HTML

HTML очень прост, нужно лишь указать класс jcexpander для тега pre, и заключить код в теги code:

<pre class="jcexpander"><code>
   <!-- Тут помещается отображаемый код -->
</code></pre>

CSS

Вот основной стиль

pre.jcexpander { 
     width:80%; 
     height:400px; 
     overflow:hidden; 
     background-color:#eee; 
     background-image:url("../images/code_bg.png"); 
     background-repeat:repeat-x; 
     padding:10px; 
     border:5px solid #bfe1f1;
    -moz-box-shadow: 5px 5px 10px #050505; 
    -webkit-box-shadow: 5px 5px 10px #050505; 
    }
Как видим мы с помощью свойств CSS обрезаем видимую область с кодом.

JS

Подключаем jQuery библиотеку:

<script type="text/jаvascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
И файл script.js со скриптом экспандера:
$(document).ready(function() {
  // Циклично будем выполнять каждый <pre> элемент
  // с классом "jcexpander"
  $("pre.jcexpander").each(function() {
    // Выполнять только тогда, когда внутренний элемент (элемент <code>)
    // больше чем родитель (элемент <pre>)
    if ($("code", this).height() > $(this).height() || $("code", this).width() > $(this).width()) {
      // Будем нуждаться в сохранении оригинальных значений размеров
      // чтобы могли к ним вернуться в последствии
      $(this).data('originalHeight', $(this).height());
      $(this).data('originalWidth', $(this).width()); // Создать изображение IMG накладываемое поверх кода
      var icon = document.createElement("img");
      $(icon).css({
        'position': 'absolute'
      });
      $(icon).attr("src", "images/fullscreen.png"); // Добавляет изображение к элементу <pre>
      $(icon).prependTo($(this)); // При наведении на элемент <pre>, будет происходить следующее:
      // первая функция "over", вторая - "out"
      $(this).hover(function() {
        // Постепенное скрытие изображения
        $(icon).fadeOut(); // Считываем размеры элемента <code>
        var codeWidth = $("code", this).width();
        var codeHeight = $("code", this).height(); // Размер <pre> элемента будет таким же большим как
        // и элемента <code>
        $(this).stop().animate({
          width: codeWidth + "px",
          height: codeHeight + "px"
        }, 1500);
      }, function() {
        // Постепенное появление изображения
        $(icon).fadeIn(); // Возвращаем размеры <pre> элемента
        // к первоначальному значению
        $(this).stop().animate({
          width: $(this).data('originalWidth') + "px",
          height: $(this).data('originalHeight') + "px"
        }, 1500);
      });
    }
  });
});
Скачать 261Загрузок 8,81 Kb
Демо

Комментарии

  • Facebook
  • Вконтакте

Похожие статьи