Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.07.2017, 22:21
Аспирант
Отправить личное сообщение для LLIypuk Посмотреть профиль Найти все сообщения от LLIypuk
 
Регистрация: 23.07.2015
Сообщений: 48

Изменение свойства z-index.
Всем привет. Есть код.
$(document).ready(function () {
	$('#mobile-one').on('click', function (e) {
		e.preventDefault();
		$('#mobile-block-one').fadeToggle(500).css("display", "block");
	});
});

Из кода ясно что клик по блоку <div id="mobile"></div> открывает скрытый блок <div id="mobile-block"></div> и при повторном нажатии скрывает его.

Однако задача достаточно специфичная. Таких блоков несколько. То-есть несколько кнопок для открытия блоков и самих блоков несколько (пускай у них будут id mobile-block-one и mobile block-two).

Эти блоки по верстке наложены друг на друга и если их открыть одновременно, то первый блок всегда будет скрыт вторым блоком.

Однако если у первого блока поставить z-index: 1; тогда уже первый блок всегда будет наложен на второй блок.

Вопрос: Как менять значение z-index, чтобы открываемый блок всегда имел значение z-index больше чем у уже открытого блока и как это реализовать через jQuery ???

PS: В качестве варианта предполагаю только такой вариант измениея я z-index (открыть, закрыть блок) (1, 0, 3, 2, 6, 5, 10, 9, 15, 14, 21, 20).
Ответить с цитированием
  #2 (permalink)  
Старый 26.07.2017, 22:56
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 498

Примерно как-то так:
$('.mobile-blocks').not('#mobile-block-one').each(function(){
  $(this).css('z-index', $(this).css('z-index') - 1);
});
$('#mobile-block-one').css('z-index', 10);

Можно засунуть в параметр start если версия jquery не ниже 1.8 - http://api.jquery.com/fadetoggle/

ADD: а, добавить в начале проверку на display:none или opacity:0, чтобы работало только когда блок начинает показываться, а не скрываться.

Последний раз редактировалось Белый шум, 26.07.2017 в 23:07.
Ответить с цитированием
  #3 (permalink)  
Старый 26.07.2017, 22:56
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

var i=0, el = $('el'); 
el.click(function(){ 
el.each(function(){ 
var s = $(this).css("zIndex"); 
if (s>i) i=s; 
}); 
$(this).css("zIndex", i++); 
});

максимальный z-index ;
Ответить с цитированием
  #4 (permalink)  
Старый 27.07.2017, 10:31
Аспирант
Отправить личное сообщение для LLIypuk Посмотреть профиль Найти все сообщения от LLIypuk
 
Регистрация: 23.07.2015
Сообщений: 48

Спасибо всем за ответы. В итоге сделал вот такой код.
$(document).ready(function () {
	$('#mobile-one').on('click', function (e) {
		$('#mobile-block-one').not('#mobile-one').each(function(){
			$(this).css('z-index', $(this).css('z-index') - 1);
		});
	});
});

А также в CSS добавил
#mobile-block-one{z-index:10;}

Вообщем предыдущие варианты не сработали, но благодаря им сделал вышеописанный код.
Итого изначальный параметр блока z-index:10; и при клике на блоке <div id="mobile-one">меню</div> z-index постоянно уменьшается на 1. (однако если поставить $(this).css('z-index') + 1, тогда z-index будет увеличиваться в 10 раз, то-есть 1, 11, 111, 1111 и т.д., что странно).

Далее буду думать, как изменить вышеописанный код так, чтобы при первом клике на <div id="mobile-one">меню</div>
z-index у блока <div id="mobile-block-one">меню</div> увеличивался на указанное значение (например на 3).
При втором нажатии уменьшался (например на 2), при третьем снова увеличивался и т.д.
Ответить с цитированием
  #5 (permalink)  
Старый 27.07.2017, 10:41
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 498

эээ, вы ничего не поняли. Мой код подразумевал, что у всех блоков есть класс "mobile-blocks". В этом случае этот код уменьшит им всем (кроме блока c id="mobile-block-one") z-index на 1
Ответить с цитированием
  #6 (permalink)  
Старый 27.07.2017, 11:24
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Сообщение от LLIypuk
(однако если поставить $(this).css('z-index') + 1, тогда z-index будет увеличиваться в 10 раз, то-есть 1, 11, 111, 1111 и т.д., что странно).

<style>
#mobile-block-one {
     position: relative;
     z-index:10;
}
</style>
<div id="mobile-block-one">A<div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
$('#mobile-block-one').on('click', function (e) {
   $(this).css('z-index', +$(this).css('z-index') + 1);
   alert($(this).css('z-index'));
});
</script>
Ответить с цитированием
  #7 (permalink)  
Старый 27.07.2017, 12:02
Аспирант
Отправить личное сообщение для LLIypuk Посмотреть профиль Найти все сообщения от LLIypuk
 
Регистрация: 23.07.2015
Сообщений: 48

Белый шум. Да извиняюсь. Сам вопрос по теме не совсем корректно звучал, так как сам запутался.
Сейчас код такой:
$(document).ready(function () {
	$('#mobile-one').on('click', function (e) {
		$('#mobile-block-one').not('#mobile-one').each(function(){
			$(this).css('z-index', +$(this).css('z-index') + 3);
			$(this).css('z-index', $(this).css('z-index') - 1);
		});
	});
});

Собственно таким образом z-index изменяется на 2.
Осталось сделать так, чтобы
$(this).css('z-index', +$(this).css('z-index') + 3);
и
$(this).css('z-index', $(this).css('z-index') - 1);
запускались не вместе, а друг за другом поочередно при каждом клике на <div id="mobile-one">меню</div>

То-есть сначала при клике <div id="mobile-one">меню</div> запускается $(this).css('z-index', +$(this).css('z-index') + 3);
Потом при следующем клике на <div id="mobile-one">меню</div> запускался $(this).css('z-index', $(this).css('z-index') - 1);
Далее снова при клике запускался $(this).css('z-index', +$(this).css('z-index') + 3);
и т.д

Последний раз редактировалось LLIypuk, 27.07.2017 в 12:05.
Ответить с цитированием
  #8 (permalink)  
Старый 28.07.2017, 16:22
Аспирант
Отправить личное сообщение для LLIypuk Посмотреть профиль Найти все сообщения от LLIypuk
 
Регистрация: 23.07.2015
Сообщений: 48

Попробовал другие варианты решить задачу окончательно и... что-то не получается.
Попробовал сделать вот так:

jQuery(document).ready(function($){
	$('#mobile-one').on('click',function(){
		if($('#mobile-block-one').attr('data-click-state') == 1) {
			$('#mobile-block-one').attr('data-click-state', 0)
			$('#mobile-block-one').css('z-index', +$(this).css('z-index') + 1)
		} else {
			$('#mobile-block-one').attr('data-click-state', 1)
			$('#mobile-block-one').css('z-index', $(this).css('z-index') - 3)
		}
	});
});


Однако вот такой код работает, но не совсем так, как нужно.
jQuery(document).ready(function($){
	$('#mobile-one').on('click',function(){
		if($('#mobile-block-one').attr('data-click-state') == 1) {
			$('#mobile-block-one').attr('data-click-state', 0)
			$('#mobile-block-one').css('z-index', 1')
		} else {
			$('#mobile-block-one').attr('data-click-state', 1)
			$('#mobile-block-one').css('z-index', 4')
		}
	});
});

Такой код просто меняет значение z-index с 4 на 1 на 4 и т.д.
А задача в том, чтобы код не принимал определенное значение (например z-index: 4), а к существующему z-index прибавлял или отнимал значение свойства. То-есть к z-index: -3; прибавляет 5 (получается z-index: 2). Далее отнимает 2 (получается z-index: 0) и снова прибавляет 5 (получается z-index: 5) и т.д.
Заранее благодарю за ответ.
Ответить с цитированием
  #9 (permalink)  
Старый 28.07.2017, 16:29
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 498

Создайте исходный шаблон на https://jsfiddle.net/ - дайте на него ссылку и опишите внятно задачу.
Ответить с цитированием
  #10 (permalink)  
Старый 28.07.2017, 17:33
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

<style>
#mobile-block-one {
     position: relative;
     z-index:10;
}
</style>
<div id="mobile-one">
   <div id="mobile-block-one">A<div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
jQuery(document).ready(function($){
   $('#mobile-one').on('click',function(){
          var el = $('#mobile-block-one');
          if(el.attr('data-click-state') == 1) {
             el.attr('data-click-state', 0)
             el.css('z-index', +el.css('z-index') + 1)
          } else {
             el.attr('data-click-state', 1)
             el.css('z-index', +el.css('z-index') - 3)
          }
	});
});
</script>

Последний раз редактировалось Dilettante_Pro, 28.07.2017 в 17:35.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реагирование на изменение свойства Vue.js-объекта ULTIMITE Библиотеки/Тулкиты/Фреймворки 2 10.05.2017 06:33
Подскажите как лучше положить .xml документ в базу Гробовщик Серверные языки и технологии 4 02.09.2013 11:15
Изменение свойства класса Upcoming Events/DOM/Window 3 15.07.2013 18:10
Изменение css свойства Rumis jQuery 2 21.05.2013 11:55
Изменение свойства CSS Squirr Events/DOM/Window 30 12.07.2012 22:51