26.07.2017, 22:21
|
Аспирант
|
|
Регистрация: 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).
|
|
26.07.2017, 22:56
|
|
Профессор
|
|
Регистрация: 19.01.2012
Сообщений: 505
|
|
Примерно как-то так:
$('.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.
|
|
26.07.2017, 22:56
|
|
Профессор
|
|
Регистрация: 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 ;
|
|
27.07.2017, 10:31
|
Аспирант
|
|
Регистрация: 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), при третьем снова увеличивался и т.д.
|
|
27.07.2017, 10:41
|
|
Профессор
|
|
Регистрация: 19.01.2012
Сообщений: 505
|
|
эээ, вы ничего не поняли. Мой код подразумевал, что у всех блоков есть класс "mobile-blocks". В этом случае этот код уменьшит им всем (кроме блока c id="mobile-block-one") z-index на 1
|
|
27.07.2017, 11:24
|
Профессор
|
|
Регистрация: 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>
|
|
27.07.2017, 12:02
|
Аспирант
|
|
Регистрация: 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.
|
|
28.07.2017, 16:22
|
Аспирант
|
|
Регистрация: 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) и т.д.
Заранее благодарю за ответ.
|
|
28.07.2017, 16:29
|
|
Профессор
|
|
Регистрация: 19.01.2012
Сообщений: 505
|
|
Создайте исходный шаблон на https://jsfiddle.net/ - дайте на него ссылку и опишите внятно задачу.
|
|
28.07.2017, 17:33
|
Профессор
|
|
Регистрация: 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.
|
|
|
|