2

2つのjsファイルがあるように、これが可能かどうかはわかりません。最初の Js ファイル:

var news_pos, about_pos, services_pos, clients_pos;

function define_pos() {

    var $top_slides=$('#top_slides'), 
        $mid_nav=$('#mid_nav'), 
        $news_section=$('#section-1');

    var fixed_height = $top_slides.height() + $mid_nav.height();

    news_pos = fixed_height - 20;
    about_pos = fixed_height + $news_section.height();
    services_pos = fixed_height + $news_section.height() * 2;
    clients_pos = fixed_height + $news_section.height() * 3;
}

$(document).ready(function() {

    var section_news = $('#section-1'),
        section_about = $('#section-2'),
        section_services = $('#section-3'),
        section_clients = $('#section-4');

    setheight();

    function setheight() {
        var section_height = $(window).height() + 200;
        $section_news.height(section_height);
        $section_about.height(section_height); 
        $section_services.height(section_height);
        $section_clients.height(section_height);
        define_pos();
    }
});
  1. 2 番目の JS ファイル:

    $(document).ready(function() {

    var nav = {
    
        '$btn1': $('#btn1'),
        '$btn2': $('#btn2'),
        '$btn3': $('#btn3'),
        '$btn4': $('#btn4'),
        '$btn5': $('#btn5'), 
    
        myclick : function() {
    
            myclicked(nav.$btn1, 0);
            myclicked(nav.$btn2, news_pos);
            myclicked(nav.$btn3, about_pos);
            myclicked(nav.$btn4, services_pos);
            myclicked(nav.$btn5, clients_pos);
    
            function myclicked(j,k) {
                j.click(function(e) {    
                    e.preventDefault();
                    $('html,body').animate({scrollTop: k}, 1000);
                });
            }
            // Is it right to do return{'myclick':myclick}, 
            // how to call? seems not logical
        }
    };
    
    // Here will not work because it say news_pos is undefined.
    // If I use setTimeout(nav.myclick,1000), it will works but
    // I want to run it right the when position is caculated.
    nav.myclick(); 
    

    });

nav.myclick() 関数を frist js ファイルに渡し、それを setheight() と define_pos() の下に配置するにはどうすればよいですか? ところで、stackoverflow でコードを直接書くのは奇妙です。タブを押してもスペースがありません。

4

2 に答える 2

2

現在、function setheight(){ }は最初の の内部関数$(document).ready(function(){}です。その「スコープ」(可視性) は、その関数内に限定されます。

全員に見えるようにするには、 の外に移動する必要があります$(document).ready(function(){}

次に、最初のファイルを 2 番目のファイルのに宣言すると、2 番目のファイルの関数でsetheight().


使用するにはmyClick

あなたの機能は今myclicked()なので、それをに変更する必要がありますmyclick()。次に、グローバル スコープで関数を呼び出すことができます。

function myclick(j,k){            
    j.click(function(e) {   
    e.preventDefault();
    $('html,body').animate({scrollTop: k}, 1000);
    setheight();
    define_pos();
}
于 2012-11-27T04:55:57.473 に答える
0

コメント内の「新しい」質問ごとに、位置関数に名前を付ける 1 つの方法を次に示します。これは純粋な JS であり、JQuery ではありませんが、とにかく同じです。

var POSITIONING = {
    news_pos : 0,
    about_pos : 0,
    services_pos : 0,
    clients_pos : 0,

    define_pos : function() {
         var fixed_height = 100;

         POSITIONING.news_pos     = fixed_height; // + whatever
         POSITIONING.about_pos    = fixed_height; // + whatever
         POSITIONING.services_pos = fixed_height; // + whatever
         POSITIONING.clients_pos  = fixed_height; // + whatever
    },

    set_height : function() {
        alert(this.news_pos)
    }
};

これを JS ファイルに入れ、それを使用する他のファイルの前にロードし、次のように呼び出します。

// For example, when the window loads...or document is ready, whatever
window.onload = function() {
    POSITIONING.define_pos();
    POSITIONING.set_height();
};

マージンやパディングなどを使用して CSS を使用すると、これをより効率的に行うことができるように見えることも注目に値します。おそらくはるかに簡単です。

于 2012-11-27T05:25:42.127 に答える