2011-11-02 31 views
10

Nói một div đã này áp dụng cho nó:Nhận giá trị dịch3d của div?

-webkit-transform: translate3d(0px, -200px, 0px) 

Làm thế nào tôi có thể lấy những giá trị đó với jQuery?

+1

Bạn đã thử sử dụng ['jQuery.css'] (http://api.jquery.com/css) chưa? – namuol

Trả lời

10

Giá trị được lưu trữ dưới dạng matrix hoặc matrix3d, tùy thuộc vào giá trị z đã được đặt hay chưa. Giả sử không có biến đổi nào khác, đối với ma trận 2D, X và Y là hai giá trị cuối cùng. Đối với ma trận 3D, X, Y, Z, 1 là bốn chữ số cuối cùng.

Bạn có thể sử dụng một biểu thức chính quy để có được các giá trị:

function getTransform(el) { 
    var results = $(el).css('-webkit-transform').match(/matrix(?:(3d)\(\d+(?:, \d+)*(?:, (\d+))(?:, (\d+))(?:, (\d+)), \d+\)|\(\d+(?:, \d+)*(?:, (\d+))(?:, (\d+))\))/) 

    if(!results) return [0, 0, 0]; 
    if(results[1] == '3d') return results.slice(2,5); 

    results.push(0); 
    return results.slice(5, 8); 
} 
+3

Bạn chỉ có thể nhận 'css ('transform')' ngay bây giờ vì jQuery bình thường hóa các tiền tố của nhà cung cấp. – Soviut

+1

Như đã đề cập trong câu trả lời của Trevor, điều này KHÔNG LÀM VIỆC cho các giá trị âm !! – Larzan

0

EDIT: Điều này sai, bỏ qua điều này.

Tôi nghĩ rằng nếu bạn làm điều gì đó giống như ...

var styles = $('.myclass').css('-webkit-transform'); 

Bạn có lẽ sẽ nhận được translate3d(0px, -200px, 0px) lại.

Có thể bạn có thể phân tích cú pháp chuỗi đó? có vẻ như một chút của một hack mặc dù.

+1

không, bạn sẽ nhận được một ma trận trở lại như thế này: 'ma trận (-1, -0.00000000000000012246467991473532, 0,00000000000000012246467991473532, -1, 0, 0)' – ProblemsOfSumit

+1

ah đúng! uch! Đó là lý do tại sao tôi nói * nghĩ *, * có thể * và * có thể * :) – simonlchilds

9

Nếu bạn thay đổi mô hình phù hợp() câu trả lời chấp nhận để này nó thêm hỗ trợ cho số âm:

$(el).css('-webkit-transform').match(/matrix(?:(3d)\(-{0,1}\d+(?:, -{0,1}\d+)*(?:, (-{0,1}\d+))(?:, (-{0,1}\d+))(?:, (-{0,1}\d+)), -{0,1}\d+\)|\(-{0,1}\d+(?:, -{0,1}\d+)*(?:, (-{0,1}\d+))(?:, (-{0,1}\d+))\))/) 
+0

điều này trả về null trong trường hợp của tôi –

1

Nếu bạn cập nhật biểu thức chính quy về sau nó thêm hỗ trợ cho những trường hợp lẻ đó khi biến đổi của bạn có nổi:

/matrix(?:(3d)\(-{0,1}\d+\.?\d*(?:, -{0,1}\d+\.?\d*)*(?:, (-{0,1}\d+\.?\d*))(?:, (-{0,1}\d+\.?\d*))(?:, (-{0,1}\d+\.?\d*)), -{0,1}\d+\.?\d*\)|\(-{0,1}\d+\.?\d*(?:, -{0,1}\d+\.?\d*)*(?:, (-{0,1}\d+\.?\d*))(?:, (-{0,1}\d+\.?\d*))\))/ 
Các vấn đề liên quan