Hướng dẫn sử dụng Timer trong Javascript

Trong bài viết này mình sẽ hướng dẫn các bạn tạo một thư viện Timer bằng Javascript

Nếu như bạn nào đã lập trình Winform thì chắc đã biết tới control Timer. Chỉ việc kéo thả, định thời gian chu kỳ (Interval) hoạt động và viết sự kiện Tick để thực hiện một Task nào đó. Tuy nhiên trong Javascript thì lại không có class Timer cho chúng ta sử dụng. 

Đây là thư viện mình tự viết để mô phỏng lại class Timer trong Winform C#.

Core.Timer = function (option)
{
	if (option == null) option = {};
	if (option.interval == null) option.interval = 500;

	var to = null;
	this.isRunning = false;

	this.setOption = function (withOption) { if (withOption != null) withOption(option); };

	this.start = function ()
	{
		var $this = this;

		if (this.isRunning) return;
		this.isRunning = true;

		var interval = typeof (option.interval) == "function" ? option.interval : function () { return option.interval; };
		this.onStart();
		var func = function ()
		{
			stopHelper();
			to = setTimeout(function ()
			{
				var result = option.stopWhen != null && option.stopWhen();
				if (result)
				{
					clearTimeout(to);
					to = null;
					$this.onStop();
					return;
				};

				if (option.onTick != null) option.onTick();
				if ($this.isRunning === true) func();
				else $this.onStop();
			}, interval());
		}
		func();
	}
	this.onStart = function () { }
	this.onStop = function () { }
	this.stop = function ()
	{
		if (this.isRunning == false) return;
		this.isRunning = false;
		stopHelper();
	};
	var stopHelper = function () { if (to != null) { clearTimeout(to); to = null; }; };
}
Options
Tham số Kiểu dữ liệu Giá trị mặc định Ghi chú
interval function hoặc int 500 (ms) Chu kỳ của Timer
onTick function null Task cần thực hiện sau mỗi chu kỳ
stopWhen function true return true để dừng Timer
Phương thức
Tên phương thức Ghi chú
this.setOption Dùng để thiết lập option
this.onStart Sự kiện khi bắt đầu chạy Timer
this.onStop Sự kiện khi Timer dừng
this.start Bắt đầu chạy Timer
this.stop Kết thúc chạy Timer
Giờ chúng ta sẽ thử một số ví dụ sau
1. Thử một Timer mà CountUp liên tục nhé
var UpCounter = function ()
{
    $.extend(this, new Core.Timer());

    this.elementShow;
    var count = 0;

    this.onStart = function ()
    {
        var $this = this;
        this.setOption(function (options)
        {                
            options.interval = 1000;
            options.tick = function ()
            {
                count++;
                $this.show();
            };
        });

        count = 0;
        this.show();
    }
    this.show = function ()
    {
        if (this.elementShow != null)
            this.elementShow.html(count);
    };
}

var content = $("article");

var counter = new UpCounter();
counter.elementShow = content.find("span[data-up-counter]");

var btn = content.find("[btn-up-counter]");
btn.click(function ()
{
    if (btn.state == null) btn.state = 0;
    if (btn.state == 0)
    {
        btn.state = 1;
        counter.start();
        btn.html("Dừng");
    }
    else
    {
        btn.state = 0;
        counter.stop();
        btn.html("Bắt đầu");
    }
});
2. Thử một Timer mà CountDown liên tục nhé
    var DownCounter = function ()
    {
        $.extend(this, new Core.Timer());

        this.elementShow;
        var count = 100;

        this.onStart = function ()
        {
            var $this = this;
            this.setOption(function (options)
            {
                options.interval = 1000;
                options.onTick = function ()
                {
                    count--;
                    $this.show();
                };
                options.stopWhen = function () { return count == 0; };
            });

            count = 100;
            this.show();
        }
        this.show = function ()
        {
            if (this.elementShow != null)
                this.elementShow.html(count);
        };
    }

    var content = $("article");

    var counter = new DownCounter();
    counter.elementShow = content.find("[data-counter-text=down]");
    var btn = content.find(".btn[data-counter=down]");
    counter.onStop = function ()
    {
        btn.state = 0;
        counter.stop();
        btn.html("Bắt đầu");
    }

    btn.click(function ()
    {
        if (btn.state == null) btn.state = 0;
        if (btn.state == 0)
        {
            btn.state = 1;
            counter.start();
            btn.html("Dừng");
        }
        else counter.onStop();
    });

Ở ví dụ này Timer CountDown có sử dụng thêm điều kiện dừng khi biến count = 0

Hy vọng thư viện nhỏ sẽ hữu ích cho các bạn khi cần

Nếu bạn thấy nội dung chia sẻ này có ích với bạn hãy Donate để tạo động lực cho tôi viết các bài viết tiếp theo nhé. Cảm ơn nhiều !!!!

Bài viết cùng chuyên mục

Hướng dẫn gửi email bằng code C#. Cấu hình tài khoản gmail để gửi email từ phần mềm.

Sử dụng thư viện SmtpClient để gửi email. Cấu hình tài khoản gmail ở trạng thái kém bảo mật để có thể gửi email từ phần mềm.

02/12/2020 Xem chi tiết
Các hướng đi cho lập trình viên khi lựa chọn ngôn ngữ lập trình.

Mình thì lựa chọn phát triển web nên đã chọn chuyên sâu về HTML, Css, Javascript, ASP.NET, SQL

23/11/2020 Xem chi tiết
Mật khẩu kém bảo mật được sử dụng phổ biến trong năm 2020

Bất ngờ với mật khẩu 123456 lại đứng top đầu danh sách. Cứ bảo sao tài khoản hay bị hack. Đúng là sai lầm và chủ quan.

20/11/2020 Xem chi tiết
Xây dựng khung phần mềm trên nền Web giao diện Desktop Window

Đã xây dựng gần như xong khung, chỉ việc viết module business để phát triển phần mềm trên nền tảng Web giao diện Window.

30/10/2020 Xem chi tiết
Tôi đã thiết kế ra design pattern Trứng có trước hay Gà có trước như thế nào

Về ý tưởng này tôi đã thực hiện khoảng 5,6 năm trước do tham gia vào dự án mà xây dựng các khối độc lập nhưng lại có tính năng tương tự nhau

19/10/2020 Xem chi tiết
Chia sẻ một số hiệu ứng Hover hữu ích khi làm Frontend viết bằng css

Gồm các hiệu ứng Hover ZoomIn, Hover Fade, Hover Blur, Hover Zoomout, Hover Mask, Hover Over Text, Hover Fall, Hover Blurout

16/10/2020 Xem chi tiết

Bài viết khác

Mã hóa dữ liệu bằng thuật toán TripleDES

Thuật toán mã hóa dữ liệu đối xứng. Sử dụng một mật khẩu để thực hiện mã hóa và giải mã

31/08/2020 Xem chi tiết
Hướng dẫn sử dụng thuộc tính filter css làm hiệu ứng đồ họa

Thuộc tính áp dụng để làm các hiệu ứng đồ họa như làm mờ hoặc chuyển màu cho các element

30/08/2020 Xem chi tiết
Mã hóa dữ liệu bằng thuật toán RSA

Thuật toán mã hóa bất đối xứng. Sử dụng private, public key để thực hiện mã hóa và giải mã

30/08/2020 Xem chi tiết
Công cụ mã hóa Javascript ECMA Script Packer

Mã hóa code javascript với lựa chọn: Numeric, Mid, Normal hoặc HighAscii

29/08/2020 Xem chi tiết
{"nalias":"huong-dan-su-dung-timer-trong-javascript","lang":"2","cattype":"0","catId":"3","UrlEngine":"UrlNewsEngine","site":"1"}