2012-03-08 81 views
0

我想用純JavaScript(帶出利用任何庫)創建收款機影響,如何使用純Javascript創建收銀機效果?

這裏是鏈接,這是落實使用Mootools的收銀機的影響,

http://jsbin.com/ehuzes/edit#preview

我想使用原始Javascript來獲得這個效果。這將是巨大的幫助,如果有人提供解決方案。

+4

的版本,所以是不是 「給予解決方案。」這就是你付錢的原因。這是爲了幫助人們自己解決問題。你甚至試圖編碼任何東西,還是要求免費午餐? – spender 2012-03-08 13:08:02

+2

這或多或少是純粹的JavaScript。只是事件處理程序註冊和類創建似乎與Mootools(*編輯*確定它擴展了Fx)完成,但大多數實際邏輯是純JavaScript。花點時間瞭解代碼... – 2012-03-08 13:08:44

+0

@spender我的意思是我不需要任何代碼,我只需要一些方法來做到這一點。我的意思是算法。我從早上起就嘗試了一切。我能夠得到它的工作。我確實喜歡使用相同的mootools代碼,並從mootools中刪除了所有不需要的代碼,並且它的工作正常。但我想要一個算法來編碼我自己。我嘗試的文件是pastebin.com/h9TTBpyU,並且修改過的mootools.js是pastebin.com/YwTb7vBL – ravidsrk 2012-03-08 13:28:30

回答

1
$('#number').on('change', function (e) { 
    $(this).cashregister($(this).val()); 
}); 

(function ($) { 
    $.fn.cashregister = function (num) { 
     var output = $('#output').html(); 

     function intervalfunc(interval, num) { 
      var end = parseInt($('#number').html()); 
      var cont = parseInt($('#output').html()) 

      $('#output').html(cont + interval); 
      if ($('#output').html() == num) { 
       clearInterval(int); 
       return false; 
      } 
     } 

     if (num > output) { 
      var int = setInterval(function() { intervalfunc(1, num) }, 0.1);  
     }else if (num < output) { 
      var int = setInterval(function() { intervalfunc(-1, num) }, 0.1);   
     }else if (num == $('#output').html()) { 
      // do nothing 
     }else{ 
      alert("Invalid Input!"); 
     } 
    }; 
})(jQuery); 

http://jsfiddle.net/DuLjC/3/ - >工作建議的修復

0

使用上的按鈕或東西一個onclick功能,它應該(也許從一個文本框的值)獲得的數量和該變量發送到使用.innerHTML上一個div來改變數值定義的功能,然後您使用SetInterval函數使數字每上升或下降1個區間。當達到數字時使用clearInterval

也許是這樣的:

<div id = "container">0</div> 
<input type = 'text' 
     id = 'number' /> 
<input type = 'button' 
     value = 'change amount' 
     onclick = "var num = document.getElementById('number').value; 
        cashregister(num);" /> 

爲HTML和:

<script type = "text/javascript"> 
    function cashregister(num) { 
    var cont = document.getElementById('container').innerHTML; 
    if (num < cont) { 
     var int = setInterval("intervalfunc(1)", (interval_time_in_miliseconds)); 
     function intervalfunc(num) { 
     var end = document.getElementById('number'); 
     var cont = document.getElementById('cont').innerHTML; 
     cont.innerHTML = cont + num; 
     if (cont == end) { 
      clearInterval(int); 
     } 
     } 
    } else if (num > cont) { 
     var int = setInterval("intervalfunc(-1)", (interval_time_in_miliseconds)); 
     function intervalfunc(num) { 
     var end = document.getElementById('number'); 
     var cont = document.getElementById('cont').innerHTML; 
     cont.innerHTML = cont + num; 
     if (cont == end) { 
      clearInterval(int); 
     } 
     } 
    } else if (num == cont) { 
     //do nothing 
    } else { 
     alert("invalid input!"); 
    } 
    } 

</script> 

我不知道這確切的代碼會工作,但你想要的是沿着這些路線的東西。

+0

更好地使用'setTimeout'而不是'setInterval'並且不要將字符串傳遞給這些函數。 – 2012-03-08 13:37:59

+0

但設置一個setTimeout只執行一次,使用setInterval創建一種動畫的數字向上或向下取決於它的定時有多快(或慢) – CKKiller 2012-03-08 13:42:34

+0

這就是爲什麼你會在你的函數中再次調用它,創建一些類遞歸。 'setInterval'的問題是你可能建立一個函數隊列,因爲一個函數運行的時間要比intervall時間長。 – 2012-03-08 13:45:29