• Страница 1 из 1
  • 1
"Швартовка" элементов с помощью jQuery

серегаДата: Воскресенье, 20.06.2010, 15:20:36 | Сообщение # 1
Генералиссимус
Сообщений: 1544
Награды: 1
Репутация: 2

пример
В данном уроке пойдет речь о том, как с помощью jQuery сделать интересный эффект "швартовки" (docking).

Что надо сделать:

1. Когда пользователь наводит на элемент меню, сабменю должно появиться слева направо и наложиться на содержание страницы.
2. Когда пользователь убирает мышку с панели, сабменю должно заехать обратно.
3. Если пользователь нажимает на "Закрепить", панель должна зафиксироваться в текущем положении и содержание страницы должно сместиться вправо.
4. Если пользователь наживает "Убрать", панель заезжает обратно.

Но это еще не все. Я хотел сделать возможность закрепления (швартовки) нескольких панелей одновременно. Если только 1 панель закреплена - она занимает 100% высоты, если будут закреплены еще панели, тогда высота будет делится на кол-во панелей. Кроме всего этого, если одна панель уже закреплена и пользователь наводит на другой элемент, сабменю выводится поверх закрепленной панели.

Ниже представлен HTML код:

Code
<ul id="dock">     
<li id="links">     
<ul class="free">     
<li class="header">     
<a href="#" class="dock">Dock</a>     
<a href="#" class="undock">Undock</a>Links     
</li>     
<li><a href="#">This is one item</a></li>     
<li><a href="#">This is one item</a></li>     
      <li><a href="#">This is one item</a></li>     
      <li><a href="#">This is one item</a></li>     
      <li><a href="#">This is one item</a></li>     
      </ul>     
      </li>     
      <li id="files">     
      <ul class="free">     
      <li class="header">     
      <a href="#" class="dock">Dock</a>     
      <a href="#" class="undock">Undock</a>Files     
      </li>     
      <li><a href="#">This is one item</a></li>     
      <li><a href="#">This is one item</a></li>     
      <li><a href="#">This is one item</a></li>     
      <li><a href="#">This is one item</a></li>     
      <li><a href="#">This is one item</a></li>     
      </ul>     
      </li>     
      <!-- more submenus here -->     
      </ul>     
      <div id="content">     
      <!-- content here -->     
      </div>

Далее все это оформляем с помощью CSS:

Code
<style type="text/css">     
body{margin:0px; font-family:Arial, Sans-Serif; font-size:13px;}     
/* dock */     
#dock{margin:0px; padding:0px; list-style:none; position:fixed; top:0px; height:100%;      
z-index:100; background-color:#f0f0f0; left:0px;}     
#dock > li {width:40px; height:120px; margin: 0 0 1px 0; background-color:#dcdcdc;     
background-repeat:no-repeat; background-position:left center;}     

#dock #links {background-image:url(links.png);}     
#dock #files {background-image:url(files.png);}     
#dock #tools {background-image:url(tools.png);}     
#dock > li:hover {background-position:-40px 0px;}     
           
      /* panels */     
      #dock ul li {padding:5px; border: solid 1px #F1F1F1;}     
      #dock ul li:hover {background:#D3DAED url(item_bkg.png) repeat-x; border: solid 1px #A8D8EB;}     
      #dock ul li.header, #dock ul li .header:hover {background:#D3DAED url(header_bkg.png) repeat-x;border: solid 1px #F1F1F1;}     
           
      #dock > li:hover ul {display:block;}     
      #dock > li ul {position:absolute; top:0px; left:-180px; z-index:-1;width:180px; display:none;     
      background-color:#F1F1F1; border:solid 1px #969696; padding:0px; margin:0px; list-style:none;}     
      #dock > li ul.docked { display:block;z-index:-2;}     
           
      .dock,.undock{float:right;}     
      .undock {display:none;}     
      #content {margin: 10px 0 0 60px;}     
           
      </style>

И конечно же, не забываем про jQuery. Код ниже необходимо поместить между тегами :
Code
<script type="text/javascript" src="jquery-1.2.6.min.js"></script>     
      <script type="text/javascript">     
      $(document).ready(function(){     
      var docked = 0;     
           
      $("#dock li ul").height($(window).height());     
           
      $("#dock .dock").click(function(){     
      $(this).parent().parent().addClass("docked").removeClass("free");     
           
      docked += 1;     
      var dockH = ($(window).height()) / docked     
      var dockT = 0;      
           
      $("#dock li ul.docked").each(function(){     
      $(this).height(dockH).css("top", dockT + "px");     
      dockT += dockH;     
      });     
      $(this).parent().find(".undock").show();     
      $(this).hide();     
           
      if (docked > 0)     
      $("#content").css("margin-left","250px");     
      else     
      $("#content").css("margin-left", "60px");     
      });     
           
      $("#dock .undock").click(function(){     

      $(this).parent().parent().addClass("free").removeClass("docked")     
      .animate({left:"-180px"}, 200).height($(window).height()).css("top", "0px");     
           
      docked = docked - 1;     
      var dockH = ($(window).height()) / docked     
      var dockT = 0;      
           
      $("#dock li ul.docked").each(function(){     
      $(this).height(dockH).css("top", dockT + "px");     
      dockT += dockH;     
      });     
      $(this).parent().find(".dock").show();     
      $(this).hide();     
           
      if (docked > 0)     
      $("#content").css("margin-left", "250px");     
      else     
      $("#content").css("margin-left", "60px");     
      });     
      $("#dock li").hover(function(){     
      $(this).find("ul").animate({left:"40px"}, 200);     
      }, function(){     
      $(this).find("ul.free").animate({left:"-180px"}, 200);     
      });     
      });      
      </script>

Полученный результат мне очень нравится. Можно много разного придумать на основе этого скрипта.

Понравился урок Вам? Ждем Ваших комментариев! Спасибо за внимание.

Источник: ruseller.com



Делаю сервера и настраиваю их: WoW CS Mu online не дорого isq 499846784

< >
  • Страница 1 из 1
  • 1
Поиск: