2012-01-23 116 views
5

Tôi muốn tạo hiệu ứng lật thẻ (giống như chuyển đổi webkit và chuyển đổi 3d) trên DIV bằng cách sử dụng javascript hoặc CSS và KHÔNG có thư viện hoặc plugin đơn giản. Làm thế nào tôi có thể đạt được điều này? Vì hầu hết các thuộc tính CSS3 hoạt động cho các trình duyệt webkit. Và hầu hết các giải pháp javascript sử dụng các thư viện như jquery và các plugin của nó. Tôi đang tìm một giải pháp mà không sử dụng bất kỳ thư viện nhưng chỉ javascript/CSS và vẫn hoạt động qua trình duyệt.Cách tạo hiệu ứng lật thẻ trên DIV bằng cách sử dụng javascript

Mọi trợ giúp sẽ được đánh giá cao.

Kính trọng, manishekhawat

+3

đó là một thứ tự khá cao đối với trình duyệt chéo. –

+4

Bạn sẽ kết thúc việc tạo lại các thư viện hiện có. Vấn đề với việc sử dụng thư viện là gì? –

+0

@Daniel, Vâng, tôi đồng ý. Tôi đã tìm kiếm một giải pháp như vậy trong một thời gian dài. Nhưng luôn luôn kết thúc ở chuyển đổi webkit hoặc một số plugin jquery. Rất tiếc, tôi không thể sử dụng những thời gian này vì giải pháp phải là trình duyệt chéo. – manishekhawat

Trả lời

2

3d Transforms trong CSS3 hiện chỉ hoạt động trên các trình duyệt webkit. Xin lỗi - không có cách nào để thực hiện việc này trong các trình duyệt khác mà không sử dụng một chồng giấy JS như cssSandpaper (http://www.useragentman.com/blog/csssandpaper-a-css3-javascript-library/).

Điều này không được khuyến nghị mặc dù vì điều này sẽ dẫn đến giảm hiệu suất nghiêm trọng khi tải phiên bản JS.

Biến đổi 3d và hoạt ảnh khung hình chính vẫn là một tính năng hoàn toàn mới của thông số CSS3 và do đó chỉ được chấp nhận trong các trình duyệt cập nhật nhất (safari, chrome). Nếu bạn muốn có một giải pháp cross-browser mà không requre javascript bạn sẽ phải ngồi trên ngón tay cái của bạn trong một vài năm.

2

Cách triển khai:

Hoạt ảnh CSS rất thú vị; vẻ đẹp của họ là thông qua nhiều tính chất đơn giản, bạn có thể tạo ra bất cứ thứ gì từ một sự mờ nhạt thanh lịch trong một hiệu ứng WTF-Pixar-sẽ-tự hào. Một hiệu ứng CSS ở đâu đó ở giữa là hiệu ứng lật CSS, nhờ đó có nội dung ở cả mặt trước và mặt sau của một vùng chứa nhất định. Hướng dẫn này sẽ hiển thị cho bạn thấy để tạo hiệu ứng đó theo cách đơn giản nhất có thể.

HTML

Cấu trúc HTML để đạt được tác dụng hai mặt là như bạn mong chờ nó là:

<div class="flip-container" ontouchstart="this.classList.toggle('hover');"> 
    <div class="flipper"> 
     <div class="front"> 
      <!-- front content --> 
     </div> 
     <div class="back"> 
      <!-- back content --> 
     </div> 
    </div> 
</div> 

Có hai panes nội dung, "trước" và "quay lại", như bạn mong đợi, nhưng cũng có hai phần tử chứa các vai trò rất cụ thể được giải thích bởi CSS của chúng. Cũng lưu ý phần ontouchstart cho phép các tấm trao đổi trên màn hình cảm ứng.

CSS

/* entire container, keeps perspective */ 
.flip-container { 
    perspective: 1000; 
} 
    /* flip the pane when hovered */ 
    .flip-container:hover .flipper, .flip-container.hover .flipper { 
     transform: rotateY(180deg); 
    } 

.flip-container, .front, .back { 
    width: 320px; 
    height: 480px; 
} 

/* flip speed goes here */ 
.flipper { 
    transition: 0.6s; 
    transform-style: preserve-3d; 

    position: relative; 
} 

/* hide back of pane during swap */ 
.front, .back { 
    backface-visibility: hidden; 

    position: absolute; 
    top: 0; 
    left: 0; 
} 

/* front pane, placed above back */ 
.front { 
    z-index: 2; 
    /* for firefox 31 */ 
    transform: rotateY(0deg); 
} 

/* back, initially hidden pane */ 
.back { 
    transform: rotateY(180deg); 
} 

Dưới đây là một thô tổng quan của quá trình:

  • Container xa trung tâm đặt quan điểm của toàn bộ khu vực phim hoạt hình của

  • Các thùng chứa bên trong là yếu tố thực sự lật, quay 180 độ khi vùng chứa mẹ được di chuột qua. Đây cũng là nơi bạn kiểm soát tốc độ chuyển đổi. Thay đổi xoay thành -180deg quay các phần tử theo hướng ngược lại.

  • Các phần tử trước và sau được đặt hoàn toàn để chúng có thể "phủ" nhau ở cùng một vị trí; khả năng hiển thị backface của chúng bị ẩn nên mặt sau của các thành phần bị lật không hiển thị trong thời gian hoạt ảnh .

  • Yếu tố trước có z-index cao hơn các yếu tố trở nên yếu tố trước có thể được mã hóa đầu tiên nhưng nó vẫn hiển thị trên đầu trang

  • Yếu tố lại là xoay 180 độ, để đóng vai trò như đằng sau.

Đó thực sự là tất cả với nó! Đặt cấu trúc đơn giản này vào vị trí và sau đó tạo kiểu cho mỗi bên như bạn muốn!

CSS Lật Chuyển đổi

Nếu bạn muốn phần tử chỉ lật trên lệnh qua JavaScript, một đơn giản lớp CSS chuyển đổi sẽ làm các trick:

.flip-container:hover .flipper, .flip-container.hover .flipper, .flip-container.flip .flipper 
{ 
    transform: rotateY(180deg); 
} 

Thêm lớp lật đến phần tử vùng chứa sẽ lật thẻ bằng JavaScript - không cần di chuột qua người dùng. Nhận xét JavaScript như

document.querySelector("#myCard").classList.toggle("flip") sẽ thực hiện thao tác lật!

CSS Vertical Lật

Thực hiện lật dọc là dễ dàng như lật trục và thêm giá trị chuyển đổi xuất xứ trục. Nguồn gốc của flip phải được cập nhật và thẻ xoay theo cách khác:

.vertical.flip-container { 
    position: relative; 
} 

    .vertical .back { 
     transform: rotateX(180deg); 
    } 

    .vertical.flip-container .flipper { 
     transform-origin: 100% 213.5px; /* half of height */ 
    } 

    .vertical.flip-container:hover .flipper { 
     transform: rotateX(-180deg); 
    } 

Bạn có thể thấy rằng việc tiếp cận X được sử dụng, không phải là Y.

Tất cả tín dụng đi vào phát triển David Walsh, tôi vừa sao chép nội dung.

+0

Vui lòng thêm một số chi tiết về cách triển khai điều này trong trường hợp liên kết bị chết. Liên kết chỉ câu trả lời không giá vé tốt ở đây. – krillgar

+1

@krillgar tôi đã thực hiện –

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