Javascript 带计时器的HTML下拉列表

Javascript 带计时器的HTML下拉列表,javascript,html,select,counter,stopwatch,Javascript,Html,Select,Counter,Stopwatch,我有一个关于在我的主页的选择字段中实现用Javascript编写的秒表的问题: <select name="dropdown"> <option value="Project 1" selected>Project 1</option> <option value="Project 2" selected>Project 2</option> <option value="Project 3" selected>Projec

我有一个关于在我的主页的选择字段中实现用Javascript编写的秒表的问题:

<select name="dropdown">
<option value="Project 1" selected>Project 1</option>
<option value="Project 2" selected>Project 2</option>
<option value="Project 3" selected>Project 3</option>
<option value="Project 4" selected>Project 4</option>
</select>

项目1
项目2
项目3
项目4
每次选择项目1时,我都希望在其名称“项目1”附近的选项字段中启动秒表。它必须是这样的:

项目1时间(时间必须在选项字段中执行)

我希望第一次单击启动秒表,第二次单击选项字段停止秒表

下面是秒表的Javascript代码:

Stopwatch = function(listener, resolution) {
    this.startTime = 0;
    this.stopTime = 0;
    this.totalElapsed = 0; // * elapsed number of ms in total
    this.started = false;
    this.listener = (listener != undefined ? listener : null); // * function to receive onTick events
    this.tickResolution = (resolution != undefined ? resolution : 500); // * how long between each tick in milliseconds
    this.tickInterval = null;

    // * pretty static vars
    this.onehour = 1000 * 60 * 60;
    this.onemin  = 1000 * 60;
    this.onesec  = 1000;
}
Stopwatch.prototype.start = function() {
    var delegate = function(that, method) { return function() { return method.call(that) } };
    if(!this.started) {
        this.startTime = new Date().getTime();
        this.stopTime = 0;
        this.started = true;
        this.tickInterval = setInterval(delegate(this, this.onTick), this.tickResolution);
    }
}
Stopwatch.prototype.stop = function() {
    if(this.started) {
        this.stopTime = new Date().getTime();
        this.started = false;
        var elapsed = this.stopTime - this.startTime;
        this.totalElapsed += elapsed;
        if(this.tickInterval != null)
            clearInterval(this.tickInterval);
    }
    return this.getElapsed();
}
Stopwatch.prototype.reset = function() {
    this.totalElapsed = 0;
    // * if watch is running, reset it to current time
    this.startTime = new Date().getTime();
    this.stopTime = this.startTime;
}
Stopwatch.prototype.restart = function() {
    this.stop();
    this.reset();
    this.start();
}
Stopwatch.prototype.getElapsed = function() {
    // * if watch is stopped, use that date, else use now
    var elapsed = 0;
    if(this.started)
        elapsed = new Date().getTime() - this.startTime;
    elapsed += this.totalElapsed;

    var hours = parseInt(elapsed / this.onehour);
    elapsed %= this.onehour;
    var mins = parseInt(elapsed / this.onemin);
    elapsed %= this.onemin;
    var secs = parseInt(elapsed / this.onesec);
    var ms = elapsed % this.onesec;

    return {
        hours: hours,
        minutes: mins,
        seconds: secs,
        milliseconds: ms
    };
}
Stopwatch.prototype.setElapsed = function(hours, mins, secs) {
    this.reset();
    this.totalElapsed = 0;
    this.totalElapsed += hours * this.onehour;
    this.totalElapsed += mins  * this.onemin;
    this.totalElapsed += secs  * this.onesec;
    this.totalElapsed = Math.max(this.totalElapsed, 0); // * No negative numbers
}
Stopwatch.prototype.toString = function() {
    var zpad = function(no, digits) {
        no = no.toString();
        while(no.length < digits)
            no = '0' + no;
        return no;
    }
    var e = this.getElapsed();
    return zpad(e.hours,2) + ":" + zpad(e.minutes,2) + ":" + zpad(e.seconds,2);
}
Stopwatch.prototype.setListener = function(listener) {
    this.listener = listener;
}
// * triggered every <resolution> ms
Stopwatch.prototype.onTick = function() {
    if(this.listener != null) {
        this.listener(this);
    }
}
Stopwatch=函数(侦听器,分辨率){
this.startTime=0;
此值为0.stopTime=0;
this.totalappeased=0;//*总已用毫秒数
this.start=false;
this.listener=(listener!=未定义?listener:null);//*函数用于接收onTick事件
this.tickResolution=(分辨率!=未定义?分辨率:500);//*每个刻度之间的间隔时间(毫秒)
this.tickInterval=null;
//*漂亮的静态变量
1小时=1000*60*60;
此.onemin=1000*60;
这1.1秒=1000;
}
Stopwatch.prototype.start=函数(){
var delegate=function(that,method){return function(){return method.call(that)};
如果(!this.started){
this.startTime=new Date().getTime();
此值为0.stopTime=0;
this.started=true;
this.tickInterval=setInterval(委托(this,this.onTick),this.tickResolution);
}
}
Stopwatch.prototype.stop=函数(){
如果(此.started){
this.stopTime=新日期().getTime();
this.start=false;
var已用=this.stopTime-this.startTime;
this.totalappeased+=已用时间;
如果(this.tickInterval!=null)
clearInterval(这个.tickInterval);
}
返回这个.getAppeased();
}
Stopwatch.prototype.reset=函数(){
这个.totalappead=0;
//*如果手表正在运行,请将其重置为当前时间
this.startTime=new Date().getTime();
this.stopTime=this.startTime;
}
Stopwatch.prototype.restart=函数(){
这个。停止();
这是reset();
这个。start();
}
Stopwatch.prototype.getappeased=函数(){
//*如果手表停止,请使用该日期,否则请立即使用
var=0;
如果(此.started)
已用=新日期().getTime()-this.startTime;
已用时间+=此。总已用时间;
var hours=parseInt(已用/这个.1小时);
已用%=这1.1小时;
var mins=parseInt(已用/this.onemin);
已用%=此.onemin;
var secs=parseInt(已用/此.onesec);
var ms=已用%this.onesec;
返回{
小时:小时,
分钟:分钟,
秒:秒,
毫秒:毫秒
};
}
Stopwatch.prototype.setappeased=功能(小时、分钟、秒){
这是reset();
这个.totalappead=0;
this.totalappeased+=小时*this.onehour;
this.totalappeased+=mins*this.onemin;
this.totalappeased+=secs*this.onesec;
this.totalAppeased=Math.max(this.totalAppeased,0);//*无负数
}
Stopwatch.prototype.toString=函数(){
var zpad=功能(编号,数字){
否=否。toString();
while(编号长度<位数)
否='0'+否;
返回否;
}
var e=this.getappeased();
返回zpad(e.hours,2)+“:”+zpad(e.minutes,2)+“:”+zpad(e.seconds,2);
}
Stopwatch.prototype.setListener=函数(侦听器){
this.listener=listener;
}
//*每毫秒触发一次
Stopwatch.prototype.onTick=函数(){
if(this.listener!=null){
this.listener(this);
}
}
请原谅我的无知。我是这个领域的初学者,我试图理解如何实现和使用这段代码