Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Смена z-index у элемента при нажатии на другой элемент
Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » Смена z-index у элемента при нажатии на другой элемент

Страниц (1): [1]
 

1. Vinyl - 22 Января, 2015 - 19:04:00 - перейти к сообщению
Доброго времени, друзья. Есть задача, на поиск решения которой пошли уже вторые сутки, т.к. JS не знаю совершенно.

На странице будет n-ное количество небольших слайдеров, меняющих размер в зависимости от родителя. Страница на Twitter Bootstrap 3. Ни один из мне известных слайдеров не подойдет, т.к. страница отзывчивая, и div для слайдера постоянно меняет свой размер, а насколько мне известно, все слайдеры работают только с постоянной шириной либо высотой родителя (прячут через overflow: hidden; все картинки, кроме одной, потом сдвигают).

Мне же нужно выстроить их одна за другой, абсолютно позиционировав, а потом менять им z-index.

Есть вот такой html/css:
CODE (html):
скопировать код в буфер обмена
  1. <style>
  2.         #items .hold{
  3.                 visibility: hidden;
  4.                 position: relative;
  5.                 top: 0;
  6.                 left: 0;
  7.         }
  8.        
  9.         #items .display {
  10.                 position: absolute;
  11.                 top: 0;
  12.                 left: 0;
  13.                 z-index: 100;
  14.         }
  15.        
  16.         #prev, #next {
  17.                 z-index: 102;
  18.                 position: relative;
  19.         }
  20. </style>
  21.  
  22. <div id="carousel">
  23.         <span id="prev">prev</span>
  24.         <span id="next">next</span>
  25.  
  26.         <div id="items">
  27.                 <img src="/img-001.jpg" class="img-responsive hold">
  28.                
  29.                 <img src="/img-001.jpg" class="img-responsive display" id="rowScroll">
  30.                 <img src="/img-002.jpg" class="img-responsive display" id="rowScroll">
  31.                 <img src="/img-003.jpg" class="img-responsive display" id="rowScroll">
  32.         </div>
  33. </div>


img.hold (стр. 27) нужен для того, чтобы высота div#carousel была равна высоте картинок (они одинакового размера), т.к. сами картинки img.display абсолютно позиционированы, соответственно, они сами с задачей не справятся. Т.к. и img.hold и img.display у нас img-responsive, эталонная img.hold будет растягивать нам нашего родителя до размеров img.display. Это уже работает (пусть и через ж..пу), т.к. я в инструментах разработчика руками меняю img.display по очереди z-index и происходит то, что должно происходить по нажатию кнопочек.

Я вижу два алгоритма:


1)
1. По нажатию #next проверяем, существует ли объект $current. Если нет, переходим к п. 2, если есть - к п. 4
2. У родителя ищем первого потомка с #rowScroll
3. Присваиваем объекту $current то, что нашли
4. Устанавливаем объекту $current z-index: 100;
5. Переходим к следующему элементу в дереве, ставим ему z-index: 101;
6. Присваиваем объекту $current найденный в п. 5 элемент

С #prev то же самое, только нужно будет искать предыдущий элемент. И я не в курсе, сможет ли при таком алгоритме браузер хранить объект $current, т.к. я совершенно не работал с JS. Думаю, что может, но если нет, то такой вариант не подходит.


2)
Все то же самое, только у родителя в потомках искать не элементы с #rowScroll (п. 2), а элементы с z-index:101. Естественно, первому img.display нужно будет выставить z-index:101 при любом варианте, но это не проблема.

Как мне кажется, здесь 10-20 строк на jQuery. Фреймворк не принципиален. Помогите, великие знатоки JS, иначе я сойду с ума В затруднении

Спасибо!
2. armancho7777777 - 23 Января, 2015 - 15:39:06 - перейти к сообщению
Нужен респонзивный слайдер ?
http://responsiveslides[dot]com

Или на выбор:
http://designscrazed[dot]org/free-re[dot][dot][dot]y-image-sliders/
3. Vinyl - 23 Января, 2015 - 17:34:25 - перейти к сообщению
armancho7777777 пишет:
Нужен респонзивный слайдер ?
http://responsiveslides[dot]com


Сейчас попробую, спасиб.

armancho7777777 пишет:
Или на выбор:
http://designscrazed[dot]org/free-re[dot][dot][dot]y-image-sliders/


Я отсюда несколько штук попробовал, они отказываются работать по нескольку штук на странице, а т.к. я в JS нуль нулевой, допилить не могу.
4. armancho7777777 - 23 Января, 2015 - 17:46:00 - перейти к сообщению
Отпишись. Если не сработает не один по нескольку штук на странице, поправлю.
Желательно из первой ссылки.
Он, вроде, ничего такой.
Он должен отработать.
5. Vinyl - 23 Января, 2015 - 18:27:36 - перейти к сообщению
armancho7777777, ОНО РАБОТАЕТ!!! Рот до ушей Ура! Прыгаю до потолка Ура! Пляшу от радости

Спасибо тебе огромнейшее, шикарный слайдер!
6. armancho7777777 - 23 Января, 2015 - 19:21:13 - перейти к сообщению
Да не за что )

Варианты с переключалками если не нашёл:
http://responsiveslides[dot]com/themes/themes[dot]html
7. Vinyl - 23 Января, 2015 - 19:49:06 - перейти к сообщению
А я не искал. Там в параметрах было

CODE (javascript):
скопировать код в буфер обмена
  1. prevText: "Previous",   // String: Text for the "previous" button
  2. nextText: "Next",       // String: Text for the "next" button


А вообще, зачетный слайдер. Минимум всего, очень круто. Я давно такой искал. Nivo часто пользовался, но этот мне больше по душе. Спасибо ещё раз! Здорово
8. armancho7777777 - 23 Января, 2015 - 19:50:02 - перейти к сообщению
Не за что ) Он был в том же списке )

 

Powered by ExBB FM 1.0 RC1