Как отключить JavaScript для адаптивного дизайна

Я использую сверхразмерный jQuery для фона слайд-шоу моего веб-сайта. Я делаю веб-сайт отзывчивым и использую медиа-запросы css.

Я хотел бы иметь возможность отключить скрипт, когда он находится ниже 480px.

вот сценарий для фактического фона слайдера

$(document).ready(function(){

         jQuery(function($){

            $.supersized({

                // Functionality
                slideshow               :   1,          // Slideshow on/off
                autoplay                :   0,          // Slideshow starts playing automatically
                start_slide             :   1,          // Start slide (0 is random)
                stop_loop               :   0,          // Pauses slideshow on last slide
                random                  :   0,          // Randomize slide order (Ignores start slide)
                slide_interval          :   3000,       // Length between transitions
                transition              :   6,          // 0-None, 1-Fade, 2-Slide Top, 3-Slide Right, 4-Slide Bottom, 5-Slide Left, 6-Carousel Right, 7-Carousel Left
                transition_speed        :   1000,       // Speed of transition
                new_window              :   1,          // Image links open in new window/tab
                pause_hover             :   0,          // Pause slideshow on hover
                keyboard_nav            :   1,          // Keyboard navigation on/off
                performance             :   1,          // 0-Normal, 1-Hybrid speed/quality, 2-Optimizes image quality, 3-Optimizes transition speed // (Only works for Firefox/IE, not Webkit)
                image_protect           :   1,          // Disables image dragging and right click with Javascript

                // Size & Position                         
                min_width               :   0,          // Min width allowed (in pixels)
                min_height              :   0,          // Min height allowed (in pixels)
                vertical_center         :   1,          // Vertically center background
                horizontal_center       :   1,          // Horizontally center background
                fit_always              :   0,          // Image will never exceed browser width or height (Ignores min. dimensions)
                fit_portrait            :   1,          // Portrait images will not exceed browser height
                fit_landscape           :   0,          // Landscape images will not exceed browser width

                // Components                           
                slide_links             :   'blank',    // Individual links for each slide (Options: false, 'num', 'name', 'blank')
                thumb_links             :   1,          // Individual thumb links for each slide
                thumbnail_navigation    :   0,          // Thumbnail navigation
                slides                  :   [           // Slideshow Images
                                                    {image : '/img/backgrounds/street-dance-background.jpg', title : 'Image Credit: Maria Kazvan', thumb : 'http://buildinternet.s3.amazonaws.com/projects/supersized/3.2/thumbs/kazvan-1.jpg', url : 'http://www.nonsensesociety.com/2011/04/maria-kazvan/'},
                                                    {image : 'http://buildinternet.s3.amazonaws.com/projects/supersized/3.2/slides/kazvan-2.jpg', title : 'Image Credit: Maria Kazvan', thumb : 'http://buildinternet.s3.amazonaws.com/projects/supersized/3.2/thumbs/kazvan-2.jpg', url : 'http://www.nonsensesociety.com/2011/04/maria-kazvan/'},  
                                                    {image : 'http://buildinternet.s3.amazonaws.com/projects/supersized/3.2/slides/kazvan-3.jpg', title : 'Image Credit: Maria Kazvan', thumb : 'http://buildinternet.s3.amazonaws.com/projects/supersized/3.2/thumbs/kazvan-3.jpg', url : 'http://www.nonsensesociety.com/2011/04/maria-kazvan/'},
                                                    {image : 'http://buildinternet.s3.amazonaws.com/projects/supersized/3.2/slides/wojno-1.jpg', title : 'Image Credit: Colin Wojno', thumb : 'http://buildinternet.s3.amazonaws.com/projects/supersized/3.2/thumbs/wojno-1.jpg', url : 'http://www.nonsensesociety.com/2011/03/colin/'},
                                                    {image : 'http://buildinternet.s3.amazonaws.com/projects/supersized/3.2/slides/wojno-2.jpg', title : 'Image Credit: Colin Wojno', thumb : 'http://buildinternet.s3.amazonaws.com/projects/supersized/3.2/thumbs/wojno-2.jpg', url : 'http://www.nonsensesociety.com/2011/03/colin/'},
                                                    {image : 'http://buildinternet.s3.amazonaws.com/projects/supersized/3.2/slides/wojno-3.jpg', title : 'Image Credit: Colin Wojno', thumb : 'http://buildinternet.s3.amazonaws.com/projects/supersized/3.2/thumbs/wojno-3.jpg', url : 'http://www.nonsensesociety.com/2011/03/colin/'},
                                                    {image : 'http://buildinternet.s3.amazonaws.com/projects/supersized/3.2/slides/shaden-1.jpg', title : 'Image Credit: Brooke Shaden', thumb : 'http://buildinternet.s3.amazonaws.com/projects/supersized/3.2/thumbs/shaden-1.jpg', url : 'http://www.nonsensesociety.com/2011/06/brooke-shaden/'},
                                                    {image : 'http://buildinternet.s3.amazonaws.com/projects/supersized/3.2/slides/shaden-2.jpg', title : 'Image Credit: Brooke Shaden', thumb : 'http://buildinternet.s3.amazonaws.com/projects/supersized/3.2/thumbs/shaden-2.jpg', url : 'http://www.nonsensesociety.com/2011/06/brooke-shaden/'},
                                                    {image : 'http://buildinternet.s3.amazonaws.com/projects/supersized/3.2/slides/shaden-3.jpg', title : 'Image Credit: Brooke Shaden', thumb : 'http://buildinternet.s3.amazonaws.com/projects/supersized/3.2/thumbs/shaden-3.jpg', url : 'http://www.nonsensesociety.com/2011/06/brooke-shaden/'}
                                            ],

                // Theme Options               
                progress_bar            :   1,          // Timer for each slide                         
                mouse_scrub             :   0

            });
        });

Я думал, что могу сделать это просто с помощью css, например, в моем медиа-запросе, просто поставив #supersized как display: none

Is это плохая практика, хотя как бы работает скрипт и лучше как-то отключить его?

6 ответов


Как уже упоминалось, есть много плагинов jQuery, которые вы можете использовать. Однако, если все, что вы хотите использовать, это просто ванильный jQuery, вы также можете делать то, что хотите.

вы можете использовать метод resize в jquery для определения размера окна.

$(window).resize(function() {
   if ($(this).width() > 480) {
      // call supersize method
   }
});

затем на doc ready, просто не забудьте вызвать окно изменения размера, чтобы он изначально вызывал или не вызывал метод в зависимости от текущего размера вашего окна:

$(document).ready(function() {
   $(window).resize();
});

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


вы можете определить ширину экрана с помощью JavaScript, используя screen.ширина, а затем определить, что вы хотите делать.

if(screen.width < 480) { 
    // do any 480 width stuff here, or simply do nothing
    return;
} else {
    // do all your cool stuff here for larger screens
}

оберните все ваши анимации и весь код, который вы не хотите запустить внутри блока else для случаев, когда размер экрана меньше 480.

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


вы можете установить скрытый div с некоторыми правилами css в медиа-запросе, а затем проверить эти атрибуты css с помощью jQuery css() и на основе этого включите или выключите слайд-шоу. В частности:

@media all and (max-width: 480px) {
    #testdiv{
        display:none;
    }
}

и js:

if($("#testdiv").css("display") == "none"){
    $.supersized({...});
}

обратите внимание, что это по существу использует подход Modernizr без фактического получения библиотеки.


jRespond, скрипт, выпущенный Viget, позволяет управлять JavaScript на основе размера окна просмотра:

статья:http://viget.com/inspire/managing-javascript-on-responsive-websites

код:https://github.com/ten1seven/jRespond


Как отметил @Pointy в комментариях, modernizr позволяет вызывать медиа-запросы из javascript. Прочтите документация modernizr


Я думаю, что решение Asad является лучшим или вы используете modernizr. Потому что у вас есть определение точки останова (480px) в одном файле, а не в JS и в CSS. Если вы используете SCSS, у вас есть только одно определение точки останова в переменной.