2010-11-01 10 views
8

Tôi có một yếu tố trên trang web của mình có thể tự do thay đổi kích thước. Điều này được thực hiện bởi 4 tay cầm trên các cạnh. Khi di chuyển các chốt này và trong khi thay đổi kích thước phần tử tôi muốn hiển thị các mũi tên thay đổi kích thước tương ứng.con trỏ tùy chỉnh bên ngoài cửa sổ trình duyệt

Hiện tại tôi đã triển khai hành vi này bằng cách đặt kiểu con trỏ css của thân/gốc thành các mũi tên này. Vấn đề về nó là giới hạn cho khu vực khách hàng của cửa sổ trình duyệt. Nó sẽ trực quan phù hợp hơn và ít gây nhầm lẫn, nếu con trỏ mũi tên sẽ hiển thị ở khắp mọi nơi trong khi con chuột được giữ.

Google Maps đang thực hiện tương tự với con trỏ chuột của họ trong khi di chuyển bản đồ. Vì vậy, câu hỏi của tôi là làm thế nào để đạt được hiệu ứng này trên của riêng tôi.

My hiện tại (có liên quan) nguồn:

function startObjectScaling(e){ 
    e.stopPropagation(); 
    e.preventDefault(); 
    document.documentElement.style.cursor = this.style.cursor; 
    window.addEventListener("mouseup", stopObjectScaling, false); 
} 

function stopObjectScaling(e){ 
    e.stopPropagation(); 
    document.documentElement.style.cursor = ''; 
    window.removeEventListener("mouseup", stopObjectScaling); 
} 

[...] 

var tg = document.getElementById("transformGadget"); 
var handle = tg.firstChild.nextSibling; 
for(var i=0;i<4;i++){ 
    handle.addEventListener("mousedown", startObjectScaling, false); 
    handle = handle.nextSibling; 
} 
+0

nhập mã xác/đánh dấu nào bạn đang có? – alex

+2

Đối với tôi trên Chromium, con trỏ Google Maps chỉ giữ một tay nếu tôi ra khỏi cửa sổ mà không đi qua bất kỳ phần nào khác của trang; nếu không, nó sẽ trở lại con trỏ bình thường. Tôi nghĩ rằng điều này có nghĩa là bạn có thể không có được một giải pháp 100% cho vấn đề của bạn, thật không may. –

+0

Tôi đã thử nghiệm nó trong Firefox và Chrome và ở đó nó hoạt động tốt - nó rất hay hơn so với giải pháp hiện tại của tôi. – V02460

Trả lời

4

Có một chức năng đặc biệt được triển khai trong các trình duyệt hiện đại hơn cho mục đích này. Tên là setCapture(). Nó chuyển hướng tất cả đầu vào chuột đến đối tượng mà phương thức được gọi. Bây giờ, một định nghĩa đơn giản là con trỏ trên phần tử đó là đủ để lưu trữ hiệu ứng mong muốn. Sau khi phát hành chuột, hiệu ứng này sẽ dừng (để đảm bảo an toàn). Nó cũng có thể được ngừng lại bằng tay bằng cách gọi releaseCapture

dụ:

<style type="text/css"> 
#testObj { 
    /* this cursor will also stay outside the window. 
     could be set by the script at the mousedown event as well */ 
    cursor: hand; 
} 
</style> 

[...]

document.getElementById('testObj').onmousedown = function(e){ 

    // these 2 might be useful in this context as well 
    //e.stopPropagation(); 
    //e.preventDefault(); 

    // here is the magic 
    e.target.setCapture(); 
} 
+0

Tôi rất vui vì bạn đã tìm thấy câu trả lời cho vấn đề. Cảm ơn bạn đã cập nhật trang. – jcolebrand

+0

IE FTW từ năm 1995! –

-1

nếu mũi tên con trỏ sẽ được hiển thị ở khắp mọi nơi trong khi chuột là giữ.

Bạn đang dựa vào khả năng mở rộng hệ điều hành tiềm năng để tạo hành vi của mình. Đây không phải là điều bạn có thể ASSUME sẽ luôn đúng. Tuy nhiên, khi bạn bắt đầu một con chuột, con trỏ tại điểm đó thường sẽ giữ nguyên, bất kể bạn di chuyển con chuột đến đâu, UNTIL cái gì khác (một cửa sổ khác mà bạn có thể di chuột qua? Máy tính để bàn? Một hệ thống ngắt?) con trỏ.

Nói cách khác, không dựa vào hành vi này. Tìm cái gì đó khác sẽ làm việc cho bạn. Nếu bạn phải làm điều này, hãy kiểm tra lại các yêu cầu kinh doanh của bạn.

+2

Đây là một dự đoán hoang dã và tôi không tìm thấy bất kỳ thông tin nào về nó với một tìm kiếm nhanh, nhưng tôi nghĩ nó không phải là một hệ điều hành, nhưng thay vào đó là một hành vi của các nhà cung cấp trình duyệt (vâng, nó phù hợp với tất cả chúng) - giống như con chuột phối hợp cập nhật bên ngoài khu vực khách hàng nếu bạn giữ chuột trái, nhưng không phải . Họ đã làm cho những loại ứng dụng đó hoạt động đúng cách. – V02460

+0

Tôi vẫn đứng bởi nó là một quirk hệ điều hành trên tài khoản của bản vẽ con trỏ được cho là được quản lý bởi GDI hoặc WM. Nếu tôi di chuột qua cửa sổ có khóa quay, tôi sẽ lấy hộp xoay tròn. Tôi không cố gắng thử nghiệm điều này trên bất kỳ hệ thống nào, vì vậy nếu bạn xây dựng một thử nghiệm làm việc bao gồm Gnome, KDE, Windows, MacOS và Chrome, Firefox, Safari và IE với các thay đổi con trỏ trong mỗi ứng dụng và kéo ra khỏi bounds-với-con trỏ-thay đổi và kéo-ra-of-ràng buộc-mà không có con trỏ-thay đổi hãy chắc chắn và cho tôi biết. Cho đến lúc đó, tôi sẽ đi với sự hiểu biết của tôi. – jcolebrand

+0

Ngoài ra tôi sẽ chỉ ra rằng nếu nó phù hợp với tất cả chúng, thì có thể bạn đã sai. Các nhà cung cấp trình duyệt thậm chí không thể nhận được khoảng cách phần trăm 100% nhất quán. Bạn mong đợi họ có được hành vi chuột nhất quán? – jcolebrand