Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Почему не работает скрипт? (https://javascript.ru/forum/dom-window/41714-pochemu-ne-rabotaet-skript.html)

razorg1991 26.09.2013 14:30

Почему не работает скрипт?
 
Имеется скрипт:

$(document).ready(function(){
 
        var $menu = $("#menu");
 
        $(window).scroll(function(){
            if ( $(this).scrollTop() > 100 && $menu.hasClass("header-menu") ){
                $menu.addClass("navbar-fixed-top");
            } else if($(this).scrollTop() <= 100 && $menu.hasClass("navbar-fixed-top")) {
                $menu.removeClass("navbar-fixed-top");
            }
        });//scroll
    });


Структура html

<div class="header-logo">лого</div>
<div class="header-menu" id="menu">
контент
</div>


CSS:
Код:

.header-logo {
        width:100%;
        background: #333333; /* Old browsers */
        border-bottom:1px solid #000;
}
.header-menu {
        width:100%;
        background: #f8bb49; /* Old browsers */
        border-top:1px solid #fcdda4;
        border-bottom:1px solid #a16013;
}
.navbar-fixed-top {
        position: fixed;
        right: 0;
        left: 0;
}

Почему-то скрипт не хочет фиксировать блок menu при скроле :-E
А в консоли вот это:
TypeError: $ is not a function
	var $menu = $("#menu");


В чем причина?

рони 26.09.2013 14:42

razorg1991,
либо jquery неуспело прогрузиться либо другой скрипт занял $

razorg1991 26.09.2013 14:53

Цитата:

Сообщение от рони (Сообщение 273741)
razorg1991,
либо jquery неуспело прогрузиться либо другой скрипт занял $

Помимо jquery у меня подключается еще и mootools, также подключен bootstrap.js . Вначале идет jquery потом плагин миграции jquery-migrate-1.2.1.js, потом mootools. При таком раскладе все корректно работает. Стоит мне подключить этот скрипт, выскакивает ошибка в консоли (подключаю скрипт сразу после подключения плагина миграции). Да и еще при подключении этого скрипта начинает некорректно работать toggle бутстрапа.
А можно ли как-то переписать этот скрипт на чистом js, чтобы не возникало этих проблем?

рони 26.09.2013 15:00

razorg1991,
jQuery.noConflict();

jQuery.noConflict();
jQuery(document).ready(function($) {
  // здесь $ будет действовать как алиас jQuery
});


Цитата:

Сообщение от razorg1991
переписать этот скрипт на чистом js

на форуме есть подобные решения

razorg1991 26.09.2013 15:05

Заработало ))))) Держи еще плюс )))

razorg1991 26.09.2013 15:22

Теперь даже поправил немного скрипт:

jQuery.noConflict();
jQuery(document).ready(function($){
 
        var $menu = $("#menu");
		var $logo = $("#logo");
 
        $(window).scroll(function(){
            if ( $(this).scrollTop() > $logo.height() ){
                $menu.addClass("navbar-fixed-top");
            } else if($(this).scrollTop() <= $logo.height()) {
                $menu.removeClass("navbar-fixed-top");
            }
        });//scroll
    });


А в html добавил еще диву с классом header-logo еще id logo. Теперь скрипт автоматом вычисляет, когда нужно фиксировать меню сверху ))))

рони 26.09.2013 15:30

razorg1991,
кешировать так кешировать :dance:
jQuery.noConflict();
jQuery(document).ready(function($){

        var $menu = $("#menu"),
		    $logo = $("#logo"),
            $window = $(window);

        $window.scroll(function(){
            if ( $window.scrollTop() > $logo.height() ){
                $menu.addClass("navbar-fixed-top");
            } else if($window.scrollTop() <= $logo.height()) {
                $menu.removeClass("navbar-fixed-top");
            }
        });//scroll
    });


Часовой пояс GMT +3, время: 11:23.