开发者

help stopping setInterval

not quite sure how to set this up. I tried to do what the internetz tolded me.

<?php

function animateFunds($startAmount, $finishAmount)
{
    echo '<div id="fundage" style="display:inline;"> ';
    echo number_format($startAmount, 2, '.', ',') . ' </div>';

    //we are shooting for about 5 seocnds of
    //animation total. So get total amount of money
    //we are going t开发者_如何学JAVAo cover, and figure out the
    //setInterval delay for JS
    $distanceInPennies = ($finishAmount - $startAmount) * 100;
    //5 secs in MS = 5000
    $delay = 5000 / $distanceInPennies;
    //round $delay
    $delay = floor($delay);
    //delay no less than 5 ms
    if($delay < 5) $delay = 5;

    /// countdown JS
echo '<script type="text/javascript">
        var thisFunc = setInterval(function () {

            //instantiate delay
            //delay = ' . $delay . ';

            // get current fundage
            var currentFund = document.getElementById("fundage").innerHTML;
            currentFund = parseFloat(currentFund);

            // add a penny
            currentFund += 0.01;
            // round to 2 decimal places
            currentFund = Math.round(currentFund * 100)/100;
            // dont update more than finish amount
            if(currentFund > ' . $finishAmount . ') currentFund = ' . $finishAmount . '; 

            //if finish amount reached, stop function
            if(currentFund = ' . $finishAmount . ') clearInterval(thisFunc);

            // update countdown div
            document.getElementById("fundage").innerHTML = currentFund;

        }, ' . $delay . ');
            </script>
        ';
    /// END countdown JS
}// END function    

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0     Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>

blah blah blah $<?PHP animateFunds(2.00, 10.00); ?> after after after.

</body>
</html>


You're declaring a dynamic function in the setInterval, your call to clearInterval inside that function will not be able to access the thisFunc variable.

Try declaring the function outside the scope of the setInterval, like so:

/// countdown JS
echo '<script type="text/javascript">
    function doTimer() {

    //instantiate delay
    //delay = ' . $delay . ';

    // get current fundage
    var currentFund = document.getElementById("fundage").innerHTML;
    currentFund = parseFloat(currentFund);

    // add a penny
    currentFund += 0.01;
    // round to 2 decimal places
    currentFund = Math.round(currentFund * 100)/100;
    // dont update more than finish amount
    if(currentFund > ' . $finishAmount . ') currentFund = ' . $finishAmount . '; 

    //if finish amount reached, stop function
    if(currentFund = ' . $finishAmount . ') clearInterval(thisFunc);

    // update countdown div
    document.getElementById("fundage").innerHTML = currentFund;

}

var thisFunc = setInterval("doTimer()", ' . $delay . ');
</script>';
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜