帮助停止setInterval

时间:2011-06-25 00:27:00

标签: php javascript

不太确定如何设置它。我试着去做因为互联网给我做的事。

<?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 to 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>

1 个答案:

答案 0 :(得分:0)

您在setInterval中声明了动态功能,您对该功能内部clearInterval的调用将无法访问thisFunc变量。

尝试在setInterval范围之外声明函数,如下所示:

/// 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>';