При повороте экрана на моб. устройстве выполнить действие - jQuery

Staid
На сайте с 30.07.2014
Offline
59
3183

Доброго времени суток. Есть примитивный код, который по клику на заголовок раскрывает следующий за ним блок:

$( window ).resize(function() {


var width = $(document).width();

if(width < 650){

$(".title").click(function(){
$(this).next().show();
});

}

});

Этот код работает на планшетах при вертикальной ориентации экрана. Проблема в том, что раскрытие блока происходит столько раз, сколько было поворотов экрана.

Как добиться того, чтоб код исполнялся один раз?

JT
На сайте с 05.05.2016
Offline
1
#1

Навскидку, можно поставить условие, показан ли title.next().

Или удалить обработчик после выполнения. Лень думать еще варианты...

Staid
На сайте с 30.07.2014
Offline
59
#2

Может есть другой способ отследить смену ориентации экрана?

Есть аналог метода .resize() ?

edka
На сайте с 17.01.2010
Offline
208
#3

Может проверять еще дополнительно внутри функции $( window ).resize(function()

Соотношение ширины и высоты и если они изменились выполнять действие?

ДП
На сайте с 23.11.2009
Offline
203
#4


if(width < 650){

$(".title").click(function(){
$(this).next().show();
});

} else{
$(".title").off('click');
}

это если нет других обработчиков клика.

Т.е. перед тем как навесить обработчик - снимаете остальные, чтобы несколько не висело. Ну или можно через .data() что-нибудь элементу назначать, чтобы знать, что обработчик уже висит и второй раз не надо.

dkameleon
На сайте с 09.12.2005
Offline
386
#5
Staid:
var width = $(document).width();
if(width < 650){

это вы так ориентацию экрана проверяете? :))

Staid:
Проблема в том, что раскрытие блока происходит столько раз, сколько было поворотов экрана.

естественно.

вы же при каждом повороте экрана цепляете ивент.

ориентацию проверять стилями:


.title + * { display: none; }
@media all and (orientation: portrait) {
.title + *.show { display: block; }
}

ивент цеплять единожды:

$(function() {
$(".title").on('click', function(){
$(this).next().addClass('show');
});
});
Дизайн интерьера (http://balabukha.com/)
Staid
На сайте с 30.07.2014
Offline
59
#6
dkameleon:
это вы так ориентацию экрана проверяете? )

Мне важно было объяснить в теме суть вопроса. Т.е. при смене ориентации экрана меняется его ширина, а в этом диапазоне требуется отрабатывать скрипт.

Благодарю за помощь!

dkameleon
На сайте с 09.12.2005
Offline
386
#7
Staid:
а в этом диапазоне требуется отрабатывать скрипт.

если важен пиксельный диапазон - его тоже можно в ЦСС прописать.

Staid:
Т.е. при смене ориентации экрана меняется его ширина

ширина так же меняется у десктопных браузеров.

не дай бог кто-то решит поресайзить окно :)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий