2011-11-09 31 views
6

Một câu hỏi kỳ lạ này sẽ được, nhưng ở đây đi. Tôi có một trang mà tôi hiển thị ảnh ở định dạng lớn, như hộp đèn. Khi nhấn ESC Tôi đóng trang và đưa người dùng trở lại trang nơi anh ta đến, hiển thị ảnh ở định dạng thông thường:Làm cách nào để phát hiện phím thoát khi nhấn trong video Youtube?

$(document).keyup(function(e) { 
if (e.keyCode == 27) { 
    var closeURL = $('.close').attr('href'); 
     window.location = closeURL; 
} 
}); 

Tuy nhiên, trên cùng một trang hộp đèn cũng là bảng điều khiển bên có thể chứa video Youtube được nhúng. Người dùng có thể phóng to video đó lên chế độ toàn màn hình bằng cách sử dụng các điều khiển video chuẩn của trình phát Youtube. Nếu người dùng nhấn ESC trong trường hợp đó, nó sẽ đóng video toàn màn hình và quay lại trang lightbox (hành vi trình phát nhúng chuẩn, đó là điều tôi muốn), tuy nhiên, sự kiện phím ESC sau đó cũng kích hoạt mã khóa của tôi. Hộp đèn, không mong muốn trong trường hợp cụ thể này.

Tôi đã tìm thấy điều này nhỏ gọn khi ở trong Chrome, nhưng không phải trong Firefox. Về cơ bản những gì tôi muốn là cho mã ESC của tôi không được kích hoạt khi nhấn ESC để đóng trình phát Youtube, nhưng nó chỉ kích hoạt khi người dùng nhấn ESC khi họ xem ảnh (chứ không phải video).

Tôi đã xem xét event.target để phân biệt giữa các trường hợp này nhưng không có may mắn. Bất kỳ ý tưởng?

Cập nhật: Tôi sẽ chấp nhận lỗi chỉ Chrome này ngay bây giờ. Vẫn mở cửa cho các giải pháp mặc dù.

+0

Bạn có thể đăng HTML cho bảng điều khiển giữ các cầu thủ youtube –

+0

Đây là một kỳ lạ như Chrome chỉ dường như cư xử rất lạ với phím nhấn. –

+0

@JohnHartsock Suy nghĩ của tôi chính xác :) Tôi đã không mong đợi rằng phím ESC để kích hoạt sự kiện của tôi ở tất cả, như tôi nghĩ rằng nó đã xảy ra trong một khung nội tuyến. Bây giờ tôi đang bối rối như những gì các hành vi chính xác sẽ được, tất cả tôi biết là tôi không muốn sự kiện để bong bóng từ Youtube đến trang của tôi. – Ferdy

Trả lời

1

Tôi không tin điều này sẽ thực hiện được. Trình phát Flash nắm bắt đầu vào khi tập trung vào - ví dụ: nếu bạn nhấp vào phát trong video YouTube, sau đó nhấn Ctrl-W để đóng tab, nó sẽ không đóng cho đến khi bạn nhấp vào trang bên ngoài video, quay lại tiêu điểm Trình duyệt.

Điều khiển đầu vào có hiệu quả được chuyển sang một quy trình khác (trình phát Flash) trong khi nó được tập trung, vì vậy bạn sẽ không thể chụp hoặc thực hiện thao tác nhập cho đến khi người dùng trả về điều khiển trình duyệt một cách rõ ràng.

+0

Cảm ơn, tôi nghĩ rằng giải thích nó, mặc dù một điều đáng tiếc của nó khác nhau trình duyệt xử lý nó một cách khác nhau. – Ferdy

1

Có lẽ một cái gì đó như thế sẽ làm việc:

$(document).not("iframe").keyup(... 
+0

Cảm ơn bạn đã suy nghĩ cùng. Đã thử nó, nhưng với mã đó có vẻ như không kích hoạt gì nữa. – Ferdy

1

Chỉ cần vấp trên này .. Tôi biết đây là một chút cũ nhưng có một giải pháp khả thi (sẽ yêu cầu làm việc nhiều hơn) ...

Bạn có thể quấn máy nghe nhạc youtube trong máy nghe nhạc flash của riêng bạn (sử dụng API hoặc đơn giản là một vùng chứa) và phát hiện phím nhấn trong flash. Sau đó, bạn có thể gọi cùng một hàm javascript trực tiếp từ ứng dụng flash của mình để không quan trọng liệu trang của bạn hoặc ứng dụng flash có tập trung vào tập lệnh bạn muốn chạy sẽ luôn chạy hay không.

0

Bạn có thể thực hiện việc này bằng cách phát hiện trạng thái phát cho video và sau đó đặt tiêu điểm trở lại cửa sổ.

Trình phát Flash cho API Youtube hiện không còn được dùng nữa - vì vậy bạn nên sử dụng API IFrame.

Bạn có thể sử dụng các sự kiện onStateChange để phát hiện tình trạng 1 (playing) và sau đó chỉ cần gọi:

`$(window).focus()` (jQuery syntax) 

này sau đó sẽ cho phép bạn sử dụng keyup sự kiện. Đảm bảo sử dụng window và không phải document cho cuộc gọi focus().

Đây là phần sự kiện của tài liệu.

https://developers.google.com/youtube/iframe_api_reference#Events

Các vấn đề liên quan