Xu Hướng 2/2024 # Hướng Dẫn Sử Dụng Jquery # Top 9 Xem Nhiều

Bạn đang xem bài viết Hướng Dẫn Sử Dụng Jquery được cập nhật mới nhất tháng 2 năm 2024 trên website Rafs.edu.vn. Hy vọng những thông tin mà chúng tôi đã chia sẻ là hữu ích với bạn. Nếu nội dung hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất.

1- Download jQuery

jQuery:

jQuery 1.x

jQuery 2.x

Cả hai phiên bản trên đều không có sự khác biệt về API, jQuery 1.x hỗ trợ tất cả các trình duyệt bao gồm cả IE 6,7,8 còn jQuery 2.x cũng hỗ trợ tất cả các trình duyệt trừ IE 6,7,8. Chính vì vậy bạn cần cân nhắc phiên bản để download về. Trong tài liệu hướng dẫn này tôi download phiên bản 1.x:

Bạn có 2 lựa chọn downloadCả hai phiên bản trên đều không có sự khác biệt về API, jQuery 1.x hỗ trợ tất cả các trình duyệt bao gồm cả IE 6,7,8 còn jQuery 2.x cũng hỗ trợ tất cả các trình duyệt trừ IE 6,7,8. Chính vì vậy bạn cần cân nhắc phiên bản để download về. Trong tài liệu hướng dẫn này tôi download phiên bản 1.x:

Kết quả download được:

2- Ví dụ Hello jQuery

Tạo thư mục examples, các ví dụ trong tài liệu này sẽ được đặt trong thư mục này.

Khai báo sử dụng thư viện jQuery:

Khi trang web trong tình trạng sẵn sàng, nghĩa là đối tượng document trong tình trạng sẵn sàng, jQuery sẽ bắt được sự kiện này thông qua phương thức ready.

jQuery(document).ready(function(){ alert('Hello jQuery'); }); $(document).ready(function(){ alert('Hello jQuery'); });

Hãy xem ví dụ đơn giản:

helloJQuery.html

jQuery(document).ready(function(){ alert("Hello jQuery"); });

Chạy ví dụ:

3- jQuery Selector

3.1- jQuery Selector là gì?

Khái niệm về Selector là một trong những khái niệm quan trọng nhất của jQuery.

3.2- Ví dụ với Selector

Ví dụ đầu tiên, lựa chọn tất cả các phần tử div trong tài liệu và sét đặt border cho nó thành “1px solid red”. Ở đây chúng ta sử dụng cú pháp:

jQuery('div') $('div')

selector_tagname.html

div { padding: 5px; margin:5px; width: 100px; } function selectDiv() { $('div').css("border","1px solid red"); }

Chạy thử ví dụ:

Lựa chọn các phần tử theo classname.

Cú pháp

jQuery('.abc') $('.abc')

selector_classname.html

h2, div { padding: 5px; margin:5px; width: 250px; } function selectByClassName() { $('.abc').css("border","1px solid red"); }

Chạy ví dụ:

3.3- Các cú pháp của Selector

Ở phần trên tôi đã giới thiệu một vài ví dụ về Selector, trong phần này tôi sẽ liệt kê ra các cú pháp khác của Selector.

Selector Ví dụ Lựa chọn

* $(“*”) Tất cả các phần tử

#id $(“#lastname”) Phần tử có id=”lastname”

.class $(“.intro”) Tất cả các phần tử có class=”intro”

.class,.class $(“.intro,.demo”) Tất cả các phần tử có class là “intro” hoặc “demo”

element $(“p”)

el1,el2,el3 $(“h1,div,p”)

     

:first $(“p:first”)

:last $(“p:last”)

:even $(“tr:even”)

:odd $(“tr:odd”)

     

:first-child $(“p:first-child”)

:first-of-type $(“p:first-of-type”)

:last-child $(“p:last-child”)

:last-of-type $(“p:last-of-type”)

:nth-child(n) $(“p:nth-child(2)”)

:nth-last-child(n) $(“p:nth-last-child(2)”)

:nth-of-type(n) $(“p:nth-of-type(2)”)

:nth-last-of-type(n) $(“p:nth-last-of-type(2)”)

:only-child $(“p:only-child”)

:only-of-type $(“p:only-of-type”)

     

parent descendant $(“div p”)

element + next $(“div + p”)

element ~ siblings $(“div ~ p”)

     

:eq(index) $(“ul li:eq(3)”) Phần tử thứ 4 trong danh sách (chỉ số bắt đầu từ số 0)

:gt(no) $(“ul li:gt(3)”) Danh sách các phần tử với chỉ số lớn hơn 3

:lt(no) $(“ul li:lt(3)”) Danh sách các phần tử với chỉ số nhỏ hơn 3

:not(selector) $(“input:not(:empty)”)

     

:header $(“:header”)

:animated $(“:animated”) Tất cả các phần tử hoạt hình (animated elements)

:focus $(“:focus”) Tất cả các phần tử đang được chọn (has focus)

:contains(text) $(“:contains(‘Hello’)”) Tất cả các phần tử chứa đoạn text “Hello”

:has(selector) $(“div:has(p)”)

:empty $(“:empty”) Tất cả các phần tử rỗng (empty)

:parent $(“:parent”) Tất cả các phần tử là cha mẹ của phần tử khác.

:hidden $(“p:hidden”)

:visible $(“table:visible”) Tất cả các table có thể nhìn thấy.

:root $(“:root”) Phần tử gốc của tài liệu.

:lang(language) $(“p:lang(de)”)

     

[attribute] $(“[href]”) Tất cả các phần tử với thuộc tính href

[attribute=value] $(“[href=’default.htm’]”) Tất cả các phần tử với thuộc tính href là “default.htm”

[attribute!=value] $(“[href!=’default.htm’]”) Tất cả các phần tử với thuộc tính href khác “default.htm”

[attribute$=value] $(“[href$=’.jpg’]”) Tất cả các phần tử với thuộc tính href có đuôi là “.jpg”

Tất cả các phần tử với thuộc tính title là ‘Tomorrow’, hoặc bắt đầu với ‘Tomorrow’

[attribute^=value] $(“[title^=’Tom’]”) Tất cả các phần tử có thuộc tính title bắt đầu với “Tom”

[attribute~=value] $(“[title~=’hello’]”) Tất cả các phần tử với thuộc tính title chứa “hello”

[attribute*=value] $(“[title*=’hello’]”) Tất cả các phần tử với thuộc tính có chứa từ “hello”

     

:input $(“:input”) Tất cả các phần tử đầu vào (input elements)

:text $(“:text”)

:password $(“:password”)

:radio $(“:radio”)

:checkbox $(“:checkbox”)

:submit $(“:submit”)

:reset $(“:reset”)

:button $(“:button”)

:image $(“:image”)

:file $(“:file”)

:enabled $(“:enabled”)

:disabled $(“:disabled”)

:selected $(“:selected”)

:checked $(“:checked”)

Các quy tắc ở trên là các quy tắc cơ bản, bạn có thể kết hợp chúng lại với nhau.

Các Selector kết hợp:

$(‘.abc’) – Các phần tử có class=’abc’.

$(‘#slider’) – Phần tử có ID là slider

Kết hợp:

Quy tắc:Kết hợp:

Kết hợp:

Quy tắc:Kết hợp:

Xem ví dụ:

selector_firstchildofdiv.html

h2, div , p { padding: 5px; margin:5px; width: 350px; border: 1px solid blue; } function selectAdv() { $('div p:first-child').css("background","#ccc"); }

Chạy ví dụ:

4- jQuery Attribute

Mỗi phần tử trong trang, với jQuery nó sẽ có các thuộc tính, và các phương thức có thể sử dụng.

Ví dụ một phần tử với các thuộc tính (attribute):

jQuery cung cấp cho bạn một số phương thức để lấy ra giá trị thuộc tính hoặc sét đặt giá trị cho thuộc tính.

4.1- Lấy ra giá trị của thuộc tính

Phương thức attr(name) của jQuery cho phép bạn lấy ra giá trị của thuộc tính của phần tử:

attribute_getatt.html

function getAttr() { var hrefValue = $('#atag').attr("href"); $('#atag').html(hrefValue); }

Chạy ví dụ:

4.2- Sét giá trị thuộc tính

Phương thức attr(name, value) sử dụng để sét đặt giá trị cho thuộc tính của phần tử.

attribute_setatt.html

function setAttr() { $('img').attr("src","images/jquery-mobile.png"); }

Chạy ví dụ:

4.3- Sét đặt Style

Phương thức addClass(classes) được sử dụng để áp dụng các style vào các phần tử. Bạn có thể sử dụng nhiều css-class phân cách nhau bởi khoảng trắng.

attribute_applystyle.html

.selected {color: red; } .highlight {background: yellow;} function applyStyle() { $('h1').addClass('selected highlight'); $('h2').addClass('selected'); }

Chạy ví dụ:

4.4- Các phương thức thao tác với thuộc tính

T.T Phương thức & Mô tả Ví dụ

1 attr( properties )

Sét key/value như các thuộc tính cho các phần tử phù hợp.

$(‘#id’).attr(‘href’)

$(‘a’).attr({href:’a.html’, alt:’a’})

2 attr( key, fn )

Sét đặt một giá trị được tính toán vào 1 thuộc tính duy nhất, cho tất cả các phần tử (element) phù hợp.

$(“table”).attr(“border”, function(index) {     return “1px”; })

3 removeAttr( name )

Hủy bỏ một thuộc tính từ các phần tử phù hợp.

$(“table”).removeAttr(“border”);

4 hasClass( class )

Trả về true nếu class chỉ định nằm trên ít nhất một phần tử thuộc tập hợp các phần tử phù hợp.

$(‘h1’).hasClass(‘highlight’)

5 removeClass( class )

Loại bỏ lớp (hoặc nhiều lớp) chỉ định ra khỏi tập hợp các phần tử phù hợp.

$(‘h1’).removeClass(‘highlight’)

6 toggleClass( class )

Thêm lớp (class) chỉ định vào phần tử nếu nó không có, hoặc loại bỏ lớp này nếu nó đã có trên phần tử.

$(‘h1’).toggleClass(‘highlight’)

7 html( )

Trả về nội dung html (innerHTML) của phần tử phù hợp đầu tiên.

$(‘a’).html()

8 html( val )

Sét nội dung html vào tất cả các phần tử phù hợp.

$(‘a’).html(‘Go to new page’)

9 text( )

Lấy nội dung văn bản kết hợp của tất cả các phần tử phù hợp.

$(‘div’).text()

10 text( val )

Sét các nội dung văn bản của tất cả các phần tử phù hợp.

$(‘div’).text(‘Text content’)

11 val( )

Lấy giá trị đầu vào của phần tử trùng khớp đầu tiên.

$(“input”).val();

12 val( val )

$(“input”).val(‘New value’);

5- DOM Traversing

5.1- Traversing là gì?

jQuery traversing, có nghĩa là “di chuyển qua”, nó được sử dụng để tìm kiếm (hoặc lựa chọn) các phần tử HTML dựa trên quan hệ của nó với các phần tử khác. Bắt đầu tại các vị trí (các phần tử) được chọn và di chuyển cho tới khi bắt gặp các phần tử mà bạn mong muốn.

Hãy xem một tài liệu HTML và nó được chuyển thành một cấu trúc DOM (dạng cây).

5.2- jQuery Traversing – Ancestors

Một phần tử tổ tiên (ancestor element) là phần tử cha, ông, v..v.. của một phần tử nào đó.

Với jQuery bạn có thể di chuyển lên (traverse up) các nút cao hơn của cây DOM để tìm kiếm các phần tử ancestors của một phần tử.

jQuery có một vài phương thức cho phép bạn di chuyển lên (traverse up) các nút DOM cao hơn (Ancetors).

parent()

parents()

parentsUntil()

Phương thức parent() trả về phần tử cha trực tiếp của phần tử đang chọn.

Ví dụ tìm tất cả các phần tử cha của phần tử có class=’abc’.

traversing_parent.html

div, ul, li { width: 200px;padding: 5px; margin: 5px; border: 1px solid blue;} .abc {border: 1px solid red;} function highlightParent() { $('.abc').parent().css("background","#ccc"); }

Chạy ví dụ:

5.2.2- parents

traversing_parents.html

div, ul, li { width: 200px;padding: 5px; margin: 5px; border: 1px solid blue;} .abc {border: 1px solid red;} function highlightParents() { $('.abc').parents('div').css("background","#ccc"); }

Chạy ví dụ:

Phương thức parentsUntil() trả về tất cả các phần tử tổ tiên nằm giữa 2 phần tử gồm phần tử đang chọn và phần tử xác định trong tham số.

traversing_parentsUntil.html

div, span, ul, li , h2 {padding: 5px; margin: 5px; border: 1px solid blue;} function highlightParentsUntil() { $('h2').parentsUntil('div').css("border","2px solid red"); } li element

Chạy ví dụ:

5.3- jQuery Traversing – Descendants

Tìm kiếm các phần tử hậu duệ (descendants) của các phần tử đã chọn. Chính là các phần tử con, cháu,…

jQuery cung cấp cho bạn 2 phương thức:

children()

find()

Phương thức này trả về tất cả các phần tử con trực tiếp của phần tử đang chọn.

traversing_children.html

div, span, ul, li , h2 {padding: 5px; margin: 5px; border: 1px solid blue;} function highlightChildren() { $('div').children().css("border","2px solid red"); } ul element

Chạy ví dụ:

Tìm kiếm các phần tử phù hợp trong tập hợp các phần tử hậu duệ của phần tử đang được chọn.

traversing_find.html

div, h2 , ul, li {padding: 5px; margin: 5px; border: 1px solid blue;} function highlightFind() { $('div').find('h2').css("border","2px solid red"); }

Chạy ví dụ:

5.4- jQuery Traversing – Siblings

Tìm kiếm các phần tử anh em, cùng phần tử cha với phần tử hiện tại.

jQuery cung cấp cho bạn một số phương thức tìm kiếm các phần tử anh em (sibling elements).

siblings()

next()

nextAll()

nextUntil()

prev()

prevAll()

prevUntil()

nextUntil(..) & prevUntil(..):

5.4.1- siblings(), next(), prev(), nextAll(), prevAll(), nextUntil(), prevUntil example

Các phương thức:

Phương thức Mô tả Ví dụ

siblings([selector]) Phương thức siblings() trả về tất cả các phần tử anh em của phần tử được chọn. $(‘h2’).siblings()

next([selector]) Phương thức next() trả về phần tử anh em kế tiếp của phần tử được chọn. $(‘h2’).next()

prev([selector]) $(‘h2’).prev()

nextAll([selector]) Phương thức nextAll() trả về tất cả các phần tử anh em kế tiếp của phần tử được chọn. $(‘h2’).nextAll()

prevAll([selector]) Phương thức prevAll() trả về tất cả cac phần tử anh em đứng trước phần tử được chọn. $(‘h2’).prevAll()

nextUntil(selector) Phương thức nextUntil() trả về các phần tử kế tiếp phần tử được chọn, cho tới khi gặp một phần tử phù hợp điều kiện của tham số. $(‘h2’).nextUntil(‘h4.blue’)

prevUntil(selector) Phương thức prevUntil() trả về các phần tử phía trước của phần tử đang được chọn, cho tới khi gặp một phần tử phù hợp điều kiện của tham số. $(‘h2’).prevUntil(‘h1’)

siblings(), next(), prev(), nextAll(), prevAll(), nextUntil(), prevUntil().

traversing_siblings.html

h1, h2, h4, p, div {padding: 5px; margin: 5px; border: 1px solid black;} h2 {border: 2px solid red;} .blue {border: 2px solid blue;} function clearAll() { $('h1, h2, h4, p, div').css("background","white"); } function highlightSiblings() { clearAll(); $('h2').siblings().css("background","yellow"); } function highlightNext() { clearAll(); $('h2').next().css("background","yellow"); } function highlightNextAll() { clearAll(); $('h2').nextAll().css("background","yellow"); } function highlightNextUntil() { clearAll(); $('h2').nextUntil('h4.blue').css("background","yellow"); } function highlightPrev() { clearAll(); $('h2').prev().css("background","yellow"); } function highlightPrevAll() { clearAll(); $('h2').prevAll().css("background","yellow"); } function highlightPrevUntil() { clearAll(); $('h2').prevUntil('h1').css("background","yellow"); }

Chạy ví dụ:

5.5- jQuery Traversing – Filtering

Các phương thức:

Phương thức Mô tả Ví dụ:

eq(index) Phương thức eq() trả về một phần tử ứng với chỉ số trong tham số trong tập các phần tử được chọn. $(‘p’).eq(1)

filter(selector) Phương thức filter() cần bạn chỉ rõ tiêu chí trong tham số. Các phần tử không khớp với tiêu chí sẽ bị loại bỏ khỏi tập hợp đang chọn, và trả về các phần tử phù hợp. $(‘p’).filter(‘.abc’)

filter(fn) Loại bỏ tất cả các phần tử trong tập hợp được chọn mà không phù hợp với hàm được chỉ định (Trong tham số), trả về các phần tử còn lại.  

first() Phương thức first() trả về phần tử đầu tiên trong danh sách được lựa chọn. $(‘p’).first()

has()    

is(selector) Kiểm tra các phần tử đang được lựa chọn có phù hợp với một biểu thức trong tham số không, nếu ít nhất một phần tử phù hợp phương thức trả về true.  

last() Phương thức last() trả về phần tử cuối cùng trong danh sách được lựa chọn. $(‘p’).last()

map(callback) Chuyển tập hợp các phần tử trong một đối tượng jQuery thành một tập hợp mảng (có thể là không chứa phần tử nào).  

not(selector) Phương thức not() trả về tất cả các phần tử không khớp với tiêu chí trong tham số.  

slice(start,[end]) Trả về một tập con của tập hợp đang chọn. $(‘p’).slice(1, 4) $(‘p’).slice(2)

Phương thức eq(index) trả về phần tử có chỉ số xác định trong tham số trong danh sách các phần tử đang được chọn.

Chỉ số được bắt đầu từ 0, như vậy phần tử đầu tiên có chỉ số là 0, chứ không phải 1.

Chỉ số được bắt đầu từ 0, như vậy phần tử đầu tiên có chỉ số là 0, chứ không phải 1.

$("p").eq(1);

Phương thức filter(selector) cần bạn chỉ rõ tiêu chí trong tham số. Các phần tử không khớp với tiêu chí sẽ bị loại bỏ khỏi tập hợp đang chọn, và trả về các phần tử phù hợp.

$("h3").filter(".abc");

Loại bỏ tất cả các phần tử trong tập hợp được chọn mà không phù hợp với hàm được chỉ định (Trong tham số), trả về các phần tử còn lại.

Tham số của hàm:

Ví dụ:

$('h4').filter(function(index, element) { if(index == 1) { return true; } if( $(element).hasClass('highlight') ) { return true; } return false; }).css('color','red');

Xem ví dụ đầy đủ:

traversing_filter_fn.html

div, h2 , ul, li {padding: 5px; margin: 5px; border: 1px solid blue;} function highlightFilter() { $('h4').filter(function(index, element) { if(index == 1) { return true; } if( $(element).hasClass('highlight') ) { return true; } return false; }).css('color','red'); }

Chạy ví dụ:

Phương thức not(selector) trả về tất cả các phần tử đang lựa chọn, và không khớp với tiêu chí trong tham số.

$('p').not('.abc')

Phương thức not(fn) trả về tất cả các phần tử đang lựa chọn mà không khớp với hàm fn.

Tham số của hàm:

Ví dụ:

$('h4').not(function(index, element) { if(index == 1) { return true; } if( $(element).hasClass('highlight') ) { return true; } return false; }).css('color','red');

Xem ví dụ đầy đủ:

traversing_not_fn.html

div, h2 , ul, li {padding: 5px; margin: 5px; border: 1px solid blue;} function highlightNot() { $('h4').not(function(index, element) { if(index == 1) { return true; } if( $(element).hasClass('highlight') ) { return true; } return false; }).css('color','red'); }

Chạy ví dụ:

Ví dụ:

$("div").has("p")

traversing_has.html

p, div {padding: 5px; margin: 5px; border: 1px solid blue; width: 300px;} function highlightHas() { $('div').has("p").css('border','2px solid red'); }

Chạy ví dụ:

6- jQuery Event

Các sự kiện được hỗ trợ trong mô hình DOM:

Kiểu sự kiện Sự kiện Mô tả

MOUSE EVENT

Xẩy ra khi có nhấn kép chuột

mouseenter Xẩy ra khi chuột đi vào vùng hiển thị của phần tử.

mouseleave Xẩy ra khi chuột ra khỏi vùng hiển thị của phần tử.

 

KEYBOARD EVENT keypress Xảy ra khi phím được nhấn và nhả.

keydown Xảy ra khi phím được nhấn.

keyup Xảy ra khi phím được nhả ra.

 

FORM EVENT submit Xảy ra khi form được gửi (submit)

change Xảy ra khi các phần tử (element) thay đổi.

focus Xảy ra khi các yếu phần tử được chọn.

blur Xảy ra khi các yếu phần tử mất lựa chọn.

 

DOCUMENT/WINDOW EVENT load Xảy ra khi tài liệu (document) được tải.

resize Xẩy ra khi window thay đổi kích thước.

scroll Xẩy ra khi window cuộn

unload Xẩy ra khi tài liệu bị hủy bỏ (unloaded).

error Xẩy ra khi có lỗi tải hoặc hủy tải,..(loading or unloading).

6.1- Cách thông dụng để xử lý sự kiện

$(document).ready(function() { $(this).css("background:#ccc"); }); $(this).css("background:yellow"); }); });

event_helloworld.html

h3 {border: 1px solid blue; padding: 5px; width: 200px;} h4 {border: 1px solid red; padding: 5px; width: 200px;} $(document).ready(function() { $(this).css("background","#ccc"); }); $(this).css("background","yellow"); }); });

Chạy ví dụ:

6.2- Sử dụng bind()/unbind()

Bạn có thể sử dụng bind() để gắn một hàm xử lý sự kiện cho các phần tử.

Cú pháp:

selector.bind( eventType[, eventData], handler)

eventData − Đây là tham số không bắt buộc là bản đồ (map) dữ liệu sẽ được chuyển vào cho hàm điều điều khiển sự kiện (event handler).

handler − Là một hàm để thực thi mỗi khi sự kiện xuất hiện.

 

Ví dụ:

$(document).ready(function() { alert('Hi there!'); }); });

Bạn có thể sử dụng unbind() để loại bỏ bộ điều khiển sự kiện (event handler)

Cú pháp:

selector.unbind(eventType, handler) selector.unbind(eventType)

handler − Nếu được cung cấp, nó sẽ chỉ định cụ thể cái sẽ được loại bỏ.

event_bind_unbind.html

h3 {border: 1px solid blue; padding: 5px; width: 300px;} h4 {border: 1px solid red; padding: 5px; width: 300px;} p {border: 1px solid green; padding: 5px; width: 300px;} $(document).ready(function() { $(this).css("background","#ccc"); }); $(this).css("background","yellow"); }); $("h3").css("background", "white"); }); });

Chạy ví dụ:

6.3- Các thuộc tính của Event (Event Attribute)

S.NO. Thuộc tính Mô tả

1 altKey Trả về true nếu phím Alt được nhấn khi sự kiện xẩy ra, ngược lại trả về false. Phím Alt thường được ghi nhãn là Option trên các bàn phím Mac.

2 ctrlKey Trả về true nếu phím Ctrl được nhấn khi sự kiện xẩy ra, ngược lại trả về false.

3 data Giá trị, nếu có, nó sẽ được chuyển vào tham số thứ hai của bind() khi thiết lập hàm xử lý.

4 keyCode Dùng cho sự kiện keyup hoặc keydown, nó trả về mã ký tự đã được nhấn.

5 metaKey Giá trị là true nếu phím Meta được nhấn khi sự kiện xẩy ra, ngược lại là false. Nút Meta chính là Ctrl trên các PC và là nút Command trên Mac.

6 pageX Sử dụng cho các sự kiện chuột, tọa độ vị trí theo chiều ngang mà sự kiện phát ra, tương đối so với trang hiện tại.

7 pageY Sử dụng cho các sự kiện chuột, tọa độ vị trí theo chiều thẳng đứng mà sự kiện phát ra, tính tương đối so với trang hiện tại.

8 relatedTarget Sử dụng cho các sự kiện chuột, xác định trạng thái con trỏ đi ra hay đi vào khi sự kiện phát ra.

9 screenX Sử dụng cho sự kiện chuột, xác định tạo độ theo chiều ngang mà sự kiện phát ra, so với màn hình hiện tại.

10 screenY Sử dụng cho sự kiện chuột, xác định tạo độ theo chiều thẳng đứng mà sự kiện phát ra, so với màn hình hiện tại.

11 shiftKey Giá trị true nếu nút Shift bị nhấn tại thời điểm sự kiện phát ra, ngược lại là false.

12 target Xác định phần tử phát ra sự kiện.

13 timeStamp Thời gian (tính bằng mili giây) khi sự kiện được tạo ra.

14 type

15 which Đối với sự kiện bàn phím, chỉ định mã có kiểu số (numeric code) cho phím gây ra sự kiện, nó là mã của ký tự đã nhấn, đối với sự kiện chuột nó xác định nút nào đã bị nhấn, trái, giữa hay phải (1 là nhấn trái, 2 nhấn nút giữa, 3 nhấn phải).

Xem ví dụ minh họa:

event_attribute.html

div {margin : 10px; width: 250px; height: 150px; float: left; } $(document).ready(function() { ; $('div#log').html(s); }); }); DIV 1 DIV 2

Chạy ví dụ:

6.4- Các phương thức của Event (Event methods)

No. Phương thức Mô tả

1 preventDefault() Ngăn chặn trình duyệt thực hiện các hành động mặc định.

2 isDefaultPrevented() Trả về true nếu đã gọi event.preventDefault().

3 stopPropagation() Ngăn chặn sự lan truyền sự kiện này tới các phần tử cha, các phần tử cha sẽ không nhận biết được sự kiện này, hoặc kích hoạt các sự kiện của nó.

4 isPropagationStopped() Trả về true nếu event.stopPropagation() đã từng được gọi trong sự kiện này.

5 stopImmediatePropagation() Ngăn chặn các phần còn lại của các bộ xử lý đang được thực thi.

6 isImmediatePropagationStopped() Trả về true nếu event.stopImmediatePropagation() đã từng được gọi trong sự kiện này.

Ví dụ khi bạn nhấn chuột phải vào trang web, mặc định một cửa sổ popup hiển thị lên. Bạn có thể sử dụng preventDefault() để ngăn chặn hành động mặc định này của trình duyệt.

$("div").bind('contextmenu', function(event) { if( $(this).attr('id') == "div2") { event.preventDefault(); } }); event.preventDefault(); alert("a element not working!!"); });

Xem ví dụ đầy đủ:

event_preventDefault.html

div {margin : 10px; padding:5px; width: 250px; height: 150px; float: left; } $(document).ready(function() { $("div").bind('contextmenu', function(event) { if( $(this).attr('id') == "div2") { event.preventDefault(); } }); event.preventDefault(); alert("a element not working!!"); }); }); Disable context menu

Chạy ví dụ:

event_stopPropagation.html

div {margin : 20px; padding:5px; float: left; } .outerDiv {background: red; width: 250px; height: 150px; } .innerDiv {background: yellow; width: 250px; height: 100px; } $(document).ready(function() { if( $(this).attr('id') == "stopDiv") { event.stopPropagation(); } }); }); Outer Div Inner Div Outer Div Inner Div (stopPropagation)

Chạy ví dụ:

Jquery Là Gì? Tổng Quan Và Hướng Dẫn Sử Dụng Jquery

jQuery là gì?

jQuery là thư viện được viết từ JavaScript, jQuery giúp xây dựng các chức năng bằng Javascript dễ dàng, nhanh và giàu tính năng hơn.

jQuery được tích hợp nhiều module khác nhau. Từ module hiệu ứng cho đến module truy vấn selector. jQuery được sử dụng đến 99% trên tổng số website trên thế giới. Vậy các module chính của jQuery là gì?

Các module phổ biến của jQuery bao gồm:

Ajax – xử lý Ajax

Atributes – Xử lý các thuộc tính của đối tượng HTML

Effect – xử lý hiệu ứng

Event – xử lý sự kiện

DOM – xử lý Data Object Model

Selector – xử lý luồng lách giữa các đối tượng HTML

jQuery không phải là một ngôn ngữ lập trình riêng biệt mà hoạt động liên kết với JavaScript. Với jQuery, bạn có thể làm được nhiều việc hơn mà lại tốn ít công sức hơn. jQuery cung cấp các API giúp việc duyệt tài liệu HTML, hoạt ảnh, xử lý sự kiện và thao tác AJAX đơn giản hơn. jQuery hoạt động tốt trên nhiều loại trình duyệt khác nhau. Một trong những đối thủ nặng ký của jQuery đó là JS Framework.

Bạn có thể tìm hiểu thêm về AJAX trong bài viết: “”

Lịch sử của jQuery

jQuery được phát hành vào tháng 1 năm 2006 bởi John Resig tại BarCamp NYC. Nó được duy trì và phát triển bởi một nhóm các nhà phát triển của Google đứng đầu là Timmy Wilson.

Các tính năng quan trọng của jQuery

Các tính năng quan trọng của jQuery là gì? Vì sao jQuery trở nên phổ biến và hữu dụng đến như vậy?

: jQuery là một thư viện khá gọn nhẹ – có kích cỡ khoảng 19KB (gzipped).

Tương thích đa nền tảng: Nó tự động sửa lỗi và chạy được trên mọi trình duyệt phổ biến như Chrome, Firefox, Safari, MS Edge, IE, Android và iOS.

Dễ dàng tạo Ajax: Nhờ thư viện jQuery, code được viết bởi Ajax có thể dễ dàng tương tác với server và cập nhật nội dung tự động mà không cần phải tải lại trang.

Xử lý nhanh nhạy thao tác DOM: jQuery giúp lựa chọn các phần tử DOM để traverse (duyệt) một cách dễ dàng, và chỉnh sửa nội dung của chúng bằng cách sử dụng Selector mã nguồn mở, mà còn được gọi là Sizzle.

Đơn giản hóa việc tạo hiệu ứng: Giống với code snippet có hiệu ứng animation, nó phủ các dòng code và bạn chỉ việc thêm biến/nội dung vào thôi.

Hỗ trợ tốt phương thức sự kiện HTML: Xử lý sự kiện − jQuery xử lý các sự kiện đa dạng mà không làm cho HTML code trở nên lộn xộn với các Event Handler.

Ưu điểm của jQuery là gì?

Ưu điểm của jQuery thì vừa quan trọng vừa đáng giá:

jQuery xử lý code rất nhanh và có khả năng mở rộng.

jQuery tạo điều kiện cho người dùng viết các mã chức năng bằng các dòng tối thiểu.

jQuery cải thiện hiệu suất lập trình web.

jQuery phát triển các ứng dụng có tương thích với trình duyệt.

Hầu hết các tính năng mới của trình duyệt mới đều được jQuery sử dụng.

Cách cài đặt jQuery Download jQuery

Cách thứ nhất là tải thư viện jQuery từ trang http://jQuery.com/download. Lựa chọn phiên bản nào tuỳ thuộc vào hai yếu tố: trình duyệt web mà bạn đang sử dụng và nơi bạn dùng jQuerySau đó, bạn có thể include thư viện jQuery vào trong HTML file của bạn như sau:

$(document).ready(function(){

document.write(“Hello, World!”);

});

Tại dòng:

Với src=”……” bạn điều hướng tới nơi lưu trữ file trên máy tính hoặc trên web hosting của bạn.

Sử dụng CDN

Cách thứ hai để liên kết thư viện jQuery đến trang web là dùng CDN ( Content Delivery Network). Với cách làm này thay vì tải thư viện jQuery về hay máy chủ, chúng ta sẽ liên kết đến thư viện jQuery của một số nhà cung cấp như cộng đồng jQuery, Google hay Microsoft. Các CDN phổ biến và tin cậy nhất hiện nay là:

Bạn có thể include thư viện jQuery vào trong HTML code một cách trực tiếp từ Content Delivery Network ( CDN). Bạn nên xem bài viết:”CDN là gì?” để hiểu rõ về CDN hơn.

Ví dụ:

Bây giờ chúng ta viết lại ví dụ trên bởi sử dụng thư viện jQuery từ Google CDN.

$(document).ready(function(){

document.write(“Hello, World!”);

});

Với:

Chứa đường dẫn file CDN jQuery mà bạn cần thêm vào src:”…….”

Các thuật ngữ cần biết của jQuery

jQuery chứa đựng khá nhiều những thuật ngữ khác nhau. Mắt Bão sẽ dẫn ra một số những thuật ngữ quan trọng nhất của jQuery mà các bạn cần biết:

jQuery Selectors

jQuery Tag Name

Tag ID

Tag Class

Function trong jQuery

Callback trong jQuery

Các Closure trong jQuery

Proxy Pattern trong jQuery

Phạm vi (Scope) trong jQuery

Các tham số trong jQuery

Context trong jQuery

jQuery Selectors là gì?

jQuery Selectors được sử dụng để chọn và thao tác các phần tử HTML. Đây là phần rất quan trọng trong thư viện jQuery. Với jQuery Selectors, bạn có thể tìm hoặc chọn các phần tử HTML dựa trên ID, classes, attributes, types và nhiều thứ khác từ DOM. Mỗi jQuery Selector bắt đầu bằng ký tự $ (). Kí tự này được gọi là factory function.

jQuery Tag Name là gì?

Nó đại diện cho một tên thẻ có sẵn trong DOM.

Ví dụ: $ (‘p’) chọn tất cả các đoạn văn ‘p’ trong tài liệu.

Tag ID

Tag ID đại diện cho một thẻ có sẵn với một ID cụ thể trong DOM.

Ví dụ: $ (‘# real-id’) chọn một phần tử cụ thể trong tài liệu có ID của real-id.

Tag Class

Tag Class đại diện cho một tag có sẵn với một class cụ thể trong DOM.

Ví dụ: $ (‘real-class’) chọn tất cả các phần tử trong tài liệu có class của real-class.

Function trong jQuery là gì?

Một hàm được đặt tên có thể được định nghĩa bởi sử dụng từ khóa function như sau:

function named(){ }

Một hàm ẩn danh có thể được gán tới một biến hoặc được truyền tới một phương thức như sau:

var handler = function (){ }

jQuery sử dụng rất nhiều hàm ẩn danh như sau:

$(document).ready(function(){ }); Callback trong jQuery là gì?

Một callback là một hàm thuần JavaScript được truyền một số phương thức như là một tham số hoặc tùy chọn. Một số callback là các sự kiện, được gọi để cung cấp cho người sử dụng cơ hội để phản ứng lại khi một trạng thái nào đó được kích hoạt.

Hệ thống sự kiện trong jQuery sử dụng các callback này ở khắp mọi nơi, ví dụ:

});

Hầu hết callback cung cấp các tham số và một context. Trong ví dụ event-handler, callback được gọi với một tham số, một Event.

Một số callback được yêu cầu để trả về cái gì đó, cái khác trả về giá trị tùy ý. Để ngăn cản sự đệ trình form, một xử lý sự kiện Submit có thể trả về false như sau:

$("#myform").submit(function() { return false; }); Các Closure trong jQuery

Các Closure được tạo bất cứ khi nào một biến được định nghĩa bên ngoài phạm vi hiện tại được truy cập từ bên trong phạm vi nội bộ.

Ví dụ sau chỉ cách biến counter là nhìn thấy trong các hàm create, increment, và print, nhưng không nhìn thấy bên ngoài chúng.

function create() { var counter = 0; return { increment: function() { counter++; }, print: function() { console.log(counter); } } } var c = create(); c.increment();

Pattern này cho phép bạn tạo các đối tượng với các phương thức, mà hoạt động trên dữ liệu, mà không thấy được ở bên ngoài. Bạn ghi nhớ rằng, data hiding là khái niệm rất cơ bản của các chương trình hướng đối tượng.

Proxy Pattern trong jQuery là gì?

Một Proxy có thể được sử dụng để điều khiển sự truy cập tới phần tử khác. Proxy thi hành cùng giao diện cho đối tượng khác này và truyền trên bất kỳ phương thức nào tới nó. Đối tượng khác này thường được gọi là Real Subject.

Một Proxy có thể được khởi tạo tại vị trí của Real Subject này và cho phép nó để được truy cập ở chế độ từ xa. Chúng ta có thể lưu giữ phương thức setArray của jQuery trong một Closure và viết đè lên (overwrite) nó như sau:

(function() { var proxied = jQuery.fn.setArray; jQuery.fn.setArray = function() { console.log(this, arguments); return proxied.apply(this, arguments); }; })();

Ví dụ trên bao code của nó trong một hàm để ẩn biến proxied. Sau đó, Proxy này log tất cả các lời gọi phương thức và ủy thác lời gọi đó cho phương thức ban đầu. Sử dụng apply(this, arguments) bảo đảm cho việc người gọi không thể chú ý về sự khác nhau giữa phương thức ban đầu và phương thức được ủy nhiệm.

Phạm vi (Scope) trong jQuery là gì?

Phạm vi của một biến là khu vực trong chương trình của bạn mà biến đó được định nghĩa. Biến trong JavaScript sẽ chỉ có hai phạm vi:

Các biến Global: Một biến Global có phạm vi chung, nghĩa là nó được định nghĩa ở mọi nơi trong JavaScript code của bạn.

Các biến Local: Một biến Local sẽ chỉ nhìn thấy bên trong một hàm nơi nó được định nghĩa. Các tham số hàm luôn luôn là Local cho hàm đó.

Local có quyền ưu tiên cao hơn biến Global mà có cùng tên.

function ( ) { }

Các tham số trong jQuery là gì?

Các tham số trong JavaScript là một loại của Array mà có thuộc tính length. Ví dụ sau giải thích về điều này:

function func(x){ console.log(typeof x, arguments.length); }

Đối tượng Argument cũng có một thuộc tính callee, mà tham chiếu đến hàm bạn đang ở trong đó. Ví dụ:

function func() { return arguments.callee; }

Từ khóa nổi tiếng trong JavaScript là this tham chiếu tới Context hiện tại. Trong một hàm, this có thể thay đổi, phụ thuộc cách hàm đó được gọi.

$(document).ready(function() { }); });

Bạn có thể xác định Context cho một lần hàm bởi sử dụng các phương thức call() và apply().

Sự khác nhau giữa chúng là cách chúng truyền các tham số.

call() truyền tất cả các tham số thông qua các tham số tới hàm

Trong khi apply() chấp nhận một mảng như là các tham số.

function scope() { console.log(this, arguments.length); }

scope() Hướng dẫn sử dụng jQuery cơ bản

Gọi hàm thư viện jQuery

Custom Script trong jQuery

Sử dụng nhiều thư viện trong jQuery

Gọi một hàm thư viện jQuery

Nếu bạn muốn để một sự kiện làm việc trên trang của bạn, bạn nên gọi nó bên trong hàm $(document).ready(). Mọi thứ bên trong sẽ tải ngay sau khi DOM được tải và trước khi nội dung trang được tải.

Để làm điều này, chúng ta đăng ký một sự kiện đã sẵn sàng cho tài liệu như sau:

$(document).ready(function() {

});

$(document).ready(function() {

});

Các hàm có sẵn trong jQuery là gì?

JavaScript đi kèm một tập hợp các hàm hữu ích gắn liền với nó. Những phương thức này có thể được sử dụng để thao tác String, Number, và Date.

Bảng dưới liệt kê các hàm JavaScript quan trọng:

charAt() Trả về ký tự tại chỉ mục (index) đã cho.

concat() Kết nối hai chuỗi văn bản và trả về một chuỗi mới.

forEach() Gọi một hàm cho mỗi phần tử của một mảng.

indexOf() Trả về chỉ mục về sự xuất hiện đầu tiên bên trong việc gọi đối tượng String với giá trị đã cho, hoặc -1 nếu không tìm thấy.

length() Trả về độ dài của chuỗi.

pop() Gỡ bỏ phần tử cuối của một mảng và trả về phần tử đó.

push() Thêm một hoặc nhiều phần tử tới phần cuối của một mảng và trả về độ dài mới của mảng đó.

reverse() Đảo ngược thứ tự các phần tử trong một mảng. Phần tử đầu tiên thành cuối cùng và cuối cùng thành đầu tiên.

sort() Sắp xếp phân loại các phần tử của một mảng.

substr() Trả về các ký tự trong một mảng bắt đầu từ vị trí đã cho từ số các ký tự đã xác định.

toLowerCase() Trả về giá trị chuỗi đang gọi được biến đổi thành kiểu chữ thường.

toString() Trả về sự biểu diễn chuỗi của giá trị số.

toUpperCase() Trả về giá trị chuỗi đang gọi được biến đổi thành chữ hoa.

Custom Script trong jQuery là gì?

jQuery thực sự chạy tốt hơn khi bạn có riêng Custom Code trong một Custom JavaScript file: chúng tôi , như sau:

Bây giờ chúng ta bao chúng tôi này vào trong HTML file như sau:

Sử dụng nhiều thư viện trong jQuery

Trong jQuery, bạn có thể sử dụng nhiều thư viện khác nhau mà không gây sự xung đột giữa chúng. Ví dụ, bạn có thể dùng song hành thư viện jQuery và thư viện MooTool JavaScript cùng với nhau. Bạn có thể kiểm tra phương thức: jQuery - Phương thức noConflict để tìm hiểu thêm chi tiết.

Nhìn chung, jQuery đã đáp ứng nhu cầu của lập trình hiện đại đó là hạn chế việc lập trình nhiều, nhưng vẫn đảm bảo các yêu cầu, đúng như slogan của jQuery "write less, do more" (viết mã ít mà hiệu quả đạt được lại tối đa). Hy vọng qua bài viết từ Mắt Bão - nhà cung cấp tên miền website uy tín, bạn sử dụng jQuery để phát triển thiết kế web thành công.

Hướng Dẫn Sử Dụng Dropbox

Giới thiệu: Dropbox là 1 dịch vụ lưu trữ miễn phí dựa trên công nghệ điện toán đám mây, giúp bạn lưu trữ  và chia sẻ tài liệu, hình ảnh, video,… mà không cần thông qua 1 thiết bị lưu trữ vật lý nào khác. Dịch vụ này hiện đang được sử dụng rộng rãi do tính tiện dụng của nó.

Hướng dẫn sử dụng dịch vụ Dropbox:

Trước tiên bạn cần tạo 1 tài khoản để sử dụng dropbox. Xem video hướng dẫn bên dưới: Hướng dẫn sử dụng Dropbox

Các thủ thuật khi sử dụng Dropbox

» Lưu trữ và truy vấn tài liệu mọi lúc mọi nơi: Công việc của bạn đơn giản chỉ là lưu các tập tin vào folder của Dropbox trong máy, mỗi khi bạn ra ngoài và sử dụng máy tính khác, bạn chỉ cần đăng nhập vào tài khoàn Dropbox của bạn tại https://www.dropbox.com/login để truy vấn những tài liệu mà bạn đã lưu chẳng hạn như hóa đơn, sổ sách,…

» Đồng bộ hóa/chia sẻ dữ liệu trong máy tính với các thiết bị khác (PC, iMac, iPhone…) của bạn:

Công việc này khá là đơn giản, bước đầu tiên  cần phải làm đó chính là cài đặt Dropbox cho cả hai (hoặc nhiều hơn) thiết bị mà  muốn đồng bộ hóa/chia sẻ dữ liệu.

Shared Folder là gì?

Shared Folder là thư mục mà bạn sẽ dùng để đồng bộ hóa hay nói đúng hơn là dùng để chia sẻ các tập tin có trong đó với các thiết bị khác của bạn.

Có 2 cách để tạo một Shared Folder:

Cách 1: Tạo trực tiếp trên máy tính của bạn: (hoặc các thiết bị được Dropbox hỗ trợ khác)

Hãy mở thư mục Dropbox trong máy tính (hoặc iMac, iPhone…) của mình

Lưu ý: Đối với trường hợp gửi thư mời tới nhiều hơn 2 tài khoản thì  cần phải sử dụng dấu phẩy có cách “, ” để phân biệt giữa các địa chỉ e-mail với nhau.

Nếu  là chủ của tài khoản Dropbox được mời:

 Hãy đăng nhập vào địa chỉ e-mail được mời và check mail

Đăng nhập vào tài khoản Dropbox được mời (nếu hệ thống không tự động đăng nhập)

Cách 2: Tạo trực tiếp trên website của Dropbox :

Sẽ có 2 cách:

Cách 1:

Đăng nhập vào tài khoản Dropbox của  theo đường dẫn sau: https://www.dropbox.com/login

Sau khi tạo thành công một thư mục mới,  hãy tick vào ô vuông ở phía trước thư mục vừa tạo rồi sau đó chọn thẻ Invite this folder để tạo Shared Folder cho thư mục mà bạn vừa tạo

Tiếp theo làm tương tự như Cách Tạo trực tiếp trên máy tính.

Cách 2: Nguồn:

Đăng nhập vào tài khoản Dropbox của  theo đường dẫn sau: https://www.dropbox.com/login#login

Để tạo mới,  hãy tick vào ô I’d like to creat and share a new folder rồi sau đó điền tên thư mục mà mình muốn tạo vào khung New folder name

Công việc tiếp theo sẽ tương tự như Tạo trực tiếp trên máy tính.

Lưu ý: Quá trình tạo Shared Folder sẽ không bắt buộc là phải tạo trên một thiết bị nhất định nào đó. Sau khi một Shared Folder đã được đồng bộ hóa/chia sẻ dữ liệu, ngay lập tức các thiết bị được mời sử dụng Shared Folder này sẽ tự động tạo một thư mục Share Folder giống y nguyên thư mục Shared Folder gốc (kể cả các dữ liệu bên trong) vào trong thư mục My Dropbox của họ! Do đó các thư mục Shared Folder sẽ hoàn toàn giống nhau trong các thiết bị mời và được mời. Tuy nhiên, sẽ có một số ưu thế cho tài khoản Dropbox mời – tài khoản mà đã tạo ra Shared Folder

– Bạn không thể tạo Shared Folder trong thư mục Public được – Bạn không thể tạo Shared Folder con trong một thư mục Shared Folder mẹ được – Những người được mời sử dụng Shared Folder sẽ có toàn quyền quyết định tới Shared Folder đó bao gồm: xóa, thêm, đổi tên… các tập tin hoặc thư mục có trong Shared Folder đó – Những người được mời sử dụng Shared Folder sẽ có toàn quyền được mời người khác cùng sử dụng Shared Folder đó – Chỉ có tài khoản tạo ra Shared Folder mới có quyền trục xuất các tài khoản Dropbox đã được mời – Nếu có 2 tài khoản cùng một lúc thay đổi các thông tin của tập tin hoặc thư mục trong Shared Folder, Dropbox sẽ lưu lại cả 2 sự thay đổi đó với 2 tập tin hoặc thực mục riêng biệt.

Share this:

Twitter

Facebook

Like this:

Số lượt thích

Đang tải…

Hướng Dẫn Sử Dụng Stream

Stream là một class nó mô phỏng một dòng các byte được sắp hàng một cách liên tiếp nhau. Chẳng hạn như việc truyền tải dữ liệu trên mạng các dữ liệu truyền đi là dòng các byte liên tiếp nhau từ byte đầu tiên cho tới các byte cuối cùng.

Stream là một class cơ sở, các luồng (stream) khác mở rộng từ class này. Có một vài class đã được xây dựng sẵn trong C#, chúng mở rộng từ lớp Stream cho các mục đích khác nhau, chẳng han:

ClassMô tả

BufferedStream

Một luồng tiện ích, nó bao bọc (wrap) một luồng khác giúp nâng cao hiệu năng.

FileStream

Luồng sử dụng để đọc ghi dữ liệu vào file.

MemoryStream

Luồng làm việc với các dữ liệu trên bộ nhớ.

UnmanagedMemoryStream

IsolatedStorageFileStream

PipeStream

NetworkStream

CryptoStream

Luồng đọc ghi dữ liệu được mật mã hóa.

DeflateStream

GZipStream

Stream là một lớp trừu tượng, tự nó không thể khởi tạo một đối tượng, bạn có thể khởi tạo một đối tượng Stream từ các phương thức khởi tạo (Constructor) của class con. Lớp Stream cung cấp các phương thức cơ bản làm việc với luồng dữ liệu, cụ thể là các phương thức đọc ghi một byte hoặc một mảng các byte..

Tùy thuộc vào luồng, có những luồng hỗ trợ cả đọc và ghi, và cả tìm kiếm (seek) bằng cách di chuyển con trỏ trên luồng, và ghi đọc dữ liệu tại vị trí con trỏ.

Các thuộc tính (property) của Stream:

Thuộc tínhMô tả

CanRead

Thuộc tính cho biết luồng này có hỗ trợ đọc không.

CanSeek

Thuộc tính cho biết luồng này có hỗ trợ tìm kiếm (seek) hay không

CanWrite

Thuộc tính cho biết luồng này có hỗ trợ ghi hay không

Length

Trả về độ dài của luồng (Số bytes)

Position

Vị trí hiện tại của con trỏ trên luồng.

Các phương thức của Stream:

Với Stream bạn có thể ghi từng byte hoặc ghi một mảng các byte vào luồng (stream). Và khi đọc bạn có thể đọc từng byte hoặc đọc nhiều byte và gán vào một mảng tạm.

Một byte là 8 bit, trong đó một bit là 0 hoặc 1. Như vậy 1 byte tương ứng với một số từ 0 tới 255 (2^8 – 1).

2.1- Ví dụ luồng ghi dữ liệu

Và bây giờ hãy bắt đầu với một ví dụ đơn giản, tạo một Stream ghi dữ liệu vào File. Bạn có thể ghi từng byte vào stream hoặc ghi một mảng các byte vào Stream.

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace CSharpStreamsTutorial { class StreamWriteDemo { public static void Main(string[] args) { string path = @"C:tempMyTest.txt"; Directory.CreateDirectory(@"C:temp"); Stream writingStream = new FileStream(path, FileMode.Create); try { byte[] bytes = new byte[] { 72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100 }; if (writingStream.CanWrite) { writingStream.Write(bytes, 0, bytes.Length); writingStream.WriteByte(33); } } catch (Exception e) { Console.WriteLine("Error:" + e); } finally { writingStream.Close(); } Console.ReadLine(); } } }

Chú ý: Trong bảng mã ký tự CSII, mỗi ký tự CSII tương ứng với một con số < 256.

Ký tựGiá trịKý tựGiá trị 2.2- Ví dụ luồng đọc dữ liệu

Ví dụ ở trên bạn đã ghi dữ liệu vào file C:tempMyTest.txt, bây giờ bạn có thể viết một stream đọc dữ liệu từ file đó.

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace CSharpStreamsTutorial { class StreamReadDemo { public static void Main(string[] args) { String path = @"C:tempMyTest.txt"; if (!File.Exists(path)) { Console.WriteLine("File " + path + " does not exists!"); return; } using (Stream readingStream = new FileStream(path, FileMode.Open)) { byte[] temp = new byte[10]; UTF8Encoding encoding = new UTF8Encoding(true); int len = 0; { String s = encoding.GetString(temp, 0, len); Console.WriteLine(s); } } Console.ReadLine(); } } }

FileStream là một lớp mở rộng từ lớp Stream, FileStream được sử dụng để đọc và ghi dữ liệu vào file, nó được thừa kế các thuộc tính (property), phương thức từ Stream, đồng thời có thêm các chức năng dành riêng cho đọc ghi dữ liệu vào file.

Có một vài chế độ đọc ghi dữ liệu vào file:

FileModeMô tả

Append

Mở file nếu nó đã tồn tại, di chuyển con trỏ về cuối tập tin để nó thể ghi nối tiếp vào file, nếu file không tồn tại nó sẽ được tạo ra.

Create

Nói với hệ điều hành tạo một tập tin mới. Nếu tập tin đã tồn tại, nó sẽ được ghi đè.

CreateNew

Nói với hệ điều hành tạo ra một file mới. Nếu file đã tồn tại ngoại lệ IOException sẽ được ném ra. Chế độ này yêu cầu phải có quyền FileIOPermissionAccess.Write

OpenOrCreate

Nói với hệ điều hảnh nên mở một tập tin nếu nó tồn tại; nếu không, một tập tin mới sẽ được tạo ra.

FileStreamFileModeDemo.cs

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace CSharpStreamsTutorial { class FileStreamFileModeDemo { public static void Main(string[] args) { String path = @"C:tempMyTest.txt"; if (!File.Exists(path)) { Console.WriteLine("File " + path + " does not exists!"); Directory.CreateDirectory(@"C:temp"); } using (FileStream writeFileStream = new FileStream(path, FileMode.Append) ) { string s = "nHello every body!"; byte[] bytes = Encoding.UTF8.GetBytes(s); writeFileStream.Write(bytes, 0, bytes.Length); } Console.WriteLine("Finish!"); Console.ReadLine(); } } }

Với FileMode.Append dữ liệu sẽ được nối thêm vào file, nếu file đó đã tồn tại:

Phương thức khởi tạo (Constructor):

Class FileStream có 11 constructor (Không tính các constructor bị lỗi thời) dùng để khởi tạo một đối tượng FileStream:

FileStream(SafeFileHandle, FileAccess) FileStream(SafeFileHandle, FileAccess, Int32) FileStream(SafeFileHandle, FileAccess, Int32, Boolean) FileStream(String, FileMode) FileStream(String, FileMode, FileAccess) FileStream(String, FileMode, FileAccess, FileShare) FileStream(String, FileMode, FileAccess, FileShare, Int32) FileStream(String, FileMode, FileAccess, FileShare, Int32, Boolean) FileStream(String, FileMode, FileAccess, FileShare, Int32, FileOptions) FileStream(String, FileMode, FileSystemRights, FileShare, Int32, FileOptions) FileStream(String, FileMode, FileSystemRights, FileShare, Int32, FileOptions, FileSecurity)

Tuy nhiên bạn cũng có các cách khác để tạo đối tượng FileStream, chẳng hạn thông qua FileInfo, đây là là class đại diện cho một file trong hệ thống.

Phương thức của FileInfo trả về FileStream.Mô tả

Create()

Bởi mặc định, tất cả các quyền đọc ghi file mới này sẽ gán cho tất cả các users.

Open(FileMode)

Mở file với chế độ được chỉ định.

Open(FileMode, FileAccess)

Mở file với chỉ định chế độ đọc, ghi, hoặc quyền đọc ghi.

Open(FileMode, FileAccess, FileShare)

Mở file với chỉ định chế độ đọc, ghi, hoặc quyền đọc ghi, và các lựa chọn chia sẻ.

Ví dụ tạo FileStream từ FileInfo:

FileStreamFileInfoDemo.cs

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace CSharpStreamsTutorial { class FileStreamFileInfoDemo { public static void Main(string[] args) { FileInfo afile = new FileInfo(@"C:tempMyTest.txt"); if (afile.Exists) { Console.WriteLine("File does not exist!"); Console.Read(); return; } using (FileStream stream = afile.Open(FileMode.Truncate)) { String s = "New text"; byte[] bytes = Encoding.UTF8.GetBytes(s); stream.Write(bytes, 0, bytes.Length); } Console.WriteLine("Finished!"); Console.Read(); } } }

BufferedStream là một lớp mở rộng từ lớp Stream, nó là một luồng (stream) bộ đệm bao lấy (wrap) một stream khác, giúp nâng cao hiệu quả đọc ghi dữ liệu.

BufferedStream chỉ có 2 phương thức khởi tạo (Constructor), nó bao lấy một stream khác.

Phương thức khởi tạo (Constructor)Mô tả

Tôi đưa ra một tình huống, bạn tạo ra một luồng bộ đệm ( BufferedStream) bao lấy FileStream, với mục đích ghi dữ liệu xuống file. Các dữ liệu ghi vào luồng bộ đệm tạm thời sẽ nằm trên bộ nhớ, và khi bộ đệm đầy, dữ liệu tự động được đẩy (Flush) xuống file, bạn có thể chủ động đẩy dữ liệu xuống file bằng cách sử dụng phương thức Flush(). Sử dụng BufferedStream trong trường hợp này giúp giảm số lần phải ghi xuống ổ đĩa, và vì vậy nó làm tăng hiệu suất của chương trình.

BufferedStreamWriteFileDemo.cs

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace CSharpStreamsTutorial { class BufferedStreamWriteFileDemo { public static void Main(string[] args) { String fileName = @"C:tempMyFile.txt"; FileInfo file = new FileInfo(fileName); file.Directory.Create(); using (FileStream fileStream = file.Create()) { using (BufferedStream bs = new BufferedStream(fileStream, 10000)) { int index = 0; for (index = 1; index < 2000; index++) { String s = "This is line " + index + "n"; byte[] bytes = Encoding.UTF8.GetBytes(s); bs.Write(bytes, 0, bytes.Length); } bs.Flush(); } } Console.WriteLine("Finished!"); Console.Read(); } } }

MemoryStream là một lớp mở rộng trực tiếp từ lớp Stream, nó là luồng (stream) mà dữ liệu được lưu trữ (store) trên bộ nhớ.

Về bản chất MemoryStream là một đối tượng nó quản lý một bộ đệm (buffer) là một mảng các byte, khi các byte được ghi vào luồng này nó sẽ tự động được gán vào các vị trí tiếp theo tính từ vị trí hiện tại của con trỏ trên mảng. Khi bộ đệm đầy một mảng mới có kích thước lớn hơn được tạo ra, và copy các dữ liệu từ mảng cũ sang.

Constructor:

MemoryStream()

MemoryStream(Byte[] buffer)

MemoryStream(Byte[] buffer, Boolean writable)

MemoryStream(Byte[] buffer, Int32 index, Int32 count, Boolean writable)

MemoryStream(Byte[] buffer, Int32 index, Int32 count, Boolean, Boolean publiclyVisible)

MemoryStream(Byte[], Int32, Int32, Boolean, Boolean)

MemoryStream(Int32 capacity)

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace CSharpStreamsTutorial { class MemoryStreamDemo { static void Main() { MemoryStream memoryStream = new MemoryStream(100); byte[] javaBytes = Encoding.UTF8.GetBytes("Java"); byte[] csharpBytes = Encoding.UTF8.GetBytes("CSharp"); memoryStream.Write(javaBytes, 0, javaBytes.Length); memoryStream.Write(csharpBytes, 0, csharpBytes.Length); Console.WriteLine("Capacity: {0} , Length: {1}", memoryStream.Capacity.ToString(), memoryStream.Length.ToString()); Console.WriteLine("Position: "+ memoryStream.Position); memoryStream.Seek(-6, SeekOrigin.Current); Console.WriteLine("Position: " + memoryStream.Position); byte[] vsBytes = Encoding.UTF8.GetBytes(" vs "); memoryStream.Write(vsBytes, 0, vsBytes.Length); byte[] allBytes = memoryStream.GetBuffer(); string data = Encoding.UTF8.GetString(allBytes); Console.WriteLine(data); Console.WriteLine("Finish!"); Console.Read(); } } }

Sử dụng UnmanagedMemoryStream cho phép bạn đọc các luồng dữ liệu không được quản lý mà không cần sao chép tất cả chúng lên quản lý ở bộ nhớ Heap trước khi sử dụng. Nó giúp bạn tiết kiệm bộ nhớ nếu bạn đang phải đối phó với rất nhiều dữ liệu.

Lưu ý rằng có một giới hạn 2GB đối với MemoryStream vì vậy bạn phải sử dụng các UnmanagedMemoryStream nếu bạn vượt quá giới hạn này.

Tôi đưa ra một tình huống: Có các dữ liệu rời rạc nằm sẵn trên bộ nhớ. Và bạn có thể tập hợp chúng lại để quản lý bởi UnmanagedMemoryStream bằng cách quản lý các con trỏ (pointer) của các dữ liệu rời rạc nói trên, thay vì bạn copy chúng lên luồng (stream) để quản lý.

Constructor:

UnmanagedMemoryStream()

UnmanagedMemoryStream(Byte* pointer, Int64 length)

UnmanagedMemoryStream(Byte* pointer, Int64 length, Int64 capacity, FileAccess access)

UnmanagedMemoryStream(SafeBuffer buffer, Int64 offset, Int64 length)

UnmanagedMemoryStream(SafeBuffer buffer, Int64 offset, Int64 length, FileAccess access)

CryptoStream là một lớp, sử dụng cho việc mật mã hóa luồng dữ liệu.

Trong một tình huống ngược lại, một luồng CryptoStream bao lấy một luồng đọc file (File mà nội dung đã mã hóa ở trên), các byte trên luồng FileStream là các byte đã được mật mã hóa (encrypt), nó sẽ được giải mật (decrypt) bởi CryptoStream.

Một điều quan trọng bạn cần nhớ rằng, không phải thuật toán mật mã hóa nào cũng có 2 chiều mật mã hóa và giải mật mã hóa.

Hãy xem một ví dụ:

Ở đây tôi sử dụng thuật toán DES để mã hóa và giải mã, bạn cần cung cấp mảng 128 bit nó là chìa khóa bảo mật của bạn.

DESCryptoServiceProvider provider = new DESCryptoServiceProvider(); provider.Key = ASCIIEncoding.ASCII.GetBytes("1234abcd"); provider.IV = ASCIIEncoding.ASCII.GetBytes("12345678"); ICryptoTransform encryptor = provider.CreateEncryptor(); ICryptoTransform decryptor = provider.CreateDecryptor(); using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Security.Cryptography; namespace CSharpStreamsTutorial { class CryptoStreamExample { public static void Main(string[] args) { DESCryptoServiceProvider provider = new DESCryptoServiceProvider(); chúng tôi = ASCIIEncoding.ASCII.GetBytes("1234abcd"); chúng tôi = ASCIIEncoding.ASCII.GetBytes("12345678"); String encryedFile = @"C:tempEncryptedFile.txt"; using (FileStream stream = new FileStream(encryedFile, FileMode.OpenOrCreate, FileAccess.Write)) { ICryptoTransform encryptor = provider.CreateEncryptor(); using (CryptoStream cryptoStream = new CryptoStream(stream, encryptor, CryptoStreamMode.Write)) { byte[] data = ASCIIEncoding.ASCII.GetBytes("Bear, I love you. OK?"); cryptoStream.Write(data, 0, data.Length); } } Console.WriteLine("Write to file: " + encryedFile); using (FileStream stream = new FileStream(encryedFile, FileMode.Open, FileAccess.Read)) { ICryptoTransform decryptor = provider.CreateDecryptor(); using (CryptoStream cryptoStream = new CryptoStream(stream, decryptor, CryptoStreamMode.Read)) { byte[] temp = new byte[1024]; int read=0; { String s= Encoding.UTF8.GetString(temp,0,read); Console.Write(s); } } } Console.Read(); } } }

Xem nội dung của file vừa được tạo ra.

Hướng Dẫn Sử Dụng Android Spinner

Khi người dùng nhấn vào Android Spinner, một danh sách sẽ được thả xuống chứa tất cả các giá trị, và người dùng có thể lựa chọn một giá trị.

Android Spinner có 2 chế độ (mode) với giao diện khác nhau hoàn toàn:

android:spinnerMode=”dropdown”

android:spinnerMode=”dialog”

android:spinnerMode=”dropdown”

android:spinnerMode=”dropdown”

android:spinnerMode=”dialog”

android:spinnerMode=”dialog”

2- Ví dụ: Spinner + ArrayAdapter

OK, Bây giờ chúng ta sẽ bắt đầu với một ví dụ đơn giản sử dụng Spinner và ArrayAdapter. Trong ví dụ này Spinner sẽ chứa một danh sách các đối tượng Employee:

Một Adapter giúp bạn kết hợp một Spinner-Item Layout Resource và dữ liệu để tạo ra một Spinner.

Trên Android Studio tạo mới một project:

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginLeft="16dp" android:layout_marginTop="16dp" android:layout_marginEnd="16dp" android:layout_marginRight="16dp" android:orientation="horizontal" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0" <Space android:layout_width="10dp" android:layout_height="wrap_content" <Spinner android:id="@+id/spinner_employee" android:layout_width="wrap_content" android:layout_height="wrap_content" package org.o7planning.spinnerexample; import android.os.Bundle; import android.view.View; import android.widget.Adapter; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { private Spinner spinnerEmployee; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.spinnerEmployee = (Spinner) findViewById(R.id.spinner_employee); Employee[] employees = EmployeeDataUtils.getEmployees(); android.R.layout.simple_spinner_item, employees); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); this.spinnerEmployee.setAdapter(adapter); this.spinnerEmployee.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override onItemSelectedHandler(parent, view, position, id); } @Override } }); } Adapter adapter = adapterView.getAdapter(); Employee employee = (Employee) adapter.getItem(position); Toast.makeText(getApplicationContext(), "Selected Employee: " + employee.getFullName() ,Toast.LENGTH_SHORT).show(); } } package org.o7planning.spinnerexample; public class Employee { private String firstName; private String lastName; private String position; private int salary; public Employee(String firstName, String lastName, String position, int salary) { this.firstName = firstName; this.lastName = lastName; this.position = position; this.salary = salary; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getPosition() { return position; } public void setPosition(String position) { this.position = position; } public int getSalary() { return salary; } public void setSalary(int salary) { this.salary = salary; } public String getFullName() { return this.firstName + " " + this.lastName; } @Override public String toString() { return this.getFullName() + " - (" + this.position+")"; } } package org.o7planning.spinnerexample; public class EmployeeDataUtils { public static Employee[] getEmployees() { Employee emp1 = new Employee("James", "Smith", "Receptionist", 1000); Employee emp2 = new Employee("Michael", "Garcia", "CEO", 50000); Employee emp3 = new Employee("Robert", "Johnson", "Professional staff", 2000); return new Employee[] {emp1, emp2, emp3}; } } 3- Ví dụ: Spinner + CustomAdapter

OK. Trên Android Studio tạo mới một project:

Name: CustomSpinnerAdapterExample

Package name: org.o7planning.customspinneradapterexample

Language: Java

Đầu tiên, chúng ta cần tạo một Layout Resource File để định nghĩa Layout cho Spinner Item:

Trên Android Studio, chọn thư mục “layout”, và chọn:

File Name: spinner_item_layout_resource.xml

Root element: LinearLayout

Thiết kế giao diện cho spinner_item_layout_resource:

spinner_item_layout_resource.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" <TextView android:id="@+id/textView_item_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" <TextView android:id="@+id/textView_item_percent" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0"

Giao diện chính của ứng dụng:

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" <TextView android:id="@+id/textView" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginLeft="16dp" android:layout_marginTop="32dp" android:layout_marginEnd="16dp" android:layout_marginRight="16dp" android:text="Select Language:" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="1.0" app:layout_constraintStart_toStartOf="parent" <Spinner android:id="@+id/spinner_language" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginLeft="16dp" android:layout_marginTop="16dp" android:spinnerMode="dialog" app:layout_constraintStart_toStartOf="parent" package org.o7planning.customspinneradapterexample; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.Spinner; import java.util.List; public class MainActivity extends AppCompatActivity { private Spinner spinner; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.languages = LanguageDataUtils.getLanguages(); this.spinner = (Spinner) this.findViewById(R.id.spinner_language); CustomAdapter adapter = new CustomAdapter(MainActivity.this, R.layout.spinner_item_layout_resource, R.id.textView_item_name, R.id.textView_item_percent, this.languages); this.spinner.setAdapter(adapter); } } package org.o7planning.customspinneradapterexample; import android.app.Activity; import android.view.View; import android.view.ViewGroup; import android.view.LayoutInflater; import android.widget.BaseAdapter; import android.widget.TextView; import java.util.List; public class CustomAdapter extends BaseAdapter { private LayoutInflater flater; private int listItemLayoutResource; private int textViewItemNameId; private int textViewItemPercentId; public CustomAdapter(Activity context, int listItemLayoutResource, int textViewItemNameId, int textViewItemPercentId, this.listItemLayoutResource = listItemLayoutResource; this.textViewItemNameId = textViewItemNameId; this.textViewItemPercentId = textViewItemPercentId; chúng tôi = list; this.flater = context.getLayoutInflater(); } @Override public int getCount() { if(this.list == null) { return 0; } return this.list.size(); } @Override public Object getItem(int position) { return this.list.get(position); } @Override public long getItemId(int position) { Language language = (Language) this.getItem(position); return language.getId(); } @Override public View getView(int position, View convertView, ViewGroup parent) { Language language = (Language) getItem(position); View rowView = this.flater.inflate(this.listItemLayoutResource, null,true); TextView textViewItemName = (TextView) rowView.findViewById(this.textViewItemNameId); textViewItemName.setText(language.getName()); TextView textViewItemPercent = (TextView) rowView.findViewById(textViewItemPercentId); textViewItemPercent.setText(language.getPercent() + "%"); return rowView; } } package org.o7planning.customspinneradapterexample; public class Language { private long id; private String name; private float percent; public Language(long id, String name, float percent) { chúng tôi = id; chúng tôi = name; this.percent = percent; } public long getId() { return id; } public void setId(long id) { chúng tôi = id; } public String getName() { return name; } public void setName(String name) { chúng tôi = name; } public float getPercent() { return percent; } public void setPercent(float percent) { this.percent = percent; } } package org.o7planning.customspinneradapterexample; import java.util.ArrayList; import java.util.List; public class LanguageDataUtils { Language javascript = new Language(1,"Javascript", 67.7f); Language htmlCss = new Language(2,"HTML/CSS", 63.1f); Language sql = new Language(3,"SQL", 54.7f); Language python = new Language(4,"Python", 44.1f); Language java = new Language(5, "Java", 40.2f); list.add(javascript); list.add(htmlCss); list.add(sql); list.add(python); list.add(java); return list; } }

Hướng Dẫn Sử Dụng Image Ứng Dụng Minecraft

Minecraft là một trò chơi tạo ra các tòa nhà và các cuộc phiêu lưu trong thế giới sân vườn hình hộp đang rất được yêu thích. Mọi người sẽ cùng chơi Minecraft đồng thời trên một bản đồ nên sẽ cần thiết phải chuẩn bị một máy chủ. Z.com cung cấp dịch vụ Cloud VPS với image ứng dụng Minecraft đã được cài đặt sẵn để bạn có thể bắt đầu sử dụng một cách dễ dàng. * Vì là máy chủ Minecraft Java Edition nên sẽ không thể kết nối từ Minecraft của iOS hoặc Android.

Khởi tạo image ứng dụng Minecraft trong chúng tôi Cloud VPS

  [2] Tại mục [Kiểu image], chọn [Ứng dụng] sau đó chọn [Minecraft] để tạo máy chủ [3] Vì địa chỉ IP của máy chủ sẽ được yêu cầu khi thiết lập Minecraft, vui lòng kiểm tra địa chỉ IP của máy chủ đã tạo · Ghi lại địa chỉ IP tại mục [Thông tin mạng] trên màn hình chi tiết máy chủ.

Thiết lập server Minecraft

 

Trường hợp bị lỗi [Invalid session – try restarting your game] thì cần sửa phải [server.properties] trên server.

Thực hiện truy cập vào server. Bộ cài đặt Minecraft mặc định theo đường dẫn sau [/opt/minecraft_server]

Sử dụng tool WinSCP để có thể config lại file i[server.properties] 1 cách đơn giản nhất

Nhập dịa chỉ IP của bạn vào ô Host name.

Nhập user: root

Nhập mật khẩu lúc khởi tạo server

[2] Mở file [server.properties] theo đường dẫn [/opt/minecraft_server] 

Và tìm đến dòng [online-mode=true]. Sau đó đổi thành [online-mode=false] và lưu lại

[3] Truy cập vào của server trên trang quản trị của MyZcom. Thực hiện login vào hệ thống

Chạy lệnh [cd  /opt/minecraft_server] để di chuyển vào thư mục minecraft_server

Chạy tiếp lệnh pkill –f ‘java -jar’ để đóng server đang chạy

Tiếp đến chạy lệnh java -Xmx1024M -Xms1024M -jar minecraft_server.1.12.2.jar nogui để bật lại server. Màn hình dưới hiện ra là thành công.

[4] Sau đó bạn tiến hành khởi động Minecraft và chọn Multiplayer [6] [Server Name] là tên máy chủ được hiển thị trên màn hình danh sách máy chủ. Nếu bạn đang đăng ký máy chủ khác với tên máy chủ mặc định, hãy nhập một tên khác. Tại mục [Server Address], vui lòng nhập địa chỉ IP của máy chủ đã xác nhận ở trên Bản đồ sẽ được tạo ra sau khi khởi động máy chủ lần đầu tiên và bản đồ sẽ khác nhau cho mỗi máy chủ. Để biết thêm thông tin về Minecraft, vui lòng truy cập trang web chính thức củawiki

Related

Cập nhật thông tin chi tiết về Hướng Dẫn Sử Dụng Jquery trên website Rafs.edu.vn. Hy vọng nội dung bài viết sẽ đáp ứng được nhu cầu của bạn, chúng tôi sẽ thường xuyên cập nhật mới nội dung để bạn nhận được thông tin nhanh chóng và chính xác nhất. Chúc bạn một ngày tốt lành!