我不知道是否可以这样做,就像我有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();
}
});
第二个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中编写代码很奇怪,按tab并不能给你任何间距。
答案 0 :(得分:2)
目前,function setheight(){ }
是第一个$(document).ready(function(){}
中的内部函数。它的“范围”(可见性)仅限于该功能内部。
要让所有人都可以看到它,您需要将其移到$(document).ready(function(){}
之外。
然后,在第二个文件之前声明第一个文件,第二个文件中的函数现在可以使用setheight()
。
使用myClick
:
您的功能现在为myclicked()
,因此您需要将其更改为myclick()
。然后,您可以调用全局范围中的函数:
function myclick(j,k){
j.click(function(e) {
e.preventDefault();
$('html,body').animate({scrollTop: k}, 1000);
setheight();
define_pos();
}
答案 1 :(得分:0)
这是根据评论中的“新”问题命名职位功能的一种方法。它是纯粹的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();
};
值得注意的是,看起来这可以通过使用边距或填充或其他东西来更有效地完成。可能要容易得多。