Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Плавное отображение/скрытие блока
 
 автор: OLi   (19.03.2011 в 00:48)   письмо автору
 
 

Ребята, подскажите скрипт для плавного отображение скрытия блока div по нажатию на ссылку...

  Ответить  
 
 автор: Абырвалг   (19.03.2011 в 00:56)   письмо автору
 
   для: OLi   (19.03.2011 в 00:48)
 

Принцип см. здесь - уберите из скрипта всё, касающееся ширины (obj.style.width...) и установите для прозрачности (OPC) нужные Вам начальные и конечные значения.

  Ответить  
 
 автор: psychomc   (21.03.2011 в 12:05)   письмо автору
 
   для: Абырвалг   (19.03.2011 в 00:56)
 

интересный пример. но что если не известно значение ширины?

  Ответить  
 
 автор: Ирбис   (19.03.2011 в 08:12)   письмо автору
 
   для: OLi   (19.03.2011 в 00:48)
 

<html>
<head>
  <script type='text/javascript' src='jquery.js'></script>
  <script type='text/javascript'>
    $(document).ready(function() {
      $("A#trigger").toggle(function() {
        //Отображаем скрытый блок
        $("DIV#box").fadeIn();
        return false;
      }, 
      function() {
        //Прячем скрытый блок
        $("DIV#box").fadeOut();
        return false;
      });//end of toggle()
    });//end of ready()
  </script>
</head>
<body>
  <a href='#' id='trigger'>Ссылка</a>
  <div id='box' style='display: none;'>Блок</div>
</body>
</html>


Вам не обязательно владеть jQuery - можете просто взять скрипт и использовать его. Только не забудьте скачать и присоединить jQuery.
В данном примере предполагается, что блок у вас первоначально скрыт. Если он у вас первоначально показан, то поменяйте $("DIV#box").fadeIn(); и $("DIV#box").fadeOut(); местами.

  Ответить  
 
 автор: OLi   (19.03.2011 в 10:01)   письмо автору
 
   для: Ирбис   (19.03.2011 в 08:12)
 

А если несколько блоков по отдельности открывать тогда функцию повторять заново уже для другого id?

  Ответить  
 
 автор: Ирбис   (19.03.2011 в 10:23)   письмо автору
 
   для: OLi   (19.03.2011 в 10:01)
 

Лучше не повторять, а сделать например вот так:
<html>
<head>
  <style type='text/css'>
    DIV.box {
      display: none;
    }
    A.trigger {
      display: block;
    }
  </style>
  <script type='text/javascript' src='jquery.js'></script>
  <script type='text/javascript'>
    $(document).ready(function() {
      $("A.trigger").toggle(function() {
        //Отображаем скрытый блок
        $(this).next().fadeIn();
        return false;
      },
      function() {
        //Прячем скрытый блок
        $(this).next().fadeOut();
        return false;
      });//end of toggle()
    });//end of ready()
  </script>
</head>
<body>
  <a href='#' class='trigger'>Ссылка 1</a>
  <div class='box'>Блок 1</div>
  <a href='#' class='trigger'>Ссылка 2</a>
  <div class='box'>Блок 2</div>
  <a href='#' class='trigger'>Ссылка 3</a>
  <div class='box'>Блок 3</div>
</body>
</html>


В данном примере важно, чтобы блок следовал сразу за ссылкой, т.е. чтобы между ними не было других тегов и чтобы блок и ссылка были родственными элементами. При этом класс блоку (box) нужен только для применения стилей к блоку, JS в данном случаи класс не важен.
Если такое условие не устраивает, то приведите свой HTML код, чтобы было понятно как следует действовать в вашем конкретном случаи.

  Ответить  
 
 автор: Ирбис   (19.03.2011 в 10:59)   письмо автору
 
   для: Ирбис   (19.03.2011 в 10:23)
 

Одно уточнение: поисковики скорее всего не проиндексируют контент, содержащийся в блоках со свойством display: none; Поэтому лучше подкорректировать скрипт так:

<style type='text/css'>
   /*Убираем свойство display:none;*/ 
   DIV.box {
       
    }
    A.trigger {
      display: block;
    }
  </style>
  <script type='text/javascript' src='jquery.js'></script>
  <script type='text/javascript'>
    $(document).ready(function() { 
      //Скрываем блоки после загрузки страницы
      $("DIV.box").hide();
      .........

  Ответить  
 
 автор: OLi   (19.03.2011 в 12:43)   письмо автору
 
   для: Ирбис   (19.03.2011 в 10:59)
 

Есть 5 ссылок друг под другом под каждой из которых скрытый блок div, который должен отобразиться при клику на соответствующую ссылку
<a href="#" id="trigger" class="mn">Офисы/Филиалы/Торговые точки</a>

<div></div>

<a href="#" id="trigger" class="mn">Офисы/Филиалы/Торговые точки</a>

<div></div>

И так же надо по отдельному клику на каждую скрыть блок
А для ссылки Отобразить все - раскрыть все блоки..
Вот что необходимо..

  Ответить  
 
 автор: Ирбис   (19.03.2011 в 13:25)   письмо автору
 
   для: OLi   (19.03.2011 в 12:43)
 

<html>
<head>
  <style type='text/css'>
    A.mn {
      display: block;
    }
  </style>
  <script type='text/javascript' src='jquery.js'></script>
  <script type='text/javascript'>
    $(document).ready(function() {
      //После загрузки страницы прячем все блоки
      $("DIV.box").hide();
      $("A.mn").click(function() {
        //Если блок скрыт - отобразим его
        if($(this).next().css("display") == "none") {
          $(this).next().fadeIn();
        }
        //Если блок отображен - скроем его
        else {
          $(this).next().fadeOut();
        }
      });//end of click()
      //По клику на ссылке "Отобразить все" разворачиваем все блоки
      $("A.showAll").click(function() {
        $("DIV.box").fadeIn();
      });//end of click()
    });//end of ready()
  </script>
</head>
<body>
  <a href='#' class='showAll'>Отобразить все</a>
  <br>
  <br>
  <a href='#' class='mn'>Ссылка 1</a>
  <div class='box'>Блок 1</div>
  <a href='#' class='mn'>Ссылка 2</a>
  <div class='box'>Блок 2</div>
  <a href='#' class='mn'>Ссылка 3</a>
  <div class='box'>Блок 3</div>
</body>
</html>

  Ответить  
 
 автор: OLi   (19.03.2011 в 15:36)   письмо автору
 
   для: Ирбис   (19.03.2011 в 13:25)
 

ооо супер..Благодарчик...Правда кнопка Отобразить все не срабатывает

  Ответить  
 
 автор: OLi   (19.03.2011 в 16:20)   письмо автору
 
   для: OLi   (19.03.2011 в 15:36)
 

Еще вопрос к спецам как по клику на отображение блока - перевести пользователя на него типа якоря

  Ответить  
 
 автор: Ирбис   (19.03.2011 в 16:29)   письмо автору
 
   для: OLi   (19.03.2011 в 15:36)
 

Вот полностью работающий пример:
http://irbis09.jino.ru/test/
Посмотрите его исходный код, сравните со своим.

  Ответить  
 
 автор: OLi   (19.03.2011 в 17:52)   письмо автору
 
   для: Ирбис   (19.03.2011 в 16:29)
 

Странно вроде все тоже самое:

  Ответить  
 
 автор: Ирбис   (20.03.2011 в 01:21)   письмо автору
 
   для: OLi   (19.03.2011 в 17:52)
 

Внимательно проверьте имена всех классов в HTML и JavaScript коде

  Ответить  
 
 автор: OLi   (20.03.2011 в 19:26)   письмо автору
 
   для: Ирбис   (20.03.2011 в 01:21)
 

Приведу код:
<a href="#" id="open_all" class="showAll">Открыть все</a>

<script type="text/javascript">
    $(document).ready(function() {
      //После загрузки страницы прячем все блоки
      $("div.box").hide();
      $("A.mn").click(function() {
        //Если блок скрыт - отобразим его
        if($(this).next().css("display") == "none") {
          $(this).next().fadeIn();
        }
        //Если блок отображен - скроем его
        else {
          $(this).next().fadeOut();
        }
      });//end of click()
      //По клику на ссылке "Отобразить все" разворачиваем все блоки
      $("A.showAll").click(function() {
        $("div.box").fadeIn();
      });//end of click()
    });//end of ready()
  </script>



И вот таких блоков куча:


<div id="box" style="display: none;">
     <form action="#" method="post" enctype="multipart/form-data">
     <div><label>Форма собственности</label><select>
     <option value="1">ООО</option>
    
     <option value="14">Добавить</option>
     
     
     </select>
    </div>
     
      <div><label>Название фирмы</label><input type="name_f" id="name_f_a" /></div>
      <div><label>Логотип фирмы</label><input type="file" value="Загрузить" /><br /><span>Дождитесь появления фото на странице, иначе не загрузится!</span></div>
      <div><label>О предприятии</label><textarea name="about_f"></textarea><br /><span>Информация о Вашем предприятии: Дата создания, периоды развития, коллектив, партеры, клиенты, лицензии, дипломы и награды…
(Контактную информацию не указывайте – заполняется ниже)
</span></div>
<p><b style="color:#FF0000; font-weight:bold">*</b> В случаи не заполнение данного раздела сейчас – это можно будет сделать позже воспользовавшись вызовом нашего представителя Редактировать </p>
     </form>
     
     </div>

Вроде везде все совпадает по именам классов...не знаю в чем проблема...

  Ответить  
 
 автор: Ирбис   (21.03.2011 в 11:10)   письмо автору
 
   для: OLi   (20.03.2011 в 19:26)
 

Проблема в том, что у вас в HTML-коде блоки, которые необходимо скрыть/отобразить имеют идентификаторы box:
<div id='box'></div>

А JS код пытается работать с классами box:
//По клику на ссылке "Отобразить все" разворачиваем все блоки
$("A.showAll").click(function() {
  $("div.box").fadeIn();
});//end of click() 

Вот этот фрагмент $("div.box") извлекает все блоки DIV с классом box. Но поскольку таких на вашей странице нет, то ничего и не работает.

Измените все id='box' на class='box' и JS код заработает.
Также следует учитывать, что идентификаторы должны быть уникальными на странице, т.е. на странице не должно быть 2-х и более тегов с одним и тем же идентификатором.

Если у вас часто возникают такие задачи как выбор элементов на странице, изменение свойств элементов, скрытие/отображение/перемещение элементов, то я вам горячо рекомендую освоить jQuery. С помощью неё эти задачи решаются на раз-два.

  Ответить  
 
 автор: OLi   (21.03.2011 в 20:11)   письмо автору
 
   для: Ирбис   (21.03.2011 в 11:10)
 

Спасибо, все заработало....еще один вопрос, как изменить текст на СКРЫТЬ все после того как нажали ОТКРЫТЬ ВСЕ? чтоб повторно по клику уже блоки все сворачивались?!

  Ответить  
 
 автор: Ирбис   (22.03.2011 в 09:31)   письмо автору
 
   для: OLi   (21.03.2011 в 20:11)
 

Вот этот участок:
//По клику на ссылке "Отобразить все" разворачиваем все блоки
$("A.showAll").click(function() {
  $("div.box").fadeIn();
});//end of click() 

Замените на это:
//По клику на ссылке отображаем либо скрываем блоки
$("A.showAll").toggle(function() {
  $("div.box").fadeIn();
  $(this).html("Скрыть все");
},
function() {
  $("div.box").fadeOut();
  $(this).html("Отобразить все");
});//end of toggle()

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования