Thay đổi: di chuột để chạm / nhấp cho thiết bị di động


84

Tôi đã xem xét xung quanh nhưng không thể tìm thấy những gì tôi đang tìm kiếm.

Tôi hiện có hoạt ảnh css trên trang của mình được kích hoạt bởi: hover. Tôi muốn điều này thay đổi thành 'nhấp' hoặc 'chạm' khi trang được thay đổi kích thước qua chiều rộng 700px bằng cách sử dụng truy vấn phương tiện.

Đây là những gì tôi có vào lúc này: http://jsfiddle.net/danieljoseph/3p6Kz/

Như bạn có thể thấy,: hover sẽ không hoạt động trên thiết bị di động nhưng tôi vẫn muốn đảm bảo nó hoạt động theo cùng một cách chỉ bằng cách nhấp chuột chứ không phải di chuột.

Tôi muốn sử dụng css nếu có thể nhưng cũng hài lòng với JQuery.

Tôi có cảm giác điều này rất dễ thực hiện nhưng tôi chỉ thiếu một điều rất rõ ràng! Bất kỳ trợ giúp sẽ được đánh giá cao.

Đây là hoạt ảnh css:

.info-slide {
  position:absolute;
  bottom:0;
  float:left;
  width:100%;
  background:url(../images/blue-back.png);
  height:60px;
  cursor:pointer;
  overflow:hidden;
  text-align:center;
  transition: height .4s ease-in-out;
  -webkit-transition: height .4s ease-in-out;
  -moz-transition: height .4s ease-in-out;
}

.info-slide:hover {
  height:300px;
}

có một plugin jquery được gọi là hoverIntent
Pete

Câu trả lời:


90

Nếu bạn sử dụng: bộ chọn hoạt động kết hợp với: di chuột, bạn có thể đạt được điều này theo w3schools miễn là: bộ chọn hoạt động được gọi sau: bộ chọn di chuột.

 .info-slide:hover, .info-slide:active{
   height:300px;
 }

Bạn sẽ phải kiểm tra FIDDLE trong môi trường di động. Tôi không thể vào lúc này.
sửa - Tôi vừa thử nghiệm trên thiết bị di động, nó hoạt động tốt


25
w3schools không phải là nguồn lực tốt nhất, vì vậy tôi muốn Loke trích dẫn developer.mozilla.org/en-US/docs/Web/CSS/%3Aactive
23tux

3
Điều này KHÔNG hoạt động trên Microsoft Edge trên máy tính xách tay Windows 10 hỗ trợ cảm ứng.
SepehrM

9
Ummmm ... xin lỗi? Cười lớn. Vâng, Microsoft edge vẫn chưa ra mắt khi tôi đăng bài này ... Tôi nghĩ
LOTUSMS

2
Điều này dường như không hoạt động trên safari di động. Tuy nhiên, câu trả lời bên dưới với onclick = "" thực sự hữu ích!
Jason Godson

4
Tất cả đều rất tốt cho đến khi người dùng chạm vào nút một lần nữa để đóng nó và nó sẽ không đóng trừ khi người dùng chạm vào bất kỳ đâu bên ngoài nút. Thử chế độ xem đáp ứng của các công cụ dành cho nhà phát triển Chrome nơi bạn có trình mô phỏng cảm ứng. Nếu nó có thể được thực hiện bằng cách nào đó trong CSS thuần túy, một lần nhấn khác vào nút sẽ đóng nó lại, thì điều đó thật tuyệt vời!
lowtechsun

17

Bạn có thể thêm onclick="" vào phần tử di chuột. Hover sẽ hoạt động sau đó.

Chỉnh sửa: Nhưng bạn thực sự không nên thêm bất kỳ phong cách nào liên quan đến đánh dấu của mình, chỉ cần đăng nó như một sự thay thế.


điều này đã làm việc cho tôi. Câu trả lời của LOTUSMS không - không chắc chắn tại sao. có lẽ một tương lai người truy cập vào trang này có thể soi sáng
danyamachine

Nó hoạt động trên safari với onclick="", nhưng sau đó làm thế nào để hủy kích hoạt phần tử? Nó vẫn hoạt động mãi mãi sau lần chạm đầu tiên, ngay cả khi chạm bên ngoài.
gigabyte

4
Cập nhật năm 2019: onclick = "" hiện không được dùng nữa
Gregdebrick

6

Tôi cũng gặp sự cố tương tự, trên thiết bị di động có trình duyệt Edge của Microsoft. Tôi có thể giải quyết vấn đề với: aria-haspopup="true". Nó cần phải thêm vào các div và :hover, :active, :focuscho các trình duyệt di động khác.

Html mẫu:

<div class="left_bar" aria-haspopup="true">

CSS:

.left_bar:hover, .left_bar:focus, .left_bar:active{
    left: 0%;
    }

6
document.addEventListener("touchstart", function() {}, true);

Đoạn mã này sẽ kích hoạt hiệu ứng di chuột cho màn hình cảm ứng


Tôi nghĩ điều này xứng đáng được giải thích thêm.
Romain Vincent

Hack tốt, nhưng cần phải cẩn thận: điều này có thể phá vỡ các tương tác cụ thể khác.
skabbit

3

Tôi là một noob CSS nhưng tôi nhận thấy rằng di chuột sẽ hoạt động cho màn hình cảm ứng miễn là nó là một phần tử "có thể di chuyển": hình ảnh, liên kết, nút. Bạn có thể làm tất cả với CSS bằng thủ thuật sau.

Thay đổi nền div của bạn thành một thẻ hình ảnh thực tế trong div hoặc tạo một liên kết giả xung quanh toàn bộ div, sau đó nó sẽ đăng ký dưới dạng di chuột khi bạn chạm vào hình ảnh.

Làm điều này có nghĩa là bạn cần phần còn lại của trang cũng "có thể lưu được" để khi bạn chạm vào bên ngoài hình ảnh, nó sẽ nhận ra rằng info-slide: hover đã kết thúc. Mẹo của tôi là làm cho tất cả các liên kết giả nội dung khác của tôi.

Nó không phải là rất thanh lịch nhưng nó hoạt động.


2
Bạn đang khái quát điều này một chút - đặc biệt là iPhone cũ hơn không áp dụng hovercho một lần nhấp (nhưng chúng áp dụng activefocus). Theo hiểu biết của tôi, nó cũng không phụ thuộc vào "khả năng nhấp" của một đối tượng, vì mọi phần tử đều "có thể nhấp" - nhưng tôi có thể sai, vì tôi chưa nhìn thấy tất cả các thiết bị ngoài đó, đó là lý do tại sao đó là cách tốt không chỉ bằng quan sát mà còn bằng tài liệu.
TheThirdMan

2

Trên hầu hết các thiết bị, các câu trả lời khác hoạt động. Đối với tôi, để đảm bảo nó hoạt động trên tất cả các thiết bị (trong phản ứng) Tôi đã phải bọc nó trong một thẻ neo <a>và thêm những điều sau đây: :hover, :focus, :active(theo thứ tự đó), cũng như role="button"tabIndex="0".


2

Tôi nghĩ rằng phương pháp đơn giản này có thể đạt được mục tiêu này. Với CSS, bạn có thể tắt sự kiện con trỏ thành 'none', sau đó sử dụng jQuery để chuyển đổi các lớp.

.item{
   pointer-events:none;
 }

.item.clicked{
   pointer-events:inherit;
 }
 
.item:hover,.item:active{
  /* Your Style On Hover Converted to Tap*/
  background:#000;
}

Sử dụng jQuery để chuyển đổi lớp:

jQuery('.item').click(function(e){
  e.preventDefault();
  $(this).addClass('clicked')l
});


0

Tôi đồng ý với các câu trả lời ở trên nhưng vẫn có một cách khác để làm điều này và đó là sử dụng media các truy vấn.

Giả sử đây là những gì bạn muốn làm:

body.nontouch nav a:hover {
    background: yellow;
}

thì bạn có thể thực hiện việc này bằng truy vấn phương tiện như:

@media(hover: hover) and (pointer: fine) {
    nav a:hover {
        background: yellow;
    }
}

Và để biết thêm chi tiết bạn có thể truy cập này trang.


0

Một giải pháp CSS chỉ dành cho những người gặp khó khăn với kiểu nút màn hình cảm ứng trên thiết bị di động.

Điều này sẽ khắc phục sự cố di chuột dính / nút hoạt động của bạn.

body, html {
  width: 600px;
}
p {
  font-size: 20px;
}

button {
  border: none;
  width: 200px;
  height: 60px;
  border-radius: 30px;
  background: #00aeff;
  font-size: 20px;
}

button:active {
  background: black;
  color: white;
}

.delayed {
  transition: all 0.2s;
  transition-delay: 300ms;
}

.delayed:active {
  transition: none;
}
<h1>Sticky styles for better touch screen buttons!</h1>

<button>Normal button</button>

<button class="delayed"><a href="https://www.google.com"/>Delayed style</a></button>

<p>The CSS :active psuedo style is displayed between the time when a user touches down (when finger contacts screen) on a element to the time when the touch up (when finger leaves the screen) occures.   With a typical touch-screen tap interaction, the time of which the :active psuedo style is displayed can be very small resulting in the :active state not showing or being missed by the user entirely.  This can cause issues with users not undertanding if their button presses have actually reigstered or not.</p>

<p>Having the the :active styling stick around for a few hundred more milliseconds after touch up would would improve user understanding when they have interacted with a button.</p>

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.