javascript - Thay đổi văn bản hoặc màu sắc dựa trên các biến thay đổi linh hoạt (KineticJS)
In lạiTác giả: Hồ XilThời gian cập nhật: 2023-11-01 12:50:11264
我有一个 Kinetic.Group và thêm biến vào thuộc tính của nó tình trạng thực tế. tình trạng thực tế được thay đổi động thành "1" hoặc "0" bởi một số JavaScript khác (1 = BẬT 0 = TẮT). Bây giờ, điều tôi muốn làm là hiển thị trạng thái thực tế (bật hoặc tắt) bằng KineticJS. Khi tôi sử dụng tùy chỉnh Kinetic.Shape , Tôi chỉ có thể làm điều này:
hình dạng var = Kinetic.Shape mới ({ trạng thái thực tế: "", drawFunc: hàm(canvas){ var ctx = canvas.getContext(); ctx.beginPath(); if(this.actualstatus == "1") ctx.fillStyle = "màu vàng"; khác if(this.actualstatus == "0") ctx.fillStyle = "lightgrey"; ctx.fillRect(0,0,50,50); ctx.closePath(); } });
Nó hoạt động hoàn hảo nhưng không thể nghe các sự kiện trên đó và sử dụng nhiều ctx.beginPath()ctx.closePath() để vẽ các vật dụng phức tạp.
Vì vậy, tôi chỉ xây dựng lại nó bằng cách sử dụng Kinetic-Shapes không tùy chỉnh, giải quyết các sự kiện của tôi và các vấn đề vẽ phức tạp, nhưng bây giờ, nó không còn hoạt động theo trạng thái thực tế thay đổi màu sắc hoặc văn bản của nó- Thuộc tính của nhóm, chứa tất cả các hình dạng.
Vì vậy, câu hỏi của tôi là: mỗi lần tình trạng thực tế Có cách nào để vẽ lại hình bằng màu mới, v.v. khi thuộc tính thay đổi không? Hoặc có cách nào để theo dõi tình trạng thực tế - Thay đổi?
Tôi hy vọng bằng cách nào đó bạn có thể hiểu được những gì tôi đang nói ở trên hơi phức tạp :) Tất nhiên, mọi trợ giúp đều được đánh giá cao;)
câu trả lời hay nhất
Bạn có thể "lắng nghe" khi giá trị của "actualstatus" thay đổi và thay đổi màu sắc tương ứng
Bạn có thể thực hiện việc này bằng cách sử dụng getters và setters javascript.
2 hàm này được liên kết với thuộc tính (actualstatus) và được kích hoạt khi giá trị thuộc tính được yêu cầu (getter) và được gán (setter).
// điều này sẽ kích hoạt hàm getter var test = trạng thái thực tế;
// điều này sẽ kích hoạt hàm setter trạng thái thực tế="1";
Tầm quan trọng của việc này là bạn có thể sử dụng hàm set để thay đổi giá trị trạng thái thực tế... và... bạn cũng có thể kích hoạt thay đổi màu của hình dạng.
Hàm setter trông như thế này:
hàm (giá trị mới) {
// thay đổi giá trị hiện tại thành giá trị mới this.currentValue = newValue;
// và cũng thay đổi màu của hình chữ nhật dựa trên newValue chuyển đổi (giá trị) { trường hợp "0": myKineticRect.setFill('lightgrey'); phá vỡ; case "1": myKineticRect.setFill('màu vàng'); phá vỡ; default: myKineticRect.setFill('red'); phá vỡ; } layer.draw(); }
Đưa getters/setters vào hoạt động:
Đầu tiên, khai báo một đối tượng chứa tất cả các biến mà chúng ta muốn "nghe".
// tạo một đối tượng chứa cho tất cả các Var mà chúng ta muốn "nghe" var WatchedVars=function(){};
Tiếp theo, yêu cầu WatchedVars thêm một biến có tên "actualstatus" sẽ có getter và setter:
// "nghe" để lấy và đặt trên "trạng thái thực tế" Object.defineProperty(WatchedVars.prototype,"actualstatus",{
// đây là thuộc tính "riêng tư" chứa giá trị hiện tại của trạng thái thực tế
Giá trị riêng tư: "X",
// khi get: chỉ trả về giá trị hiện tại (privateValue)
nhận được: function(){ return(this.privateValue },
// on set: đặt giá trị hiện tại // ...AND(!)... thực thi trình xử lý gọi lại (actualstatusSetHandler)
đặt: hàm (newValue) { this.privateValue=newValue; trạng thái thực tếSetHandler(this.privateValue); }
});
Do đó, bất cứ khi nào giá trị của trạng thái thực tế được thay đổi, phương thức setter sẽ được gọi.
// gán cho w.actualstatus giá trị "1" sẽ kích hoạt hàm setter của nó w.actualstatus="1";
setter thay đổi giá trị hiện tại của trạng thái thực tế thành "1"
Trình thiết lập cũng gọi thực tếstatusSetHandler() để tô màu hình chữ nhật bằng màu vàng.
Đây là lệnh gọi lại sẽ được thực thi mỗi khi giá trị của trạng thái thực tế thay đổi:
// trình xử lý này sẽ được gọi mỗi khi giá trị của trạng thái thực tế thay đổi // trong trường hợp này, chúng ta thay đổi màu tô của hình động học (trực tràng) hàm thực tếstatusSetHandler(value,isTrue){ chuyển đổi (giá trị) { trường hợp "0": trực tràng.setFill('lightgrey'); phá vỡ; case "1": trực tràng.setFill('màu vàng'); phá vỡ; default: trực tràng.setFill('red'); phá vỡ; } layer.draw(); }
Đây là cách "lắng nghe" những thay đổi có thể thay đổi trong JavaScript!
// tạo một đối tượng chứa cho tất cả các Var mà chúng ta muốn "nghe" var WatchedVars=function(){};
// "nghe" để lấy và đặt trên "trạng thái thực tế" Object.defineProperty(WatchedVars.prototype,"actualstatus",{
// đây là thuộc tính "riêng tư" chứa giá trị hiện tại của trạng thái thực tế
Giá trị riêng tư: "X",
// khi get: chỉ trả về giá trị hiện tại (privateValue)
nhận được: function(){ return(this.privateValue },
// on set: đặt giá trị hiện tại // ...AND(!)... thực thi trình xử lý gọi lại (actualstatusSetHandler)
đặt: hàm (newValue) { this.privateValue=newValue; trạng thái thực tếSetHandler(this.privateValue); }
});
// trình xử lý này sẽ được gọi mỗi khi giá trị của trạng thái thực tế thay đổi // trong trường hợp này, chúng ta thay đổi màu tô của hình động học (trực tràng) hàm thực tếstatusSetHandler(value,isTrue){ chuyển đổi (giá trị) { trường hợp "0": trực tràng.setFill('lightgrey'); phá vỡ; case "1": trực tràng.setFill('màu vàng'); phá vỡ; default: trực tràng.setFill('red'); phá vỡ; } layer.draw(); }
// chỉ là những thứ Kinetic bình thường // tạo stage & layer, thêm hình chữ nhật var stage = new Kinetic.Stage({ thùng chứa: 'thùng chứa', chiều rộng: 200, chiều cao: 200 }); lớp var = Kinetic.Layer mới(); stage.add(lớp);
// tạo một instance của WatchedVars var w=new WatchedVars();
// đang kiểm tra...chỉ cần thay đổi giá trị của trạng thái thực tế $("#set0").click(function(){ w.actualstatus="0"; }); $("#set1").click(function(){ w.actualstatus="1"; });
Về javascript - thay đổi văn bản hoặc màu sắc dựa trên các biến thay đổi linh hoạt (KineticJS), chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/17300154/
Dường như thiếu tài liệu về Màu sắc là gì trong KineticJS (vui lòng cho tôi biết nếu tôi sai) Cho đến nay, qua thử và sai, tôi thực sự có thể chuyển phần sau sang một hàm như setFill trong lớp Shape :
Tôi thấy tài liệu về bộ lọc KineticJS rất khó chịu và không thể tìm thấy các ví dụ trực tuyến, đặc biệt là khi xem xét độ sáng. Liên kết tài liệu Kinetic.filters đề cập đến Kinetic.Filters.Brighten(ima
Tôi có một phần thân được mô phỏng bằng Box2Dweb và một hình ảnh được gắn vào phần thân. Tôi muốn lấy ma trận biến đổi cơ thể và áp dụng phép biến đổi cho hình ảnh (vẽ hình ảnh có phép biến đổi) sao cho vị trí và hướng của nó trên màn hình (so với) vị trí của cơ thể
Tôi cần vẽ gif động bằng KineticJS, tuy nhiên, khi làm theo hướng dẫn bằng hình ảnh, tôi không thành công. Câu trả lời hay nhất sử dụng KineticJS Sprite. Hoạt hình G
Tôi đang phát triển một chương trình vẽ đơn giản bằng KineticJS. Điều tôi muốn đạt được là vẽ một hình chữ nhật, đường thẳng hoặc hình tròn bằng chuyển động của chuột và hình dạng đã vẽ có thể được kéo hoặc thay đổi kích thước bằng chuột. Vấn đề của tôi là tôi phải sử dụng mousedown và mouse
Tôi có một SVG Sprite với lược đồ sau: Hình ảnh Hình ảnh Hình ảnh Hình ảnh Hình ảnh Hình ảnh Hình ảnh Hình ảnh trong đó Hình ảnh là hình ảnh và tất cả chín hình ảnh đều là
Đột nhiên, một hoạt ảnh đơn giản có tốc độ khung hình khác nhau trong Chrome (khoảng 30 khung hình/giây) và Firefox (khoảng 7 khung hình/giây). Đây có phải là hành vi đúng đắn? Tôi có thể điều chỉnh framRate trong chức năng hoạt ảnh không? Câu trả lời hay nhất hãy thử điều này /
Tôi muốn triển khai một hàm lấy một nhóm và một hình chữ nhật làm đối số và kiểm tra xem hình chữ nhật đó có thuộc nhóm đó hay không. Nếu nó thuộc về một nhóm, tôi muốn loại bỏ hoàn toàn hình chữ nhật khỏi nhóm và lớp. Tôi đã thử group.remove() và group.getChildren(
Trong KinectJS, làm cách nào để tạo bóng (tức là hình bán trong suốt với các cạnh mờ) mà không cần vẽ "chuyển đổi" hình dạng của nó? Lúc đầu, tôi nghĩ mình có thể làm cho hình dạng đổ bóng, nhưng đặt độ mờ của hình dạng đó về 0. Như thế này: var orth = new Kin
Tôi đang thêm hình ảnh vào vùng hiển thị làm hình nền và hình chữ nhật. Làm cách nào để đảm bảo rằng hình chữ nhật được căn giữa trên vùng hiển thị và nền thay đổi kích thước dựa trên trình duyệt? var stage = new Kinetic.Stage({ container: 'c
Tôi đang sử dụng KineticJS để cho phép người dùng thao tác với hình ảnh của họ - cắt, xoay, chia tỷ lệ, lật, v.v. Khi tôi áp dụng bất kỳ chuyển đổi nào cho hình ảnh, nó hoạt động tốt. Nhưng khi tôi áp dụng phép chuyển đổi thứ hai, nó hoạt động trên ảnh gốc, chưa được chuyển đổi chứ không phải ảnh mới của tôi.
Tôi muốn sử dụng công cụ bút bằng động học (như photoshop) và tôi không biết làm cách nào để đạt được điều này. Có thể được không? Xin hãy giúp tôi tìm ra giải pháp nếu có thể. Tôi đang sử dụng động-v5.0.1.min.js và kin
Tôi đang tự hỏi liệu Kinetic có cách nào để hợp nhất một hình ảnh với một hình ảnh khác ở lớp thấp hơn để tạo hiệu ứng cắt xén dựa trên hình dạng của hình ảnh "đã cắt" hay không. Vì vậy, hình ảnh phải có nền trong suốt, đây là khó khăn chính đối với tôi. Nếu không tôi sẽ chỉ sử dụng kéo ra
Tôi đã cố gắng trả lại vị trí chuột ở giai đoạn "di chuyển chuột" trong KineticJs. Ý tưởng của tôi là thêm một trình xử lý sự kiện jQuery vào đối tượng sân khấu... Tôi đã gặp sự cố nhưng đã xảy ra lỗi... Lỗi loại chưa bắt được
Tôi muốn cải thiện hiệu suất kéo và thả của đối tượng Canvas. Tôi có một nhóm chứa các hình dạng khác nhau (hình ảnh, ngôi sao, bản ghi ...). Tôi muốn sử dụng bộ nhớ đệm để cải thiện hiệu suất khi kéo và thả hoặc xoay toàn bộ nhóm. Đây là JSFiddle tôi đã tạo: http://jsfidd
Tôi đang cố gắng mô phỏng chức năng cắt canvas Stackoverflow của người khác này trong KineticJS với chức năng bổ sung là hình ảnh có thể kéo được, nhưng tôi không thể thực hiện được. đàn vĩ cầm :htt
Sử dụng KineticJS 5.1.0 Tôi có hình ảnh KineticJS có nét vẽ. Tôi muốn áp dụng bộ lọc cho hình ảnh này. Sau khi lưu vào bộ nhớ đệm và áp dụng bộ lọc, các nét vẽ biến mất. Đây là JSFiddle và mã demo của tôi: var
Tôi là một lập trình viên xuất sắc, rất giỏi!