Câu trả lời ngắn:
Tôi đã làm nó. Tôi đã viết một chức năng cho việc sử dụng năng động cho tất cả những người nhỏ bé ngoài kia ...
Ví dụ làm việc hiển thị trên trang
Ví dụ làm việc đăng nhập vào bàn điều khiển
Câu trả lời dài:
... Vẫn làm điều đó.
Tôi đã mất một lúc để làm điều đó, vì một yếu tố psuedo không thực sự trên trang. Mặc dù một số câu trả lời ở trên hoạt động trong MỘT SỐ kịch bản, nhưng TẤT CẢ chúng không thể động và hoạt động theo kịch bản trong đó một phần tử bất ngờ về kích thước và vị trí (chẳng hạn như các phần tử được định vị tuyệt đối che phủ một phần của phần tử cha). Của tôi thì không.
Sử dụng:
//some element selector and a click event...plain js works here too
$("div").click(function() {
//returns an object {before: true/false, after: true/false}
psuedoClick(this);
//returns true/false
psuedoClick(this).before;
//returns true/false
psuedoClick(this).after;
});
Làm thế nào nó hoạt động:
Nó lấy các vị trí chiều cao, chiều rộng, trên cùng và bên trái (dựa trên vị trí cách xa mép cửa sổ) của phần tử cha và lấy các vị trí chiều cao, chiều rộng, đỉnh và bên trái (dựa trên cạnh của thùng chứa cha ) và so sánh các giá trị đó để xác định vị trí của phần tử psuedo trên màn hình.
Sau đó, nó so sánh nơi con chuột. Miễn là con chuột nằm trong phạm vi biến mới được tạo thì nó sẽ trả về true.
Ghi chú:
Đó là khôn ngoan để làm cho các yếu tố cha mẹ LIÊN QUAN vị trí. Nếu bạn có một phần tử psuedo được định vị tuyệt đối, chức năng này sẽ chỉ hoạt động nếu nó được định vị dựa trên kích thước của cha mẹ (vì vậy cha mẹ phải tương đối ... có thể dính hoặc cố định cũng sẽ hoạt động .... Tôi không biết).
Mã số:
function psuedoClick(parentElem) {
var beforeClicked,
afterClicked;
var parentLeft = parseInt(parentElem.getBoundingClientRect().left, 10),
parentTop = parseInt(parentElem.getBoundingClientRect().top, 10);
var parentWidth = parseInt(window.getComputedStyle(parentElem).width, 10),
parentHeight = parseInt(window.getComputedStyle(parentElem).height, 10);
var before = window.getComputedStyle(parentElem, ':before');
var beforeStart = parentLeft + (parseInt(before.getPropertyValue("left"), 10)),
beforeEnd = beforeStart + parseInt(before.width, 10);
var beforeYStart = parentTop + (parseInt(before.getPropertyValue("top"), 10)),
beforeYEnd = beforeYStart + parseInt(before.height, 10);
var after = window.getComputedStyle(parentElem, ':after');
var afterStart = parentLeft + (parseInt(after.getPropertyValue("left"), 10)),
afterEnd = afterStart + parseInt(after.width, 10);
var afterYStart = parentTop + (parseInt(after.getPropertyValue("top"), 10)),
afterYEnd = afterYStart + parseInt(after.height, 10);
var mouseX = event.clientX,
mouseY = event.clientY;
beforeClicked = (mouseX >= beforeStart && mouseX <= beforeEnd && mouseY >= beforeYStart && mouseY <= beforeYEnd ? true : false);
afterClicked = (mouseX >= afterStart && mouseX <= afterEnd && mouseY >= afterYStart && mouseY <= afterYEnd ? true : false);
return {
"before" : beforeClicked,
"after" : afterClicked
};
}
Ủng hộ:
Tôi không biết .... có vẻ như tức là ngu ngốc và thích trả lại tự động như một giá trị được tính toán đôi khi. NÓ CÓ THỂ LÀM VIỆC VÀO TẤT CẢ CÁC DUYỆT NẾU KHI KHAI THÁC ĐƯỢC THIẾT LẬP TRONG CSS. Vì vậy, ... đặt chiều cao và chiều rộng của bạn trên các phần tử psuedo của bạn và chỉ di chuyển chúng với đỉnh và trái. Tôi khuyên bạn nên sử dụng nó trên những thứ mà bạn thấy ổn với nó không hoạt động. Giống như một hình ảnh động hoặc một cái gì đó. Chrome hoạt động ... như bình thường.