我是初学者并且制作了一个自定义的SoundCloud播放器,但是javascript不是很好,因为我无法获得变量和函数以获得全局。目前我在某些功能中使用与另一个功能相同的代码来计算变量,如播放器中音乐的当前时间。特别是currenttime
我有2个计时器在运行,我也需要一个。解决这个问题的一个简单方法是使当前的第二个变量全局可用。
我试图将所有代码放在document.ready
中或使用返回值,但它不起作用。
这是我的代码:
function toggle() {
var widget = SC.Widget(document.getElementById('soundcloud_widget'));
widget.isPaused(function(boolean){
widget.toggle();
playing = boolean;
if(playing == true)
{
playtoggle.className ="";
playtoggle.className ="play";
}
else if(playing == false)
{
playtoggle.className ="";
playtoggle.className ="pause";
}
});
}
function refresher()
{
setInterval(function(){timer()},10);
var widget = SC.Widget(document.getElementById('soundcloud_widget'));
widget.getDuration(function(duration){
endtime = Math.round(duration/1000);
var minute = Math.floor((endtime / 100) * 100 / 60);
var sekunde = Math.round(endtime - (minute * 60));
if(sekunde<10)
{
document.getElementById('endtime').innerHTML = " "+ minute + ":0" + sekunde;
}
else
{
document.getElementById('endtime').innerHTML = " "+ minute + ":" + sekunde;
}
});
}
function timer() {
var widget = SC.Widget(document.getElementById('soundcloud_widget'));
widget.getCurrentSound(function(music){
document.getElementById('title').innerHTML = music.title;
})
widget.getPosition(function(position){
currenttime = Math.round(position/1000);
currentminute = Math.floor((currenttime /100) * 100 / 60);
currentsek = Math.round(currenttime - (currentminute * 60));
if(currentsek < 10)
{
document.getElementById('time').innerHTML = currentminute + ":0" + currentsek;
}
else
{
document.getElementById('time').innerHTML = currentminute + ":" + currentsek;
}
widget.getDuration(function(duration){
endtime = Math.round(duration/1000);
minute = Math.floor((endtime / 100) * 100 / 60);
sekunde = Math.round(endtime - (minute * 60));
var pWidth = $('#gutter').width();
var seekToposition = (position / duration)*pWidth;
$('#seekTo').css('left', seekToposition-15+"px");
$('#progress').css('width', seekToposition+"px");
});
if(currentminute == minute && currentsek == sekunde)
{
playtoggle.className="";
playtoggle.className="pause";
}
});
}
function seekTo() {
var widget = SC.Widget(document.getElementById('soundcloud_widget'));
var pWidth = $('#gutter').width();
$('#gutter').click(function(e){
var scrub = (e.pageX);
$('#seekTo').css('left', scrub+"px");
$('#progress').css('width', scrub+"px");
widget.seekTo((scrub)/pWidth*311498);
});
}
function keyfunction(e){
var widget = SC.Widget(document.getElementById('soundcloud_widget'));
switch(e.keyCode){
case 32:
widget.isPaused(function(boolean){
widget.toggle();
playing = boolean;
if(playing == true)
{
playtoggle.className ="";
playtoggle.className ="play";
}
else if(playing == false)
{
playtoggle.className ="";
playtoggle.className ="pause";
}
});
break;
}
}
在我的计算机上运行但是我想通过变量make global来保存一些代码。
答案 0 :(得分:3)
在Javascript中总是存在一个变量的范围,所以理论上没有诸如&#34; global&#34;变量(例如,如其他语言中的static
)。
但您可以在window
对象(或代码的根级别)上定义任何内容,可以在任何地方访问。
例如
window.myVariable = 4;
function alertMyVariable() {
alert(window.myVariable); // alerts 4;
}
或以下具有相同的语义:
var myVariable = 4;
function alertMyVariable() {
alert(myVariable); // alerts 4;
}
但请注意,对于后者,您可能会使用本地变量覆盖该变量:
var myVariable = 4;
function alertMyVariable() {
var myVariable = 6;
alert(myVariable); // alerts 6!;
}
因此,使用window
对其进行限定可能会更好。
以下是DEMO fiddle。
答案 1 :(得分:0)
var myvariable;
function myFunction() {
myvariable = 1;
}
function myFunction2() {
if (myvariable == 1)
// something
}