2016-03-26 16 views
1

Ich habe zwei Funktionen, die ich auf window.onload-Ereignis ausführen möchte, aber nur die letzte Funktion scheint so weit zu funktionieren. Eine Funktion ist für einen Bildschieberegler und die andere Funktion ruft Daten aus einer Google-Tabellenkalkulationszelle ab.Kombinieren von zwei Javascript-Funktionen zu einem window.onload funktioniert nicht

function fun1() { //image slider 

    var ul; 
    var li_items; 
    var imageNumber; 
    var imageWidth; 
    var prev, next; 
    var currentPostion = 0; 
    var currentImage = 0; 

    function init() { 
    ul = document.getElementById('image_slider'); 
    li_items = ul.children; 
    imageNumber = li_items.length; 
    imageWidth = li_items[0].children[0].clientWidth; 
    ul.style.width = parseInt(imageWidth * imageNumber) + 'px'; 
    prev = document.getElementById("prev"); 
    next = document.getElementById("next"); 

    prev.onclick = function() { 
     onClickPrev(); 
    }; 
    next.onclick = function() { 
     onClickNext(); 
    }; 
    } 

    function animate(opts) { 
    var start = new Date; 
    var id = setInterval(function() { 
     var timePassed = new Date - start; 
     var progress = timePassed/opts.duration; 
     if (progress > 1) { 
     progress = 1; 
     } 
     var delta = opts.delta(progress); 
     opts.step(delta); 
     if (progress == 1) { 
     clearInterval(id); 
     opts.callback(); 
     } 
    }, opts.delay || 17); 

    } 

    function slideTo(imageToGo) { 
    var direction; 
    var numOfImageToGo = Math.abs(imageToGo - currentImage); 


    direction = currentImage > imageToGo ? 1 : -1; 
    currentPostion = -1 * currentImage * imageWidth; 
    var opts = { 
     duration: 1000, 
     delta: function(p) { 
     return p; 
     }, 
     step: function(delta) { 
     ul.style.left = parseInt(currentPostion + direction * delta * imageWidth * numOfImageToGo) + 'px'; 
     }, 
     callback: function() { 
     currentImage = imageToGo; 
     } 
    }; 
    animate(opts); 
    } 

    function onClickPrev() { 
    if (currentImage == 0) { 
     slideTo(imageNumber - 1); 
    } else { 
     slideTo(currentImage - 1); 
    } 
    } 

    function onClickNext() { 
    if (currentImage == imageNumber - 1) { 
     slideTo(0); 
    } else { 
     slideTo(currentImage + 1); 
    } 
    } 

} 

function fun2() { 
    // Google spreadsheet js 

    google.load('visualization', '1', { 
    callback: function() { 

     var query = new google.visualization.Query('https://docs.google.com/spreadsheets/d/1sA7M5kG6Xo8YScD1Df38PIA_G0bvhGRdqoExXg0KJTs/gviz/tq?tqx=out:html&tq?gid=0&headers=0&range=A1:C'); 
     query.send(displayData); 
    } 
    }); 

    function displayData(response) { 

    numRows = response.getDataTable().getValue(0, 0); 

    document.getElementById('data').innerHTML = numRows; 
    } 
} 


var addFunctionOnWindowLoad = function(callback) { 
    if (window.addEventListener) { 
    window.addEventListener('load', callback, false); 
    } else { 
    window.attachEvent('onload', callback); 
    } 
} 

addFunctionOnWindowLoad(fun1); 
addFunctionOnWindowLoad(fun2); 

Dies ist die Antwort, die ich link habe versucht, aber ich kann nicht scheinen, um herauszufinden, wo ich falsch gehe.

+1

Ich habe es Ihnen, dass, wenn jede der Funktionen waren einfache 1-Liner, das heißt alert („func1“) und alert („func2“), dass Sie zwei Warnungen angezeigt bekommen würde. Dass der Code fehlschlägt, sagt mir, dass es ein Problem mit einer der Funktionen gibt. Was muss die Konsole sagen? Das Problem wird mit ziemlicher Sicherheit von da aus nach meiner Erfahrung leicht zu erkennen sein. – enhzflep

+0

Hallo, die Konsole zeigt keine Fehler – manicdav

+0

Johnyy2 - Ich habe gerade Code in jeder Funktion als erste Zeile gelöscht. Ich habe den Code 'alert ('fun1');' für einen von ihnen und 'alert (' fun2 ') 'für den anderen benutzt. Beide Warnungen wurden angezeigt. Ich habe dann eine Fehlermeldung erhalten, die besagt: "blank.html: 180 Uncaught ReferenceError: google ist nicht definiert" - das war zu erwarten, da ich gerade den Code benutzt habe, den du gezeigt hast. Aus diesem Grund ist es fair zu sagen, dass es ein Problem in Ihrer Fun1-Funktion gibt. :) – enhzflep

Antwort

0

Ich habe diese Funktion vor einer Weile gefunden und glaube es oder nicht, ich muss es immer noch benutzen. addEventLoad() Rufen Sie einfach addEventLoad, während Sie die Funktion zum Laden übergeben.

"The way this works is relatively simple: if window.onload has not already been assigned a function, the function passed to addLoadEvent is simply assigned to window.onload. If window.onload has already been set, a brand new function is created which first calls the original onload handler, then calls the new handler afterwards."

wird Dieser Code-Schnipsel auf 3 Funktionen laden window.onload

Snippet

function addLoadEvent(func) { 
 
    var oldonload = window.onload; 
 
    if (typeof window.onload != 'function') { 
 
    window.onload = func; 
 
    } else { 
 
    window.onload = function() { 
 
     if (oldonload) { 
 
     oldonload(); 
 
     } 
 
     func(); 
 
    } 
 
    } 
 
} 
 

 

 
function alert1() { 
 
    alert("First Function Loaded"); 
 
} 
 

 
function alert2() { 
 
    alert("Second Function Loaded"); 
 
} 
 

 
function alert3(str) { 
 
    alert("Third Function Loaded; Msg: " + str); 
 
} 
 
addLoadEvent(alert1); 
 
addLoadEvent(alert2); 
 
addLoadEvent(function() { 
 
    alert3("This works"); 
 
});
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>

+0

Es gibt keinen logischen Grund zu der Annahme, dass dies das Problem des OP lösen wird. –

+0

@ zer00ne Danke für deine Antwort. Ich habe das ausprobiert und die letzte Funktion funktioniert/lädt tatsächlich, so dass ich jetzt denke, dass es ein Problem mit meiner ersten Funktion gibt. – manicdav

+0

@torazaburo Bitte geben Sie den Grund, warum es unlogisch ist? OP hat eine Möglichkeit angefordert, 2 Funktionen auf 'window.onload' zu laden. Diese Funktion hat in der Vergangenheit für mich funktioniert. – zer00ne

1

Dies ist, was ich tun beendet, und jetzt alle Arbeitsfunktionen.

var ul; 
var li_items; 
var imageNumber; 
var imageWidth; 
var prev, next; 
var currentPostion = 0; 
var currentImage = 0; 


function init() { 
    ul = document.getElementById('image_slider'); 
    li_items = ul.children; 
    imageNumber = li_items.length; 
    imageWidth = li_items[0].children[0].clientWidth; 
    ul.style.width = parseInt(imageWidth * imageNumber) + 'px'; 
    prev = document.getElementById("prev"); 
    next = document.getElementById("next"); 
     prev.onclick = function() { 
     onClickPrev(); 
    }; 
    next.onclick = function() { 
     onClickNext(); 
    }; 
} 

function animate(opts) { 
    var start = (new Date()); 
    var id = setInterval(function() { 
     var timePassed = (new Date()) - start; 
     var progress = timePassed/opts.duration; 
     if (progress > 1) { 
      progress = 1; 
     } 
     var delta = opts.delta(progress); 
     opts.step(delta); 
     if (progress == 1) { 
      clearInterval(id); 
      opts.callback(); 
     } 
    }, opts.delay || 17); 
    //return id; 
} 

function slideTo(imageToGo) { 
    var direction; 
    var numOfImageToGo = Math.abs(imageToGo - currentImage); 
    // slide toward left 

    direction = currentImage > imageToGo ? 1 : -1; 
    currentPostion = -1 * currentImage * imageWidth; 
    var opts = { 
     duration: 1000, 
     delta: function(p) { 
      return p; 
     }, 
     step: function(delta) { 
      ul.style.left = parseInt(currentPostion + direction * delta * imageWidth * numOfImageToGo) + 'px'; 
     }, 
     callback: function() { 
      currentImage = imageToGo; 
     } 
    }; 
    animate(opts); 
} 

function onClickPrev() { 
    if (currentImage === 0) { 
     slideTo(imageNumber - 1); 
    } else { 
     slideTo(currentImage - 1); 
    } 
} 

function onClickNext() { 
    if (currentImage == imageNumber - 1) { 
     slideTo(0); 
    } else { 
     slideTo(currentImage + 1); 
    } 
} 

window.onload = init; 


function addLoadEvent(func) { 
    var oldonload = window.onload; 
    if (typeof window.onload != 'function') { 
     window.onload = func; 
    } else { 
     window.onload = function() { 
      if (oldonload) { 
       oldonload(); 
      } 
      func(); 
     } 
    } 
} 

function fun2() { 
    // Google spreadsheet js 

    google.load('visualization', '1', { 
     callback: function() { 

      var query = new google.visualization.Query('https://docs.google.com/spreadsheets/d/1sA7M5kG6Xo8YScD1Df38PIA_G0bvhGRdqoExXg0KJTs/gviz/tq?tqx=out:html&amp;tq?gid=0&amp;headers=0&amp;range=A1:C'); 
      query.send(displayData); 
     } 
    }); 

    function displayData(response) { 

     numRows = response.getDataTable().getValue(0, 0); 

     document.getElementById('data').innerHTML = numRows; 
    } 


} 
addLoadEvent(fun2); 
addLoadEvent(function() { 
}); 
Verwandte Themen