2012-03-15 2 views
59

У меня есть прокручиваемый элемент на моей странице (с плагином jScrollPane jQuery). То, что я хочу выполнить, - это способ отключить окно прокрутки, указав ширину окна браузера. Я делаю отзывчивый макет, и я хочу, чтобы эта функция прокрутки была отключена, когда браузер находится под определенной шириной. Я могу заставить его работать, когда я обновляю страницу, но когда я изменяю размер окна браузера, значение ширины не обновляется «на лету».jQuery: Как определить ширину окна на лету?

Прямо сейчас, если я начинаю с окна шириной 1000 пикселей, а затем изменяет размер до 350 пикселей, функция прокрутки остается. Я хочу, чтобы функция прокрутки была отключена, как только ширина браузера достигла 440 пикселей.

Вот код, который я до сих пор ..

var windowsize = $(window).width(); 

$(window).resize(function() { 
    var windowsize = $(window).width(); 
}); 

if (windowsize > 440) { 
    //if the window is greater than 440px wide then turn on jScrollPane.. 
    $('#pane1').jScrollPane({ 
     scrollbarWidth:15, 
     scrollbarMargin:52 
    }); 
} 
+1

переместить код внутри обратного вызова 'resize', просто совет осторожности, вы хотите, чтобы задушить выполнение для' resize', чтобы избежать чрезмерного называя его –

ответ

135

Изменение переменной не может магическим образом выполнить код в if -блоком. Поместите общий код в функции, а затем связать событие, и вызвать функцию:

$(document).ready(function() { 
    // Optimalisation: Store the references outside the event handler: 
    var $window = $(window); 
    var $pane = $('#pane1'); 

    function checkWidth() { 
     var windowsize = $window.width(); 
     if (windowsize > 440) { 
      //if the window is greater than 440px wide then turn on jScrollPane.. 
      $pane.jScrollPane({ 
       scrollbarWidth:15, 
       scrollbarMargin:52 
      }); 
     } 
    } 
    // Execute on load 
    checkWidth(); 
    // Bind event listener 
    $(window).resize(checkWidth); 
}); 
+0

Спасибо! Это почти работает для меня. Но вот странная проблема .. когда я делаю окно браузера менее 440px, обновляйте страницу, прокрутки нет (хорошо!). Когда я изменяю размер окна до более чем 440, функция прокрутки (также хорошая!). Но когда я изменяю размер окна до менее 440, функция прокрутки не исчезает (плохая). – Dustin

+1

@DustinMcGrew Это определяется вашей логикой: когда ширина окна меньше 440, ничего не происходит (даже сброс). Вы должны это исправить. Если нет, сообщайте более подробную информацию о применении этого кода. –

+2

Ах, ты прав! Просто нужно добавить инструкцию else и вызвать функцию jScrollPaneRemove(). Работает отлично сейчас :) – Dustin

14

Положите ваш, если условие внутри resize функции:

var windowsize = $(window).width(); 

$(window).resize(function() { 
    windowsize = $(window).width(); 
    if (windowsize > 440) { 
    //if the window is greater than 440px wide then turn on jScrollPane.. 
     $('#pane1').jScrollPane({ 
     scrollbarWidth:15, 
     scrollbarMargin:52 
     }); 
    } 
}); 
+0

такой простой, но не очевидно, исправить эту проблему , благодаря. – Lizardx

0

Я не знаю, если это полезно для вас, когда вы изменить размер страницы:

$(window).resize(function() { 
     if(screen.width == window.innerWidth){ 
      alert("you are on normal page with 100% zoom"); 
     } else if(screen.width > window.innerWidth){ 
      alert("you have zoomed in the page i.e more than 100%"); 
     } else { 
      alert("you have zoomed out i.e less than 100%"); 
     } 
    }); 
0

Ниже приводится то, что я сделал, чтобы скрыть некоторый элемент Id, когда размер экрана ниже 768 пикселей, и показывается, когда он выше 768 пикселей. Он отлично работает.

var screensize= $(window).width(); 

if(screensize<=768){ 
     if($('#column-d0f6e77c699556473e4ff2967e9c0251').length>0) 
      { 
       $('#column-d0f6e77c699556473e4ff2967e9c0251').css('display','none'); 
      } 
} 
else{ 
     if($('#column-d0f6e77c699556473e4ff2967e9c0251').length>0) 
      { 
       $('#column-d0f6e77c699556473e4ff2967e9c0251').removeAttr("style"); 
      } 

} 
changething = function(screensize){ 
     if(screensize<=768){ 
      if($('#column-d0f6e77c699556473e4ff2967e9c0251').length>0) 
      { 
       $('#column-d0f6e77c699556473e4ff2967e9c0251').css('display','none'); 
      } 
     } 
     else{ 
     if($('#column-d0f6e77c699556473e4ff2967e9c0251').length>0) 
      { 
       $('#column-d0f6e77c699556473e4ff2967e9c0251').removeAttr("style"); 
      } 

     } 
} 
$(window).resize(function() { 
var screensize= $(window).width(); 
    changething(screensize); 
}); 
Смежные вопросы