Mô phỏng run rẩy (từ bệnh Parkinson) với chuột trên trang web?


204

Tôi đang làm việc cho một nền tảng nâng cao nhận thức về khả năng truy cập trên internet. Để trình bày, chúng tôi muốn cung cấp một hội thảo nhỏ mô phỏng các khuyết tật / khuyết tật khác nhau cho mọi người. Điều này được thực hiện thông qua một trang web được tạo ra đặc biệt cho bài thuyết trình này.

Một trong những khiếm khuyết đã được chứng minh là bị run, có nghĩa là trải qua các cử động tay run rẩy, khó kiểm soát. Với sự suy yếu này, rất khó để di chuyển con trỏ chuột chính xác và nhấn nút chuột trong khi chuột ở trên một liên kết. Cả một số người già và những người mắc bệnh, ví dụ như Parkinson, đều có thể bị run.

Bây giờ tôi muốn bằng cách nào đó di chuyển con trỏ chuột theo một cách không thể đoán trước, để mọi người rất khó nhấp vào một nút nhỏ. Vì JavaScript không cho phép di chuyển con trỏ chuột trực tiếp, tôi đang tìm cách khác để đạt được điều này. Tôi đã đưa ra những ý tưởng sau đây:

  • Sử dụng trình điều khiển chuột / tiện ích mô phỏng việc lắc chuột.
  • Ẩn con trỏ chuột qua CSS, đặt hoạt hình GIF của con trỏ chuột lắc vào vị trí của con trỏ ban đầu (bằng JavaScript), sau đó làm cho liên kết đích chỉ có thể nhấp mỗi vài giây trong một giây. Điều này ít nhất sẽ mang lại cảm giác như thể một người luôn nhấp vào sai thời điểm.

Mặc dù ý tưởng đầu tiên sẽ khá tuyệt vời, tôi không thể tìm thấy một công cụ như thế này, cho dù là cho Mac hay cho Windows. Và bản thân tôi không có kỹ năng lập trình như vậy.

Ý tưởng thứ hai có vẻ hơi vụng về, nhưng nó sẽ đạt được hiệu quả mong muốn, tôi nghĩ vậy.

Có ai có ý tưởng khác không?


35
Bạn thực sự có thể kiểm soát vị trí con trỏ (tốt, một vị trí được mô phỏng) bằng API Khóa con trỏ
Stuart P. Bentley

2
Hãy thử nhìn vào developer.mozilla.org/en-US/docs/Web/API/ ,. Liên kết trực tiếp đến bản demo là mdn.github.io/pulum-lock-demo . Miễn là mục đích của bạn có thể chấp nhận được khi nói với người dùng nhấp vào khung vẽ và cho phép trang vô hiệu hóa con trỏ chuột, bạn có thể muốn căn cứ mã của mình khỏi điều này
Aristocrates

5
Câu hỏi rất nâng cao nhận thức của các nhà phát triển web của chúng tôi. Cam ơn vi đa hỏi! Bạn nghĩ một nút lớn đến mức nào để có thể nhấp được?
Ideogram

4
Chỉ cần một mức độ tập trung vào sự run rẩy: Có hai loại cơ bản - "run cơ bản" và run của Parkinson - và chúng hoàn toàn khác nhau. "Chứng run cơ bản" ( không hoàn toàn là tình trạng của người già), là một cơn run "có chủ đích", nghĩa là chỉ rõ ràng khi cá nhân đang cố gắng làm điều gì đó, và càng tệ hơn khi cá nhân cố gắng kiểm soát nó. Mặt khác, chứng run PD xảy ra chủ yếu khi nghỉ ngơi và sự run rẩy thường không rõ ràng khi cá nhân đang cố gắng làm điều gì đó (mặc dù độ cứng do PD có thể xuất hiện).
Licks nóng

2
Tôi đã đăng một phiên bản linux sử dụng xdotool để điều khiển chuột, nhưng có một công cụ tương tự cho các cửa sổ gọi là autoit. Nó trông khá đơn giản và thậm chí còn có một thẻ cho nó [tự động]. Ngoài ra có vẻ như bạn cần 2 phiên bản. Một cái lắc nhiều hơn cho đến khi chuyển động bắt đầu và sau đó bình tĩnh lại một chút trong khi cái còn lại tương đối ổn định cho đến khi chuyển động bắt đầu.
Technosaurus

Câu trả lời:


148

Tôi đã tạo một bản demo nhanh về một cái gì đó mà bạn hy vọng có thể dựa vào mã của mình bằng cách sử dụng API Khóa con trỏ .

Tôi đã rẽ nhánh repo demo-lock-demo này và sửa đổi nó để thêm một yếu tố chuyển động ngẫu nhiên.

Đây là liên kết đến trang GitHub của tôi: https://aristocrates.github.io/pulum-lock-demo
Và đây là liên kết đến repo của tôi: https://github.com/aristocrates/pulum-lock-demo

Mã javascript quan trọng được chứa trong app.js, trong canvasLoop(e)phương thức.

Điều duy nhất tôi thay đổi từ bản demo ban đầu là sau các dòng

x += movementX * 2;
y += movementY * 2;

Tôi đã thêm hai dòng để thể hiện chuyển động ngẫu nhiên:

x += Math.floor(Math.random()*3 - 1);
y += Math.floor(Math.random()*3 - 1);

Vẫn còn nhiều điều bạn có thể cải thiện, nhưng hy vọng điều này có thể giúp bạn bắt đầu.


36
Như một lưu ý trong chức năng, chuyển động ngẫu nhiên không giống như một cái bắt tay. Với chuyển động ngẫu nhiên, con trỏ có thể trôi trên màn hình. Với một bàn tay run rẩy, con trỏ sẽ rung xung quanh một điểm trung tâm.
zzzzBov

5
Điều đáng chú ý là hỗ trợ trình duyệt cho Api Khóa con trỏ không tuyệt vời - điều này sẽ không hoạt động trong Internet Explorer hoặc Safari.
Steve Sanders

3
Tôi đã không tìm thấy thời gian để tự mình thử nó, nhưng có lẽ bạn biết điều này: API khóa con trỏ cũng hoạt động bên ngoài một khung vẽ? Hoặc nó bị hạn chế trong một bức tranh?
Joshua Muheim

8
Việc triển khai thực tế hơn sẽ theo dõi vị trí "thực" của con trỏ và di chuyển ngẫu nhiên trong một vòng tròn xung quanh đó, nhưng điều đó có thể quá phức tạp.
tckmn

1
@Chris Chrome hiện ném Blocked pointer lock on an element because the element's frame is sandboxed and the 'allow-pointer-lock' permission is not set.. Có vẻ như jsFiddle đang nhúng nội dung vào khung hình hộp cát (tức là không cho phép khóa con trỏ qua <iframe sandbox="webkit-allow-pointer-lock">, xem tài liệu ). Hãy thử đặt mẫu trên một trang duy nhất, không phải hộp cát.
ComFalet

36

Cách không javascript

Trên thực tế, tôi thích các giải pháp, có thể dựa trên javascript, vì chúng có nhiều khả năng liên quan đến web và cơ hội tốt là - độc lập với hệ điều hành. Tuy nhiên, tôi đã suy nghĩ về - cách giải quyết vấn đề của bạn cho tất cả các trình duyệt, vì các giải pháp javascript, trong trường hợp này, sẽ khó điều chỉnh cho tất cả các trình duyệt có thể (tôi không chắc là có thể không).

Vì vậy, như bạn đã đề cập, có một cách khác - tức là mô phỏng hành vi ở cấp độ HĐH. Điều này cũng có một lợi thế khác - bạn có thể chắc chắn rằng đối với trình duyệt, nó trông giống 100% như con người (bởi vì, đó là trình điều khiển đang gửi tín hiệu). Vì vậy, bạn có thể sử dụng các giải pháp dựa trên trình điều khiển / thiết bị với bất kỳ trình duyệt nào (hoặc thậm chí trong tình huống, khi javascript bị tắt).

Linux

Thật không may, liên quan đến trình điều khiển / thiết bị ngay lập tức gây ra sự phụ thuộc hệ điều hành. Vì vậy, đối với mỗi hệ điều hành, bạn sẽ cần giải pháp riêng. Trong bài đăng này, tôi tập trung vào giải pháp dựa trên Linux (vì vậy, sẽ hoạt động với Linux) - và Mac OS một chút. Với Linux, bạn có thể viết các sự kiện vào thiết bị một cách rõ ràng, vì vậy bên dưới là mẫu hàm với vòng lặp chính:

int main()
{
    struct input_event event, event_end;

    int  fd = open("/dev/input/event4", O_RDWR);
    long ma = getInteger("Enter max amplitude [points, 0..50]: ", 0, 50);
    long ta = getInteger("Enter max wait time [usecs , 0..200000]: ", 0, 200000);
    if (fd < 0)
    {
        printf("Mouse access attempt failed:%s\n", strerror(errno));
        return -1;
    }
    memset(&event, 0, sizeof(event));
    memset(&event, 0, sizeof(event_end));
    gettimeofday(&event.time, NULL);
    event.type = EV_REL;
    gettimeofday(&event_end.time, NULL);
    event_end.type = EV_SYN;
    event_end.code = SYN_REPORT;
    event_end.value = 0;
    while(1)
    {
        event.code  = rand() % 2 ? REL_X : REL_Y;
        event.value = (rand() % 2 ? -1 : 1) * randomTill(ma);
        write(fd, &event, sizeof(event));
        write(fd, &event_end, sizeof(event_end));
        usleep(randomTill(ta));
    }
    close(fd);
    return 0;
}

Mã đầy đủ của tôi cho vấn đề được tìm thấy ở đây . Chương trình sẽ yêu cầu biên độ của "rung" và tần số của nó (do đó, bao nhiêu thời gian tính bằng micro giây nằm giữa "rung"). Để mô phỏng tình huống, nó sẽ buộc chuột di chuyển ngẫu nhiên cho 0..Xcác điểm theo hướng ngẫu nhiên (lên xuống dưới bên trái) và đợi ngẫu nhiên 0..Ymicro giây cho đến khi "rung" tiếp theo, có Xbiên độ "rung" và Ylà tần số của "rung" "

Một điều khác có thể là để điều chỉnh chương trình cho hệ thống của bạn. Chương trình này là "giả" và không thể tự phát hiện chuột, do đó, "/dev/input/event4"được mã hóa cứng. Để nhận ra những gì có thể là định danh cho hệ thống của bạn, bạn có thể thử:

user@host:/path$ cat /proc/bus/input/devices | grep mouse
H: Handlers=mouse0 event3 
H: Handlers=mouse1 event4

Và vì vậy, các khả năng là "event3""event4"- nhưng đối với hệ thống của bạn có thể có các giá trị khác. Vì vậy, nếu điều đó khác với hiện đang được sử dụng trong mã C, chỉ cần thay đổi dòng tương ứng (vì vậy, dòng int fd = open("/dev/input/event4", O_RDWR);và đặt thiết bị của bạn thay vì event4)

Một bản demo gif cho chương trình này (tốc độ khung hình thấp, thật không may, vì vậy hãy giữ hình ảnh không quá lớn) ở đây .

Một lưu ý nhỏ (nếu bạn không biết phải làm gì với mã C) - để biên dịch chương trình ở trên, chỉ cần sử dụng:

user@host:/path$ gcc -std=gnu99 file.c -o m

nơi file.clà tên của tập tin mã nguồn C của bạn, sau đó bạn sẽ nhận được thực thi, gọi là mtrong thư mục của bạn. Rất có thể bạn sẽ cần quyền để ghi trực tiếp vào thiết bị chuột, vì vậy bạn có thể sử dụng sudo:

user@host:/path$ sudo ./m

Hệ điều hành khác

Logic sẽ vẫn như cũ:

  • Tìm cách truy cập thiết bị chuột của bạn
  • Viết sự kiện chuột di chuyển
  • Áp dụng ngẫu nhiên cho sự kiện của bạn

Đó là nó. Chẳng hạn, Mac OS có cách riêng để làm việc với chuột (không giống như Linux, Mac procfscũng vậy), nó được mô tả kỹ ở đây .

Là một kết luận

Điều gì là tốt hơn - giải pháp javascript hoặc định hướng thiết bị - tùy thuộc vào bạn, bởi vì điều kiện nhất định (như trình duyệt chéo hoặc hệ điều hành chéo) có thể quyết định mọi thứ trong trường hợp này. Do đó, tôi đã cung cấp các hướng dẫn cùng với ví dụ hoạt động nhất định về cách triển khai điều đó ở cấp độ HĐH. Lợi ích ở đây là giải pháp đó là trình duyệt chéo, nhưng với chi phí chúng tôi có chương trình liên kết với hệ điều hành.


Cảm ơn rất nhiều cho bài viết rất chi tiết này. Tôi nghi ngờ rằng chúng tôi sẽ trình diễn trên máy tính bảng (android hoặc ios), vì vậy chúng tôi sẽ không thể thay đổi hành vi của chuột ở cấp độ HĐH. Nhưng dù sao cũng rất thú vị!
Joshua Muheim

53
Làm thế quái nào bạn sẽ chứng minh chuột run rẩy trên các thiết bị màn hình cảm ứng?
Thưởng thức

6
@Davor Thành thật mà nói, tôi rất nghi ngờ rằng những người thực sự gặp rắc rối với sự run rẩy / bàn tay run rẩy sẽ sử dụng một thiết bị cảm ứng , trừ khi họ muốn cố tình làm mình phát điên.
Chris Cirefice

2
@ChrisCirefice: Hoặc bị ép buộc, bởi vì họ phải sử dụng một trong những thiết bị đáng kinh ngạc ngoài kia để làm cho cuộc sống của chúng ta đẹp hơn và sử dụng màn hình cảm ứng ... hãy nhớ rằng đây là để nâng cao nhận thức về vấn đề mà những người này gặp vấn đề cái đó.
PlasmaHH

@PlasmaHH OP không đề cập rằng điều này là để nâng cao nhận thức cho những người bị run và khó khăn (cụ thể) với các thiết bị màn hình cảm ứng. Và một lần nữa, tôi không nghĩ bất cứ ai thực sự gặp vấn đề với chấn động là đủ bạo lực để thử sử dụng các thiết bị màn hình cảm ứng cầm tay . Có những thiết bị dễ sử dụng hơn nhiều, chẳng hạn như điện thoại có nút lớn (cơ học). Hầu hết các hệ điều hành bao gồm điều hướng bằng lời nói (ví dụ: Nhận dạng giọng nói - HĐH Windows). Tôi tưởng tượng rằng những cá nhân bị ảnh hưởng nghiêm trọng sẽ sử dụng những công cụ đó thay vì iPhone.
Chris Cirefice

23

Tôi đã làm điều này như một trò đùa một lần, trên Diễn đàn Puppy Linux và nhận được bình luận rằng:

Những người mắc bệnh Parkinson sẽ không nghĩ nó buồn cười !!!

Chữa bệnh ở đây chỉ đơn giản là cntrl-C, may mắn thay.

Đây là kịch bản shell yêu cầu xdotool

#!/bin/sh
while :; do
   xdotool mousemove_relative -- -$(($RANDOM % 10)) $(($RANDOM % 10))
   xdotool mousemove_relative -- $(($RANDOM % 10)) -$(($RANDOM % 10))
   sleep ${1:-.1} #adjust this as necessary for effect
done

Đặt tên là parkinson_sim và chạy với đối số tùy chọn trong khoảng thời gian giữa các lần rung có thể là 0,001 đến 999,0.

parkinson_sim [time_b between_tremors_in_seconds] #default là 0,1

Tôi đã phạm sai lầm khi tự bấm vào nó thay vì chạy nó từ dòng lệnh và nhanh chóng phát hiện ra nó phải bực bội như thế nào. Phải mất vài lần tôi mới mở được một cửa sổ đầu cuối để giết nó.


1
bạn có thể muốn thay thế dấu hai chấm bằng một cái gì đó như "ngủ 0,01" để hạn chế tốc độ và mức sử dụng cpu, bởi vì trên giàn khoan của tôi, nó làm cho việc nhảy nhanh không thực tế với mã của bạn.
nonchip

1
@nonchip - Cảm ơn thông tin, tôi chưa bao giờ chạy đủ lâu để tìm hiểu cách sử dụng cpu. Thêm một giấc ngủ cho cơ thể.
Technosaurus

Bạn biết trong hầu hết các bản phân phối Linux, bạn có thể mở thiết bị đầu cuối bằng các lệnh bàn phím, phải không?
cần

@justhalf Trong mặc định Puppy vào thời điểm đó, phím tắt đầu cuối là nhấn `trong cửa sổ ROX-Filer. Phải mất một vài lần thử để mở nó, vì vậy tôi đã sử dụng bàn phím để mở menu. Không lâu sau đó, tôi đã tạo ra một trình nền điều khiển giọng nói thô sơ bằng cách sử dụng Pocketphinx_continupt và khoảng 10 dòng vỏ.
Technosaurus

while :; do ...; sleep $time; donehầu như luôn luôn như vậy while sleep $time; do ...; done, bởi vì khi người dùng nhấn Ctrl-C, lệnh hiện đang thực thi sẽ gần như chắc chắn sleepvà shell không luôn kết thúc tập lệnh khi người dùng muốn. Điều này đáng chú ý nhất xảy ra trong quá trình thử nghiệm trong shell tương tác, nhưng đôi khi nó có thể xảy ra ngay cả trong các tập lệnh. Thậm chí tốt hơn sẽ được while xdotool ... && xdotool ... && sleep ...; do :; done.

16

Ý tưởng thứ hai của bạn (ẩn con trỏ) là một nửa mà tôi nghĩ có thể phù hợp với bạn:

  • Ẩn con trỏ chuột qua CSS, như bạn đề xuất. ( cursor:noneIIRC)
  • Thay vì GIF con trỏ run rẩy, hãy sử dụng một số hình ảnh + CSS định vị tuyệt đối + JS để mô phỏng con trỏ chuột; tức là, theo con chuột xung quanh trang và đặt hình ảnh con trỏ nơi con trỏ chuột nguyên bản sẽ là.

Sau đó, bạn thêm một số phép toán run vào mã con trỏ của bạn, để "lắc" con trỏ. Tùy thuộc vào bạn để xác định các đường cong bên phải là gì để mô phỏng đúng đầu vào rung.

Cuối cùng: cho bất kỳ điều khiển nào bạn đang lập trình (liên kết, v.v.):

  • nắm bắt các sự kiện nhấp chuột, đưa chúng đến vị trí "rung" hiện tại dựa trên trạng thái đường cong run rẩy của bạn và kiểm tra các yếu tố của bạn để xem liệu người dùng có thoát khỏi yếu tố dự định hay có thể vào một yếu tố không nhằm mục đích .

Một phần thưởng lớn với việc triển khai này: 'con trỏ run rẩy' của bạn sẽ được hiển thị trên các thiết bị cảm ứng, không có con trỏ để bắt đầu.


Biên tập:

Dựa trên cơ sở JSFiddle (rất sạch sẽ và hữu ích!) Của Michael Theriot từ các bình luận, đây là một lần rung liên tục với một lần quét phân phối bình thường xung quanh vị trí con trỏ hiện tại: http://jsfiddle.net/benmosher/0x4mc64v/4/

( normalMảng là kết quả của việc gọi rnorm(100)trong bảng điều khiển R của tôi. Cách đơn giản nhất tôi có thể nghĩ đến trong JS để lấy mẫu một số nguyên ngẫu nhiên được phân phối bình thường.)


Một số thông tin sự kiện chuột JS tiêu chuẩn: javascript.info/tutorial/ từ
Ben Mosher

Cảm ơn bạn, đây thực sự là một bổ sung rất xứng đáng với ý tưởng của tôi.
Joshua Muheim

Fiddle đơn giản là đẹp cho một dự án tôi đang thực hiện, mặc dù nó đã 4 tuổi, bạn có phiền tôi đánh cắp nó như là cơ sở cho mô phỏng của Parkinson là một phần của dự án của tôi không?
Graham Ritchie

@GrahamRitchie: tốt với tôi, nhưng Michael Theriot đã làm hầu hết công việc, IIRC
Ben Mosher

14

Chỉ cần một ý tưởng để có được sự run rẩy "đúng", bạn có thể ghi lại chuyển động chuột của một bệnh nhân thực sự, điều này làm cho nó chân thực hơn khi bạn nói với mọi người dữ liệu đến từ đâu.

Có một kịch bản để cho một con mèo theo con trỏ chuột của bạn, bạn có thể điều chỉnh một con để cho con trỏ thứ hai theo sau (nhảy xung quanh) con trỏ của bạn. Trang đang tính toán vị trí của con trỏ thứ hai, do đó nó cũng có thể xác định xem một sự kiện nhấp có thành công hay không.

Nếu bạn có thể, vui lòng làm cho nó dựa trên web, bạn sẽ tiếp cận được nhiều người hơn theo cách này hơn là yêu cầu họ cài đặt chương trình hoặc kích hoạt flash hoặc bất cứ thứ gì có.


Cảm ơn đề nghị này.
Joshua Muheim

1
Tôi thích ý tưởng này - vị trí chuột có thể được ghi lại bất cứ lúc nào thông qua JavaScript. Sau đó, bạn có thể vẽ ra các chuyển động (mặt phẳng XY) và thậm chí có được một số thống kê cơ bản cho công thức 'tremor_randomness' hợp lệ hơn cho giải pháp API Khóa con trỏ hoặc một cái gì đó tương tự. Điều này sẽ đòi hỏi nhiều công việc hơn một chút (ví dụ, chỉ tìm nạp vị trí XY cứ sau 100 giây trong 10 giây) và phân tích, nhưng sẽ mang lại cho bạn hiệu quả thực tế hơn nhiều so với ngẫu nhiên đơn giản. Đối với sự nghiệp của bạn, nó có thể là giá trị nó.
Chris Cirefice

10

Thay vì cố gắng di chuyển con trỏ, bạn có thể di chuyển ứng dụng (trang web) thay thế. Tôi đã viết một hình thức html đơn giản có một số trường nhập trong đó. Khi bạn di chuyển chuột vào biểu mẫu, biểu mẫu sẽ di chuyển.

Bạn có thể xem bản demo của hình thức di chuyển tại jsfiddle . Hãy thử nhấp vào một trong các trường đầu vào để xem hiệu ứng.

Tôi đã sử dụng hiệu ứng lắc jquery để đạt được điều này. Các javascript cho hiệu ứng lắc trông như thế này và chỉ khiến biểu mẫu di chuyển lên và xuống bất cứ khi nào chuột di chuyển qua nó:

<script type="text/javascript">
    $(document).ready(function() {
        $("#toggle").hover(function () {
            $(this).effect("shake", { direction: "up", times: 1, distance: 40}, 1000);
        });
    });
</script>

Mặc dù hình thức chỉ di chuyển lên và xuống, tôi nghĩ rằng nó có hiệu quả mong muốn. Bạn có thể chơi với các tham số (hướng, thời gian, khoảng cách, cũng như "1000" chưa được đặt tên ở trên) để điều chỉnh chuyển động của biểu mẫu.


3
Tôi cũng nghĩ về điều này, nhưng trong khi nó dễ thực hiện hơn, nó không cho thấy trải nghiệm "thực sự" của một cơn chấn động.
Joshua Muheim

10

Tại sao không sử dụng một giải pháp phần cứng? Có một số con chuột nhất định mà bạn có thể đặt trọng lượng, như Logitech G500. Thay vì đặt vật nặng, hãy đặt vào một động cơ dao động nhỏ khiến chuột rung nhẹ. Điều này cũng mô phỏng sự rối loạn thực tế nhiều hơn: nó không chỉ là con trỏ run rẩy, mà là toàn bộ bàn tay và chuột. Và nó cũng có nghĩa là bạn có thể hiển thị phần mềm khác ngoài các trang web.

Thay vì một con chuột có khe trọng lượng, bạn cũng có thể chỉ cần băng một cái gì đó vào chuột, nhưng điều đó đáng chú ý hơn.


Là một người đam mê máy tính chứ không phải máy móc, tôi sẽ sử dụng giải pháp điện tử. Cảm ơn!
Joshua Muheim

Mặc dù một giải pháp phần cứng khả thi là làm hỏng con chuột (có lẽ là có dây) bằng cách thêm một bộ tạo tiếng ồn ngẫu nhiên vào nó.
Licks nóng

6

Như bạn đang nghĩ về việc thực hiện nó với trình điều khiển chuột tùy chỉnh, tôi cho rằng một chương trình nhỏ chạy trên PC cũng sẽ làm được? Nếu đây là trường hợp, đây là một đoạn nhỏ cho C #, nó di chuyển vô cùng con trỏ ngẫu nhiên với một phạm vi cộng trừ 5px xung quanh vị trí con trỏ hiện tại. Sau mỗi lần dịch chuyển, chương trình đợi 50 ms đến 100 ms (không chính xác!). Sự run rẩy có thể được cấu hình bằng cách điều chỉnh các giá trị cho chuyển vị và tạm dừng. Tôi đã chạy nó trong một ứng dụng giao diện điều khiển và - tùy thuộc vào các giá trị - nó đã cho tôi khá khó khăn để dừng chương trình.

Random rand = new Random();

while(true)
{
    Cursor.Position = new Point() { X = Cursor.Position.X + rand.Next(11)-5, Y = Cursor.Position.Y + rand.Next(11)-5 };
    Thread.Sleep(rand.Next(50) + 50);
}

6

Đây là phiên bản windows của tập lệnh xdotool của tôi sử dụng AutoIt . Đây là kịch bản AutoIt đầu tiên của tôi và chỉ mất vài phút để viết, vì vậy tôi chắc chắn rằng nó có thể được cải thiện. Chỉ cần lưu với phần mở rộng .au3 và chạy nó với AutoIt (Run Script x86).

HotKeySet("{HOME}", "GStart")
HotKeySet("{PAUSE}", "Gpause")
HotKeySet("{ESC}", "Gexit")

While 1
    Sleep(100)
WEnd

Func Gstart()
While 1
    sleep(100)
    $pos = MouseGetPos()
    $x = $pos[0] + 10 - Random(0, 20, 1)
    $y = $pos[1] + 10 - Random(0, 20, 1)
    MouseMove($x,$y)
Wend
Endfunc


Func Gpause()
While 1
   sleep(100)
Wend
Endfunc

Func Gexit()
    MsgBox(0, "exit box", "Script exited")
    Exit 0
EndFunc

Kiểm soát

  • Trang chủ: Bắt đầu mô phỏng.
  • tạm dừng: Tạm dừng mô phỏng.
  • Esc: Thoát mô phỏng.

Hoặc sử dụng phiên bản biên dịch của tôi từ đây .


Rất đẹp. Cảm ơn bạn!
Joshua Muheim

5

Bạn không thể mong đợi bất cứ ai có thể nắm tay họ hoàn toàn ổn định, vì vậy một điều bạn có thể cân nhắc là,

  1. Giải thích cho người dùng những gì bạn đang làm và,
  2. Làm cho các yếu tố có thể nhấp trên trang demo nhỏ hơn nhiều so với bình thường.
  3. Tăng độ nhạy của chuột trên hệ thống ví dụ đến mức tối đa.

Lý do của tôi là (báo trước, tôi không phải là chuyên gia về ux hay y học) bằng cách làm cho các yếu tố có thể nhấp nhỏ hơn, bạn tạo ra một vấn đề tương tự cho hầu hết mọi người mà một người mắc bệnh Parkinson sẽ phải đối mặt với một trang web hàng ngày.


Đây là một ý tưởng thú vị, quá. Tôi chắc chắn đang có kế hoạch làm cho các yếu tố có thể nhấp khá nhỏ, dù sao đi nữa.
Joshua Muheim

2
Tôi e rằng hầu hết người dùng chuột có thể điều khiển thiết bị của họ xuống 1-2 pixel nếu họ tập trung - ví dụ: độ rung của bàn tay dưới 1 pixel với cài đặt chuột tôi sử dụng. Vì vậy, có lẽ không phải là một giải pháp phổ quát nếu các nút của bạn lớn hơn 1-2 pixel ...
Jonas Heidelberg

Tôi đã thêm số 3, giảm tốc độ chuột và nhấp vào cài đặt tối đa
Ryan B

Sẽ có ý nghĩa khi có một loại "điều khiển âm lượng tự động" trên chuột, khuếch đại các chuyển động nhỏ trong khi làm cho những cái lớn hơn gần với "bình thường" hơn.
Licks nóng

4

Bạn có thể sử dụng một bộ đồ mô phỏng tuổi già, chẳng hạn như một trong những mô tả trong này bài viết ... Tôi nghi ngờ phần tay run chỉ là một động cơ rung đeo quanh cổ tay, cộng với một số găng tay dày để làm cho bàn tay thường vụng về.


Cảm ơn bạn. Mặc dù điều này rất thú vị, nhưng có lẽ chúng ta sẽ không có tiền và thời gian để đưa mọi du khách vào vụ kiện. ;)
Joshua Muheim

5
Điều này sẽ không phù hợp hơn như là một nhận xét?
Selali Adobor

Chà, tôi hơi bối rối về các thẻ javascript và html, nhưng vì người hỏi cũng đề nghị sử dụng trình điều khiển chuột đặc biệt (và sau đó là máy tính bảng được đề cập), có vẻ như các giải pháp khác đều được chào đón. Một khi bạn lấy đi giới hạn công nghệ cụ thể, đây là một câu trả lời. Đây thực sự là cách các nhà nghiên cứu trong lĩnh vực này đang giải quyết vấn đề mô phỏng khuyết tật liên quan đến tuổi. Tôi cũng nghĩ rằng bạn có thể DIY tương đối rẻ nếu bạn chỉ muốn bị run - một trong những trọng lượng cổ tay velcro và động cơ rung, không nên quá khó.
dùng3067860

4
  • Trong DIVCSS của bạn , ẩn con trỏ bằng cách sử dụngcursor:none;
  • Tạo một hình ảnh con trỏ .png và di chuyển nó ( left, top) với jQ trênmousemove
  • Chọn ngẫu nhiên .png margin-leftmargin-topsử dụng một setTimeout (để làm cho việc định vị lại trơn tru sử dụng CSS3 transitionhoặc thực hiện với jQ .animate()).

Lưu ý: Tập lệnh không thể biết nếu tay vẫn còn trên chuột;)

function rand(min, max) {return Math.random() * (max - min) + min;}

var $cursor = $('div img');

$('div').mousemove(function(e) {  // Make .png follow the mouse coordinates
  $cursor.css({
    left: e.pageX,
    top:e.pageY
  });
}).hover(function(e){
  $cursor.toggle(); // Show .png cursor as we enter the DIV
});

(function tremor(){ // Add tremor to .png image
  $cursor.css({
      marginLeft: rand(-15,15), // arm tremor
      marginTop:  rand(-30,30)  // hand contractions
  });
  setTimeout(tremor, rand(50,100));
}());
div{
  position:absolute;
  background:#eee;
  height:100%;
  width:100%;
  cursor:none;
}

div img{
  display:none;
  position:absolute;
  transition: margin 0.2s;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div><img src="http://i.stack.imgur.com/KwMGA.png"></div>


2

Bây giờ các phần cấp thấp của mô phỏng chấn động đã được trả lời tốt. Tôi sẽ thêm một cái gì đó tập trung vào loại chấn động để mô phỏng:

Hầu hết các câu trả lời thực hiện một con trỏ chuột đang di chuyển trên một đường dẫn ngẫu nhiên với một số chiều rộng bước tối đa cố định theo hướng X và Y.

Điều này sẽ hoạt động đủ tốt cho trường hợp sử dụng làm cho nó khó chạm vào một khu vực cụ thể như nút.

Đối với vấn đề tổng quát hơn về mô phỏng các vấn đề UI gây ra bởi một cơn chấn động do bệnh Parkinson, ít nhất sẽ rất thú vị khi thực sự mô phỏng các chuyển động tay của loại chấn động này.
Tôi nghi ngờ việc đi bộ ngẫu nhiên có thể không phải là một xấp xỉ rất tốt .

Tất nhiên, có thể khó có được dữ liệu dấu vết thực sự của chuyển động run, nhưng chắc chắn có những bài viết về phân tích loại chấn động này:

Bài viết Đại diện tham số của chuyển động tay trong bệnh Parkinson là về cách vẽ các dấu vết chuyển động tay 3D tốt nhất.
Bài báo được dán tường, nhưng phần xem trước ở phía trên bên phải, được gắn nhãn "Nhìn vào bên trong>" trên hình ảnh cuốn sách, cho thấy một số lô thú vị của các biểu diễn khác nhau của dữ liệu dấu vết tay .

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.