0

What is wrong in this code?

function FloatMenu() {
    var scrollAmount = $(document).scrollTop();
    var newPosition = menuPosition + scrollAmount;

    if ($(window).height() < $fl_menu.height() + $fl_menu_menu.height()) {

        $fl_menu.css("top", menuPosition);

    } else {

        $fl_menu.stop().animate({
            top: newPosition
        }, $float_speed, $float_easing);

    }
}​

The full code:

/* Floating Menu */
//config
$float_speed=500; //milliseconds
$float_easing="easeOutQuint";
$menu_fade_speed=500; //milliseconds
$closed_menu_opacity=0.75;

//cache vars
$fl_menu=$("#fl_menu");
$fl_menu_menu=$("#fl_menu .menu");
$fl_menu_label=$("#fl_menu .label");

$(window).load(function() {
    menuPosition=$('#fl_menu').position().top;
    FloatMenu();
    $fl_menu.hover(
        function(){ //mouse over
            $fl_menu_label.fadeTo($menu_fade_speed, 1);
            $fl_menu_menu.fadeIn($menu_fade_speed);
        },
        function(){ //mouse out
            $fl_menu_label.fadeTo($menu_fade_speed, $closed_menu_opacity);
            $fl_menu_menu.fadeOut($menu_fade_speed);
        }
    );
});

$(window).scroll(function () { 
    FloatMenu();
});

function FloatMenu(){
    var scrollAmount=$(document).scrollTop();
    var newPosition=menuPosition+scrollAmount;
    if($(window).height()<$fl_menu.height()+$fl_menu_menu.height()){
        $fl_menu.css("top",menuPosition);
    } else {
        $fl_menu.stop().animate({top: newPosition}, $float_speed, $float_easing);
    }
}                      

errors are:

Message: 'menuPosition' is undefined 

and

Message:'position().top' is null or not an object
Didier Ghys
  • 30,396
  • 9
  • 75
  • 81
inmoon
  • 11
  • 1
  • 5
  • also dont you have to write like $menuPosition? – Asdfg Apr 14 '12 at 15:02
  • @OriginalSyn : I thought it was php syntax to declare the JS variable. never mind. It looks like menuPosition is not defined in the code – Asdfg Apr 14 '12 at 15:05

2 Answers2

0

try declaring menuPosition outside of the function's scopes:

var menuPosition = 0; // declared outside of function scopes

/* Floating Menu */
//config
$float_speed=500; //milliseconds
$float_easing="easeOutQuint";
$menu_fade_speed=500; //milliseconds
$closed_menu_opacity=0.75;

//cache vars
$fl_menu=$("#fl_menu");
$fl_menu_menu=$("#fl_menu .menu");
$fl_menu_label=$("#fl_menu .label");

$(window).load(function() {
    menuPosition=$('#fl_menu').position().top;
    FloatMenu();
    $fl_menu.hover(
        function(){ //mouse over
            $fl_menu_label.fadeTo($menu_fade_speed, 1);
            $fl_menu_menu.fadeIn($menu_fade_speed);
        },
        function(){ //mouse out
            $fl_menu_label.fadeTo($menu_fade_speed, $closed_menu_opacity);
            $fl_menu_menu.fadeOut($menu_fade_speed);
        }
    );
});

$(window).scroll(function () { 
    FloatMenu();
});

function FloatMenu(){
    var scrollAmount=$(document).scrollTop();
    var newPosition=menuPosition+scrollAmount;
    if($(window).height()<$fl_menu.height()+$fl_menu_menu.height()){
        $fl_menu.css("top",menuPosition);
    } else {
        $fl_menu.stop().animate({top: newPosition}, $float_speed, $float_easing);
    }
} 
Joe
  • 80,724
  • 18
  • 127
  • 145
  • The first error was resolved (Message: 'menuPosition' is undefined) But the latter is not resolved (Message:'position().top' is null or not an object) – inmoon Apr 14 '12 at 15:25
  • Try $fl_menu instead of $('#fl_menu') – Joe Apr 14 '12 at 15:53
0

Use an argument in your function. It will elegantly fix your problem.

function FloatMenu(menuPosition) {
    // Write your code as usual
}

// I guess you meant $(document).ready instead of $(window).load ?
// The main difference is that $(window).load will wait for all the images to be fully loaded, for example
$(document).ready(function() {
    menuPosition=$('#fl_menu').position().top;
    // Since you're using an argument, pass it!
    FloatMenu(menuPosition);

    // Or you can reduce to:
    FloatMenu($('#fl_menu').position().top)
Florian Margaine
  • 58,730
  • 15
  • 91
  • 116