Di chuyển con trỏ chuột đến một vị trí cụ thể?


127

Tôi đang xây dựng một trò chơi HTML5 và tôi đang cố gắng đưa con trỏ chuột lên một điều khiển nhất định trên một sự kiện cụ thể để việc di chuyển theo một hướng cụ thể luôn có kết quả tương tự. Điều này có thể không?


Nếu tôi hiểu chính xác, bạn muốn di chuyển con trỏ chuột bằng cách sử dụng JS - điều này là không thể. Bạn sẽ cần phải tìm một cách khác.
ba mươi

1
HTML5 có một số Sự kiện Chuột mới nhưng không có gì để di chuyển chuột. Bạn luôn có thể window.moveBy (x, y); để di chuyển cửa sổ bên dưới nơi chuột di chuyển .. đó sẽ là một trò chơi khá thú vị :) Cách duy nhất tôi thấy nó được thực hiện là thông qua ActiveX - ewwww, yuk!
Jeremy Thompson

1
Không - JavaScript sẽ không cho phép bạn làm điều đó, nhưng tôi đoán có thể có một cách giải quyết liên quan đến việc di chuyển trang đến một vị trí cụ thể, cũng sẽ "di chuyển" con trỏ, bằng cách sử dụng cửa sổ scrollTo () - xem w3Schools tại w3schools.com/jsref/met_win_scrollto.asp .
Stardust

1
Chúc may mắn với việc di chuyển chuột trên điện thoại thông minh.
Cœur

Hình ảnh của một con trỏ chuột có thể được di chuyển xung quanh và đặt con trỏ: không có. Nó không phải là một rủi ro bảo mật bởi vì bạn là lập trình viên. Nếu bạn có thể tạo một trò chơi, bạn cũng có thể tránh được rủi ro khi nhấp vào tài khoản ngân hàng của mình trong khi bạn đang chơi trò chơi của mình.

Câu trả lời:


20

Vì vậy, tôi biết đây là một chủ đề cũ, nhưng trước tiên tôi sẽ nói nó không thể. Điều gần nhất hiện tại là khóa chuột vào một vị trí duy nhất và theo dõi sự thay đổi trong x và y của nó. Khái niệm này đã được thông qua bởi - có vẻ như - Chrome và Firefox. Nó được quản lý bởi thứ gọi là Khóa chuột và nhấn thoát sẽ phá vỡ nó. Từ bài đọc ngắn gọn của tôi , tôi nghĩ ý tưởng là nó khóa chuột vào một vị trí và báo cáo các sự kiện chuyển động tương tự như các sự kiện nhấp và kéo.

Đây là tài liệu phát hành:
FireFox: https://developer.mozilla.org/en-US/docs/Web/API/Pulum_Lock_API
Chrome: http://www.chromium.org/developers/design-document/mouse-lock

Và đây là một minh chứng khá gọn gàng: http://media.tojicode.com/q3bsp/


Tôi coi đây là câu trả lời mới được chấp nhận, bởi vì đây chính xác là trường hợp sử dụng mà tôi đã yêu cầu, mặc dù nó không được hỗ trợ trong tất cả các trình duyệt.
Dennkster

186

Bạn không thể di chuyển con trỏ chuột bằng javascript.

Chỉ cần nghĩ về những tác động trong một giây, nếu bạn có thể;)

  1. Người dùng nghĩ: "hey tôi muốn nhấp vào liên kết này"
  2. Javascript di chuyển con trỏ đến một liên kết khác
  3. Người dùng nhấp vào liên kết sai và vô tình tải phần mềm độc hại định dạng ổ đĩa c của mình và ăn kẹo của anh ta

74
Nhấp chuột thật.
Máy xay sinh tố

15
Hãy nghĩ về nó, điều này sẽ thật tuyệt vời: P
Martin Jespersen

24
Heh, tôi sẽ ghét chiến đấu để kiểm soát con trỏ chuột của tôi: TRỞ LẠI QUẢNG CÁO CỦA BẠN, TRỞ LẠI TÔI NÓI!
Máy xay sinh tố

77
Trang web có thể buộc tải xuống mà không yêu cầu bất kỳ ai nhấp vào liên kết, vì vậy những gì bạn cho là không thực sự là vấn đề bảo mật. Mặc dù vậy, không thể di chuyển ra ngoài cửa sổ trang web.
dionyziz

11
@dionyziz: Có một sự khác biệt khá lớn giữa việc tải xuống bắt buộc vào hộp cát và sau đó tải xuống không gian người dùng bắt đầu bằng tương tác của người dùng. Ý nghĩa bảo mật thực sự rất lớn.
Martin Jespersen

87
  1. Chạy một máy chủ web nhỏ trên máy khách. Có thể là một điều nhỏ 100kb. Một tập lệnh Python / Perl, v.v.
  2. Bao gồm một tệp thực thi C nhỏ, được biên dịch sẵn có thể di chuyển chuột.
  3. Chạy nó dưới dạng tập lệnh CGI thông qua một cuộc gọi http đơn giản, AJAX, bất cứ điều gì - với tọa độ bạn muốn di chuyển chuột đến, ví dụ:

    http://localhost:9876/cgi/mousemover?x=200&y=450

Tái bút: Đối với bất kỳ vấn đề nào, có hàng trăm lý do để giải thích tại sao, và làm thế nào - không thể, và không nên - được thực hiện .. Nhưng trong vũ trụ vô tận này, đó thực sự chỉ là vấn đề quyết tâm - cho dù BẠN sẽ làm cho nó xảy ra.


13
Tôi nghĩ rằng tất cả chúng ta đã ở trên tàu cho đến khi "c thực thi" ... xD
dGRAMOP

1
một máy chủ web? có lẽ bạn có nghĩa là một chương trình có giao diện http .. không cần web. Ngôn ngữ lập trình Go có thể có lợi thế hơn C ở chỗ nó có thể giúp dễ dàng thêm phần http hoặc cách khác Trình thông dịch của nodejs sẽ chạy mã cũng có thể bao gồm giao diện http khá dễ dàng, vì trình thông dịch của nodejs được xây dựng để dễ dàng viết ứng dụng máy chủ.
barlop

3
C = 0 phụ thuộc. Web là http. Không có trang chủ dễ thương, ở đây .. Chỉ là giao thông vận tải.
Alex Gray

+1 cho PS. Chúng tôi có thể thực hiện các cuộc gọi CGI bằng cách sử dụng nút dev-server hoặc bất cứ thứ gì tương tự npmjs.com/package/http-server ??
ATHER

Có ai trong số các bạn đã nhận thấy Javascriptthẻ bên dưới câu hỏi?

80

Tôi sẽ tưởng tượng bạn có thể hoàn thành việc đặt con trỏ chuột đến một khu vực nhất định trên màn hình nếu bạn không sử dụng con trỏ chuột thực (hệ thống).

Chẳng hạn, bạn có thể tạo một hình ảnh để hành động thay cho con trỏ của bạn, xử lý một sự kiện khi phát hiện ra trình điều khiển chuột vào cảnh của bạn, đặt kiểu trên con trỏ hệ thống thành 'none' (sceneElement.style.cursor = 'none' ), sau đó sẽ đưa ra một yếu tố hình ảnh ẩn như một con trỏ ở bất cứ nơi nào bạn muốn trong cảnh dựa trên bản dịch trục / hộp giới hạn được xác định trước.

Bằng cách này, bất kể bạn di chuyển con trỏ thực như thế nào, phương pháp dịch của bạn sẽ giữ con trỏ hình ảnh của bạn bất cứ nơi nào bạn cần.

chỉnh sửa: một ví dụ trong jsFiddle bằng cách sử dụng biểu diễn hình ảnh và di chuyển chuột bắt buộc


5
Vâng, bạn có thể. Bạn chỉ cần đặt kiểu con trỏ trên một phần tử đã cho thành 'none'. Hãy thử một lần.
Xaxis

14
Đây là câu trả lời chu đáo nhất. Và thực sự cung cấp một giải pháp thực sự, trong khi một số câu trả lời khác thực sự bổ sung bất kỳ giá trị nào :) Nhưng webgl sẽ mang đến những trò chơi thú vị như FPS như thế nào khi chúng tôi không thể có được bất kỳ khóa chuột nào, nghe có vẻ khá hạn chế ...
Dennkster

3
Điều đó vẫn có vấn đề là không thể "tiếp tục di chuyển" con chuột của bạn sang bên trái. Khi chuột rời khỏi trang web, bạn không thể tiếp tục kiểm soát nó.
dionyziz

2
Đây là một giải pháp hoàn hảo cho vấn đề này. Lý do duy nhất có người phàn nàn là vì đó không phải là một giải pháp tầm thường. Bạn phải làm một số chương trình đôi khi các chàng trai!
Marty

5
chơi xung quanh với ý tưởng này và làm một ví dụ trong JSFiddle jsfiddle.net/jaakkytt/9uczV
Jaak Kütt

65

Câu hỏi tuyệt vời. Đây thực sự là một cái gì đó thiếu từ API trình duyệt Javascript. Tôi cũng đang làm việc với một trò chơi WebGL với nhóm của mình và chúng tôi cần tính năng này. Tôi đã mở một vấn đề trên bugzilla của Firefox để chúng ta có thể bắt đầu nói về khả năng có API để cho phép khóa chuột. Điều này sẽ hữu ích cho tất cả các nhà phát triển trò chơi HTML5 / WebGL ngoài kia.

Nếu bạn thích, hãy ghé qua và để lại nhận xét với phản hồi của bạn và nêu lên vấn đề:

https://ormszilla.mozilla.org/show_orms.cgi?id=630979

Cảm ơn!



51
Nếu điều này xảy ra, tôi sẽ bỏ sử dụng trình duyệt. :-P Nghiêm túc, các trang web không yêu cầu sự đồng ý mà bạn đưa ra khi bạn cài đặt một ứng dụng. Đây sẽ là một tính năng tuyệt vời nếu tất cả chúng ta đều là những người tốt bụng chỉ sử dụng mức độ kiểm soát này để cải thiện trải nghiệm người dùng. Thật không may, Internet là trung tâm, đó là lý do tại sao có rất nhiều tính năng thực sự gọn gàng mà chúng tôi hy vọng sẽ không bao giờ thấy trong trình duyệt. Điều đó đang được nói: API toàn màn hình sẽ hoạt động để "khóa" phần còn lại của HĐH.
Ai đó

4
Ứng dụng @Someone sẽ được yêu cầu trước khi có thể khóa như vậy bởi một ứng dụng (tương tự như cách yêu cầu sự đồng ý toàn màn hình trong các trình duyệt web phổ biến hiện nay). Hơn nữa, người dùng luôn có thể thu hồi sự đồng ý bằng cách nhấn phím ESC.
dionyziz

7
Điều đó đã xảy ra. Và nó thật tuyệt vời (nếu vẫn có tiền tố của nhà cung cấp): mdn.github.io/pulum-lock-demo
ericsoco

1
@ericsoco Đáng buồn là liên kết đó bị hỏng. Điều này có thể giúp: https://developer.mozilla.org/en-US/docs/Web/API/Pulum_Lock_API
Tian van Heerden

46

Bạn có thể phát hiện vị trí của con trỏ chuột và sau đó di chuyển trang web (với vị trí cơ thể tương đối) để chúng di chuột qua những gì bạn muốn chúng nhấp vào.

Ví dụ: bạn có thể dán mã này trên trang hiện tại trong bảng điều khiển trình duyệt của bạn (và làm mới sau đó)

var upvote_position = $('#answer-12878316').position();
$('body').mousemove(function (event) {
    $(this).css({
        position: 'relative',
        left: (event.pageX - upvote_position.left - 22) + 'px',
        top: (event.pageY - upvote_position.top - 35) + 'px'
    });        
});

2
Bài viết của bạn sẽ có giá trị hơn nếu bạn có thể đăng một ví dụ mã làm điều đó. Ngoài ra, tôi khuyên bạn nên xem Câu hỏi thường gặp: stackoverflow.com/faq
ForceMagic

Làm thế nào để bạn thực sự nhấp vào đúng yếu tố sau khi người dùng nhấp vào?
mmm

@momomo Bạn có thể sử dụngdocument.getElementByID('thingtoclick').click();
xếp tầng theo phong cách

1
Đó là hoàn toàn xuất sắc! Cách nghĩ bên ngoài hộp! Tôi nghi ngờ nó thực sự cung cấp những gì người hỏi muốn, nhưng tuyệt như nó, ai thực sự quan tâm?
gcdev

12

Bạn không thể di chuyển một con chuột nhưng có thể khóa nó. Lưu ý: rằng bạn phải gọi requestPulumLock trong sự kiện nhấp chuột.

Ví dụ nhỏ:

var canvas = document.getElementById('mycanvas');
canvas.requestPointerLock = canvas.requestPointerLock || canvas.mozRequestPointerLock || canvas.webkitRequestPointerLock;
canvas.requestPointerLock();

Tài liệu và ví dụ mã đầy đủ:

https://developer.mozilla.org/en-US/docs/Web/API/Pulum_Lock_API


4

Bạn không thể di chuyển con trỏ chuột bằng javascript và do đó vì lý do bảo mật rõ ràng. Cách tốt nhất để đạt được hiệu ứng này là thực sự đặt điều khiển dưới con trỏ chuột.


1
Ý nghĩa bảo mật là xa rõ ràng. Trong thực tế, các bổ sung gần đây cho các tiêu chuẩn giới thiệu khả năng này mà không có bất kỳ vấn đề bảo mật nghiêm trọng nào.
dionyziz

nhưng làm thế nào có thể trong API kéo và thả?
oldboy

0

Điều này không thể được thực hiện đơn giản bằng cách lấy vị trí thực tế của con trỏ chuột sau đó tính toán và bù các hành động chuột sprite / cảnh dựa trên phần bù này?

Chẳng hạn, bạn cần con trỏ chuột ở giữa, nhưng nó nằm trên cùng bên trái; ẩn con trỏ, sử dụng một hình ảnh con trỏ thay đổi. Thay đổi chuyển động con trỏ và nhập chuột ánh xạ để khớp với các lần nhấp sprite (hoặc 'control') được định vị lại khi nhấp chuột khi / nếu giới hạn được nhấn, tính toán lại. Nếu / khi con trỏ thực sự chạm đến điểm bạn muốn, hãy xóa phần bù.

Từ chối trách nhiệm, không phải là một nhà phát triển trò chơi.


giống hệt với câu trả lời của Xaxis.
mathheadinclouds

@mathheadinclouds thực sự, nhưng độc lập với việc thực hiện trình duyệt khóa chuột. Vì vậy, về cơ bản; nhưng không. Cảm ơn quan điểm của bạn. - Chỉnh sửa: Đừng bận tâm. Tôi thấy những gì bạn đang nói. Tôi đoán sau đó, suy nghĩ duy nhất của tôi sẽ là, điều này ở đây không phải là không hữu ích. Có nhiều giáo dân hơn nó, hơn câu trả lời Xaxis.
Eric Shoberg
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.