Trượt phải sang trái?


390

Làm thế nào tôi có thể có một div đi từ thu gọn sang mở rộng (và ngược lại), nhưng làm như vậy từ phải sang trái?

Hầu hết mọi thứ tôi thấy ngoài kia luôn luôn từ trái sang phải.




Câu trả lời:


378
$("#slide").animate({width:'toggle'},350);

Tham khảo: https://api.jquery.com/animate/


Bạn cũng có thể thêm paddingLeft: 'toggle', paddingRight: 'toggle'khi phần tử có phần đệm bên trong.
piotr_cz

17
Hoạt động tốt, chỉ có nó trượt từ trái sang phải khi tôi thử nó. Có thể làm cho nó hoạt hình theo cách khác?
twan

2
Rắc rối duy nhất là nếu có nội dung bên trong, nó sẽ "đè bẹp" nó theo chiều ngang, khiến các điều khiển di chuyển về / thay đổi kích thước / bọc, v.v. Có giải pháp nào tốt cho việc đó không?
Neil Barnwell

1
Mã của bạn cần nhiều hơn CSSđể trông giống như một slide thực sự bên trái
AmerllicA

1
@NeilBarnwell nếu bạn có thể, hãy đặt nội dung trong một gói có chiều rộng cố định và có bộ chứa overflow: hidden.
Ben Philipp

239

Điều này có thể đạt được một cách tự nhiên bằng cách sử dụng các phương thức ẩn / hiển thị jQueryUI. Ví dụ.

    // To slide something leftwards into view,
    // with a delay of 1000 msec
    $("div").click(function () {
          $(this).show("slide", { direction: "left" }, 1000);
    });

Tham khảo: http://docs.jquery.com/UI/Effects/Slide


141
@ekerner - điều này đòi hỏi JQueryUI, một thư viện đồ sộ. Nếu tất cả những gì bạn muốn là một chuyển đổi slide đơn giản, thì đây có lẽ không phải là câu trả lời;)
Jesse

9
Đây là cách tốt nhất nếu bạn đã cài đặt jQueryUI.
steampowered

5
Để làm rõ - tệp tối thiểu ít nhất là 235kb !! Điều này là tốt nhưng nó sẽ thêm đáng kể vào trang của bạn khi @Jlie chỉ ra
Ukuser32 23/2/2016

1
Sử dụng trình xây dựng tùy chỉnh và loại bỏ mọi thứ trừ hoạt hình slide, có thể nhận được mã hóa tối thiểu dưới 20KB.
Skylar Ittner

Tôi ước các tài liệu UI của JQuery sẽ có các ví dụ như thế này. Cảm ơn
andreszs

76

Dùng cái này:

$('#pollSlider-button').animate({"margin-right": '+=200'});

Bản thử trực tiếp

Phiên bản cải tiến

Một số mã đã được thêm vào bản demo, để ngăn chặn lợi nhuận kép khi nhấp đúp: http://jsfiddle.net/XNnHC/942/

Sử dụng nó với nới lỏng;)

http://jsfiddle.net/XNnHC/1591/

  • Mã JavaScript bổ sung đã bị xóa.

  • Tên lớp và một số mã CSS đã thay đổi

  • Đã thêm tính năng để tìm nếu được mở rộng hoặc thu gọn

  • Thay đổi có sử dụng hiệu quả nới lỏng hay không

  • Thay đổi tốc độ hoạt hình

http://jsfiddle.net/XNnHC/1808/


2
Tính toán các giá trị trong 'px', do đó không khả thi cho '%'
Faisal Ashfaq

nó đang di chuyển sang trái trên mỗi lần nhấp.
Elyor

Bạn có thể kiểm tra chiều rộng bên ngoài và sử dụng chiều rộng đó để thêm lề phải
Tofandel

22

Hãy xem ví dụ hoạt động này trên Fiddle, sử dụng giao diện người dùng jQuery . Đó là một giải pháp tôi đã sử dụng ban đầu từ trái sang phải, nhưng tôi đã thay đổi nó để hoạt động từ phải sang trái.

Nó cho phép người dùng nhấp vào liên kết một cách nhanh chóng mà không phá vỡ hình ảnh động giữa các bảng có sẵn.

Mã JavaScript rất đơn giản:

$(document).ready(function(){
    // Mostra e nascondi view-news
    var active = "europa-view";
    $('a.view-list-item').click(function () {
        var divname= this.name;
        $("#"+active ).hide("slide", { direction: "right" }, 1200);
        $("#"+divname).delay(400).show("slide", { direction: "right" }, 1200);
        active = divname;
    });
});

Nhận HTML và CSS tại liên kết Fiddle.

Đã thêm nền trắng và đệm trái chỉ để trình bày hiệu ứng tốt hơn.


8
yêu cầu giao diện người dùng jQuery
Jeroen K

Đúng. Nó được chỉ định tại liên kết ví dụ được cung cấp [ jsfiddle.net/erwinjulius/az4JL/]
Erwin Julius

19

Dùng cái này

<script src="jquery.min.js"></script>
<script src="jquery-ui.min.js"></script>
<script>
    $(document).ready(function(){
        $("#flip").click(function () {
            $("#left_panel").toggle("slide", { direction: "left" }, 1000);
        });
    });
</script>


10
$(function() {
  $('.button').click(function() {
    $(this).toggleClass('active');
    $('.yourclass').toggle("slide", {direction: "right"}, 1000);
  });
});

11
Tôi là tất cả cho ý kiến ​​nhưng mã này là khá tự giải thích.
Jon

7

Tôi đã làm theo cách này:

var btn_width = btn.width();
btn.width(0);
btn.show().animate({width: btn_width}, {duration: 500});

Lưu ý, nút "btn" đó phải được ẩn trước khi hoạt ảnh và bạn cũng có thể cần đặt "vị trí: tuyệt đối" cho nó.


Tại sao không sử dụng width: 'toggle'? btn.show().animate({width: 'toggle'}, {duration: 500});là tất cả những gì bạn cần, tôi tin.
Aart den Braber

6

Một thư viện đáng nói khác là animate.css . Nó hoạt động rất tốt với jQuery và bạn có thể thực hiện nhiều hoạt ảnh thú vị chỉ bằng cách bật các lớp CSS.

Giống..

$ ("# slide"). toggle (). toggleClass ('hoạt hình nảyInLeft');


5

Nền tảng hoạt hình GreenSock (GSAP) vớiTweenLite/TweenMaxcung cấp các chuyển tiếp mượt mà hơn với khả năng tùy biến lớn hơn nhiều so với các chuyển đổi jQuery hoặc CSS3. Để tạo hiệu ứng các thuộc tính CSS bằng TweenLite / TweenMax, bạn cũng sẽ cần plugin của họ có tên là "CSSPlugin". TweenMax bao gồm điều này tự động.

Đầu tiên, tải thư viện TweenMax:

<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.18.0/TweenMax.min.js"></script>

Hoặc phiên bản nhẹ, TweenLite:

<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.18.0/plugins/CSSPlugin.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.18.0/easing/EasePack.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.18.0/TweenLite.min.js"></script>

Sau đó, gọi hoạt hình của bạn:

 var myObj= document.getElementById("myDiv");

// Syntax: (target, speed, {distance, ease})
 TweenLite.to(myObj, .7, { x: 500, ease: Power3.easeOut});

Bạn cũng có thể gọi nó bằng bộ chọn ID:

 TweenLite.to("#myID", .7, { x: 500, ease: Power3.easeOut});

Nếu bạn đã tải jQuery, bạn có thể sử dụng các bộ chọn rộng nâng cao hơn, như tất cả các phần tử có chứa một lớp cụ thể:

 // This will parse the selectors using jQuery's engine.
TweenLite.to(".myClass", .7, { x: 500, ease: Power3.easeOut});

Để biết chi tiết đầy đủ, xem: Tài liệu TweenLite

Theo trang web của họ: "TweenLite là một công cụ hoạt hình cực kỳ nhanh, nhẹ và linh hoạt, đóng vai trò là nền tảng của Nền tảng hoạt hình GreenSock (GSAP)."


4

Trước tiên, bạn có thể xác định chiều rộng của phần tử là 0, nổi bên phải, và sau đó vào sự kiện mà bạn sắp hiển thị .. nó sẽ giống như

$('#the_element_to_slide_from_right_left').animate({ width:'your desired width' }, 600);

Đơn giản như thế.


4

Một ví dụ về hoạt hình từ phải sang trái mà không có Giao diện người dùng jQuery , chỉ với jQuery (bất kỳ phiên bản nào, xem https://api.jquery.com/animate/ ).

$(document).ready(function() {
  var contentLastMarginLeft = 0;
  $(".wrap").click(function() {
    var box = $(".content");
    var newValue = contentLastMarginLeft;
    contentLastMarginLeft = box.css("margin-left");
    box.animate({
      "margin-left": newValue
    }, 500);
  });
});
.wrap {
  background-color: #999;
  width: 200px;
  overflow: hidden;
}
.content {
  width: 100%;
  margin-left: 100%;
  background-color: #eee;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrap">
  click here
  <div class="content">
    I would like to have a div go from collapsed to expanded (and vice versa), but do so from right to left. Most everything I see out there is always left to right.
  </div>
</div>



3

hoặc bạn có thể sử dụng

$('#myDiv').toggle("slide:right");

4
Khi trả lời một câu hỏi mười năm tuổi với mười bốn câu trả lời hiện có khác, nó sẽ giúp giải thích cách tiếp cận mới mà câu trả lời của bạn mang lại, và nếu nó có giá trị khi câu hỏi được hỏi, hoặc nếu nó sử dụng các kỹ thuật có sẵn trong mười năm đó .
Jason Aller

1

Một ví dụ được tôi thực hiện bằng cách sử dụng cuộn (chỉ HTML, CSS và JS, chỉ với thư viện jquery). Khi cuộn xuống một nút sẽ trượt sang trái.

Ngoài ra, tôi đề nghị bạn nếu điều duy nhất bạn muốn là hiệu ứng này, đừng sử dụng Giao diện người dùng jQuery vì nó quá nặng (nếu bạn chỉ muốn sử dụng nó cho việc đó).

$(window).scroll(function(){
  if ($(this).scrollTop() > 100) {
          event.preventDefault();
          $(".scrollToTop").css({'transform': 'translate(0px, 0px)'});
      } else {
          $(".scrollToTop").css({'transform': 'translate(40px, 0px)'});
      }
  });

Kiểm tra ví dụ này


1
Đúng, chuyển đổi CSS là một trong những cách tốt nhất để đạt được điều này hiện nay.
Tom Tom

1

Nếu divvị trí của bạn được định vị tuyệt đối và bạn biết chiều rộng, bạn chỉ có thể sử dụng:

#myDiv{
position:absolute;
left: 0;
width: 200px;
}

$('#myDiv').animate({left:'-200'},1000);

Mà sẽ trượt nó ra khỏi màn hình.

Ngoài ra, bạn có thể bọc nó một container div

#myContainer{
position:relative;
width: 200px;
overflow: hidden;
}

#myDiv{
position:absolute;
top: 0;
left: 0;
width: 200px;
}

<div id="myContainer">

<div id="myDiv">Wheee!</div>

</div>

$('#myDiv').animate({left:'-200'},1000);
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.