如何通过变量从函数发送到嵌套函数

时间:2013-03-03 13:58:18

标签: javascript function variables

作为一个javascript noob,我在理解如何在提供的示例中从函数到另一个函数中获取变量时遇到了一些麻烦。

我想使用xx.projects.resizexx.projects.item.next中设置的winHeight(你在那里看到console.log(winHeight))。

我应该在这看什么?

var xx = {

    init: function()
    {   
        xx.listener.init()
    },


    listener: {

        init: function()
        {
            xx.listener.resize()
        },

        resize: function()
        {
            xx.projects.resize()
            $(window).on('resize',function(){
                xx.projects.resize()
            })
        },
    },

    projects: {

        resize: function()
        {
            var $display = $('section .item.curr');
            var $displayNotActive = $('section.curr .item.next, section.curr .item.prev');

            var winWidth = $(window).width();
            var winHeight = $(window).height();

            var containerWidth, containerHeight;

            if(winWidth > 1450) {
                if(winHeight > 1050) {
                    containerWidth = 1200;
                    containerHeight = 900;
                } else {
                    containerWidth = winWidth - 250;
                    var helperHeight = Math.floor(containerWidth * 3/4);
                    if(helperHeight > (winHeight - 150)) {
                        containerHeight = winHeight - 150;
                        containerWidth = Math.floor(containerHeight * 4/3); 
                    } else {
                        containerHeight = helperHeight; 
                    }
                }
            } else if(winWidth < 600) {
                containerWidth = 300;
                containerHeight = 225;
            } else {
                containerWidth = winWidth - 250;
                var helperHeight = Math.floor(containerWidth * 3/4);
                if(helperHeight > (winHeight - 150)) {
                    containerHeight = winHeight - 150;
                    containerWidth = Math.floor(containerHeight * 4/3); 
                } else {
                    containerHeight = helperHeight; 
                }
            }
        },


        item: {
            next: function()
            {
                var s = $('#projects section.curr')
                    a = s.find('.item.curr'),
                    n = a.next('.item'),
                    l = a.position()

                console.log(winHeight);

                if( n.length > 0 ){
                    a.animate({ left: '-100%' }, ep.projects.config.item.speed, ep.projects.config.item.easing)
                    n.animate({ left: l.left }, ep.projects.config.item.speed, ep.projects.config.item.easing, function(){
                        a.removeClass('curr').addClass('prev')
                        n.removeClass('next').addClass('curr')                      
                    })
                }               
            },
        },
    }
}

$(document).on('ready', xx.init) // Document loaded, DOM ready

1 个答案:

答案 0 :(得分:0)

在对象范围内声明winHeightwinWidth,并使用this.winWidththis.winHeight访问它。

var xx = {

    projects: {
        resize: function () {
            //we are saving winWidth, winHeight in the projects object scope so that it can be accessed from other functions in the same scope
            this.winWidth = $(window).width(); 
            this.winHeight = $(window).height();

            var containerWidth, containerHeight;

            if (this.winWidth > 1450) {
                if (this.winHeight > 1050) {
                    containerWidth = 1200;
                    containerHeight = 900;
                } else {
                    containerWidth = this.winWidth - 250;
                    var helperHeight = Math.floor(containerWidth * 3 / 4);
                    if (helperHeight > (this.winHeight - 150)) {
                        containerHeight = this.winHeight - 150;
                        containerWidth = Math.floor(containerHeight * 4 / 3);
                    } else {
                        containerHeight = helperHeight;
                    }
                }
            } else if (winWidth < 600) {
                containerWidth = 300;
                containerHeight = 225;
            } else {
                containerWidth = this.winWidth - 250;
                var helperHeight = Math.floor(containerWidth * 3 / 4);
                if (helperHeight > (this.winHeight - 150)) {
                    containerHeight = this.winHeight - 150;
                    containerWidth = Math.floor(containerHeight * 4 / 3);
                } else {
                    containerHeight = helperHeight;
                }
            }
        },


        item: {
            next: function () {
                var s = $('#projects section.curr')
                a = s.find('.item.curr'),
                    n = a.next('.item'),
                    l = a.position()

                    console.log(this.winHeight);

                if (n.length > 0) {
                    a.animate({
                        left: '-100%'
                    }, ep.projects.config.item.speed, ep.projects.config.item.easing)
                    n.animate({
                        left: l.left
                    }, ep.projects.config.item.speed, ep.projects.config.item.easing, function () {
                        a.removeClass('curr').addClass('prev')
                        n.removeClass('next').addClass('curr')
                    })
                }
            },
        },
    }
}

http://jsfiddle.net/FDeKe/