2014-12-22 3 views
0

Я довольно новичок в javascript. У меня есть эта функция, и я бы хотел ее отключить, когда размер экрана меньше 1024. У меня есть две функции: функция готовности документа и функция изменения размера окна. При изменении размера экрана ниже 1024 я хотел бы, чтобы функция была отключена. Как управлять этим?Javascript; отключить функцию?

Вот мой код

<script type='text/javascript' src='//code.jquery.com/jquery-1.9.1.js'></script> 
<script> 
jQuery(document).ready(function($) { 
    var width = (window.innerWidth > 0) ? window.innerWidth : screen.width; 
    if(width > 1024) { 
    setTimeout(function(){ 
     var lcol_height = $("#leftCol2").height() + 80; // add 80 for margin + padding 
     var rcol_height = $("#rightCol2").height(); 

     if(rcol_height > lcol_height) $("#leftCol2").css('height',(rcol_height - 80) + 'px'); 
     else $("#rightCol2").css('height',lcol_height + 'px'); 
    }, 500); 
    } 
}); 


$(window).resize(function() { //Fires when window is resized 
    var width = (window.innerWidth > 0) ? window.innerWidth : screen.width; 
    if(width < 1024) { 
//I'd like the margin function to be unset. 
    } 
    else { 
     setTimeout(function(){ 
     var lcol_height = $("#leftCol2").height() + 80; // add 80 for margin + padding 
     var rcol_height = $("#rightCol2").height(); 

     if(rcol_height > lcol_height) $("#leftCol2").css('height',(rcol_height - 80) + 'px'); 
     else $("#rightCol2").css('height',lcol_height + 'px'); 
    }, 500); 
    } 

}); 
</script> 

Спасибо так много!

+1

Почему «не задана» функция? если вы хотите снова включить его снова, вам нужно добавить слушателя, чтобы узнать фактическую ширину (в событии изменения размера). – Hacketo

ответ

1

Нет необходимости снимать его, так как вам может понадобиться его снова, если размер окна увеличивается ниже 1024 пикселей. Вот немного оптимизированная версия кода:

function handleMargins() { 
    var width = (window.innerWidth > 0) ? window.innerWidth : screen.width; 
    if (width > 1024) { 
     setTimeout(function() { 
      var lcol_height = $("#leftCol2").height(); // use original margin 
      var rcol_height = $("#rightCol2").height(); 

      if (rcol_height > lcol_height) $("#leftCol2").css('height', (rcol_height - 80) + 'px'); 
      else $("#rightCol2").css('height', lcol_height + 'px'); 
     }, 500); 
    } else { 
     setTimeout(function() { 
      var lcol_height = $("#leftCol2").height() + 80; // add 80 for margin + padding 
      var rcol_height = $("#rightCol2").height(); 

      if (rcol_height > lcol_height) $("#leftCol2").css('height', (rcol_height - 80) + 'px'); 
      else $("#rightCol2").css('height', lcol_height + 'px'); 
     }, 500); 
    } 
} 

jQuery(document).ready(handleMargins); 

$(window).resize(handleMargins); 

Помимо того, что более удобным для чтения, теперь тот же самый код выполняется при первом открытии страницы И на изменение размера (представьте, что произойдет в исходном коде, если окно первоначально меньше 1024px).


UPDATE

Смотрите, если это имеет смысл (примечание, граница устанавливается в 400px, так что вам нужно shring что коробка jsfiddle примерно в два раза размера дивы): http://jsfiddle.net/wdey6ngf/

Я упростил вашу логику и все, просто хотел показать вам, как это работает.


ПРИМЕЧАНИЕ

В зависимости от того, насколько сложна ваша конец логика будет, это то, что вы можете сделать не используя JS, просто CSS с запросами СМИ: http://jsfiddle.net/rags7zg2/ Он будет работать гораздо лучше, чем JS версия.

+0

В чем разница между двумя блоками setTimeout? – Hacketo

+0

Спасибо. Наверное, у вас есть '' 'слишком много правильных? Я попробовал ваш код. Функция готовности документа работает, но функция изменения размера не работает. Я думаю, это логично, поскольку в этой функции ничего не происходит при правильном изменении экрана ниже 10424? Как сделать маржу уйти после изменения размера ниже 1024? – RobbertT

+0

@Hacketo, только что обновил его, спасибо. – Shomz

0

Если это глобальная функция, вы можете переопределить это следующим образом:

window.myFunction = function() { 
    return false; 
} 

Но вы не можете сделать это с анонимными функциями очевидно. Таким образом, первый извлечь свои функции:

function myResizer() 
{ 
    var width = (window.innerWidth > 0) ? window.innerWidth : screen.width; 
    if(width > 1024) { 
    setTimeout(function(){ 
     var lcol_height = $("#leftCol2").height() + 80; // add 80 for margin + padding 
     var rcol_height = $("#rightCol2").height(); 
     if(rcol_height > lcol_height) $("#leftCol2").css('height',(rcol_height - 80) + 'px'); 
     else $("#rightCol2").css('height',lcol_height + 'px'); 
    }, 500); 
    } 
} 

И затем использовать эту функцию, чтобы установить его в качестве ready функции первоначально:

jQuery(document).ready(myResizer) 

Позже, когда вы должны потерять эту функциональность, просто заменить его нет ничего:

jQuery(document).ready(function($) { return false; } 
+0

Я сомневаюсь, что, поскольку он работает только с анонимными функциями ... – user2393256

+0

Ну, разве он не может их избежать? : D – bosnjak

+0

Я боюсь, что это обычный способ сделать что-то в javascript ... – user2393256

0

магазин весь код в функции, использование хранения SetTimeout в переменной, и называют, что в готовом и OnResize. Затем вы можете использовать четкий интервал, если (ширина < 1024).

+0

Привет, большое вам спасибо за ваш ответ. Я хотел бы понять, что вы говорите, но жаль, что я не полностью :) JS действительно для меня новичок. Этот код был кодом по умолчанию, который присутствовал в моем файле темы. Во всяком случае, как сохранить его в функции. Также, как использовать ясный интервал? Спасибо огромное! – RobbertT

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

  • Нет связанных вопросов^_^