2015-03-02 3 views
1

Я не уверен, как достичь вышеуказанного, плохо попробуйте объяснить ниже.Выполнять функцию только один раз, когда выполняется определенное условие, но выполняется остальное другое условие.

у меня есть, если другое заявление

resizeDiv = function() {  
if (vpw < 600) { 
//do something 1 
} 
else 
{ 
//do something 2 
} 
}; 
$(document).ready(resizeDiv); 
$(window).bind('resize', resizeDiv); 

Как вы можете видеть из сказанного выше я эту оценку, чтобы изменить размер и загрузки моей страницы, моя проблема в том, что они вызывают каждый раз, когда я изменить размер страницы (whis является правильно из приведенного выше кода.

, что мне нужно, так это позволяет сказать, что VPW является < 600 он работает // сделать что-то 1 только один раз, если я изменить размер моего браузера снова он не будет работать, как его уже было сделано.

тогда, если я изменю размер до> 600 // сделаю что-то 2 триггера gers, а затем, если я изменил размер до < 600 // сделаем что-то, то 1 снова запустится, только однажды попытайтесь объяснить это ниже и кодом.

resizeDiv = function() {  
if (vpw < 600) { 
//do something 1 
//disable do something 1 
//enable do something 2 
} 
else 
{ 
//do something 2 
//disable do something 2 
//enable do something 1 
} 
}; 
$(document).ready(resizeDiv); 
$(window).bind('resize', resizeDiv); 

Надеюсь, все это имеет смысл, и кто-то может быть в состоянии указать мне в правильном направлении, чтобы добиться того, что я должен произойти

Ragards

ответ

5

Вы можете использовать простое состояние, как

var state; 
resizeDiv = function() { 
    if (vpw < 600 && state != 1) { 
     //do something 1 
     state = 1; 
     console.log('less', state) 
    } else if (vpw >= 600 && state != 2) { 
     //do something 2 
     state = 2; 
     console.log('more', state) 
    } 
}; 
$(document).ready(resizeDiv); 
$(window).bind('resize', resizeDiv); 

Демо: Fiddle

+0

, это отлично работает, и я был именно тем, что искал – odd

0

использование .one функции JQuery в: http://api.jquery.com/one/ Как следует из названия , он выполняет функцию только один раз.

В противном случае, просто использовать логическую переменную, чтобы сохранить запись, если что-то уже сделано:

var doneOnce = false 

doSomething(){ 
    /* stuff stuff stuff */ 
    doneOnce = true; 
} 
+0

спасибо за ваш комментарий, выше ответ, который я выбрал, нужно, чтобы это произошло более одного раза – odd

+0

Ну, вы прямо заявили, что хотите, чтобы это произошло только один раз, и теперь вы выбрали другой ответ, потому что это позволяет больше чем единожды. Я смущаюсь. –

+0

было трудно объяснить, следовательно, 2-й бит кода, который, я надеюсь, помог, я ценю ваш комментарий – odd

1

К выполните то, что вы хотите, вам нужно будет следить за текущим «состоянием» и делать что-то соответствующим образом.

Допустим, у вас есть два состояния state1 и state2, то вы только хотите сделать something2, когда государство в настоящее время state1, и наоборот. Это немного похоже на сохранение, которое вы «сделали» something2.

В коде я бы подойти к нему так:

var state = "nostate"; // you could also set this to the state it starts in. 
resizeDiv = function() { 
    if (vpw < 600 && state != "state2") { 
     //do something 1 

     //enable do something 2 
     state = "state2"; 
    } else if(vpw >= 600 && state != "state1") { 
     //do something 2 

     //enable do something 1 
     state = "state1"; 
    } else { 
     // do nothing. 
    } 
}; 
$(document).ready(resizeDiv); 
$(window).bind('resize', resizeDiv); 
+0

спасибо, то же самое, что и ниже, и пропустил ваш первый раз с этим решением и Arun P's – odd

1

Я рекомендую $(window).resize(); и $(document).ready() вместо этого. Но вы должны запустить функцию внутри них обоих. $(window).resize(); означает, что при изменении размера браузера и $(document).ready(); есть, когда загружается страница.

Во-первых, определить свою функцию для изменения размера

function resizeDiv(){ 
    var vpw = $(window).width; // if vpw is based on whole page width 
    if (vpw < 600) { 
    alert('Less than 600px'); 
    //do something 1 
    } 
    else 
    { 
    alert('More than 600px'); 
    //do something 2 
    } 
} 

Затем сделайте функцию внутри

$(document).ready(function(){ 
    resizeDiv(); 
    // you can explain other function when your page is READY 
}); 

$(window).resize(function(){ 
    resizeDiv(); 
    // also here for other function when your page is on RESIZE 
}); 

 

Примечание:

Убедитесь, что страница не является определяющим $(document).ready(); или $(window).resize();.

Потому что определение нескольких $(document).ready(); или $(window).resize(); вызывает ошибку.

+0

благодарю вас за ваш комментарий, у меня есть его завернутый в документ готов .. извините, не опубликовано это .. – odd

Смежные вопросы