jQuery trượt sang trái và hiển thị


111

Tôi đã mở rộng các jQueryhiệu ứng được gọi slideRightShow()slideLeftHide()với một số hàm hoạt động tương tự như slideUp()slideDown()như được thấy bên dưới. Tuy nhiên, tôi cũng muốn thực hiện slideLeftShow()slideRightHide().

Tôi biết có rất nhiều thư viện cung cấp loại điều này (tôi muốn tránh thêm một tập hợp lớn các javascripttệp khác), nhưng có ai có thể cung cấp một ví dụ đơn giản về cách triển khai slideLeftShow()hoặc slideRightHide()không?

jQuery.fn.extend({
  slideRightShow: function() {
    return this.each(function() {
      jQuery(this).animate({width: 'show'});
    });
  },
  slideLeftHide: function() {
    return this.each(function() {
      jQuery(this).animate({width: 'hide'});
    });
  },
  slideRightHide: function() {
    return this.each(function() {
      ???
    });
  },
  slideLeftShow: function() {
    return this.each(function() {
      ???
    });
  }
});

Hàm trên slideRightShowbắt đầu hiển thị hình ảnh từ phía bên trái và nó tiến dần về phía bên phải. Tôi đang tìm cách nào đó để làm điều tương tự nhưng bắt đầu từ phía bên phải và tiến dần về phía bên trái . Cảm ơn!

BIÊN TẬP

Giao diện jQuery có một cái gì đó mà tôi cần (về cơ bản tôi cần các chức năng "trượt sang phải" và "trượt ra trái"), nhưng tôi không thể làm cho điều này hoạt động với jQuery 1.3: http://interface.eyecon.ro/demos /ifx.html . Ngoài ra, bản demo của họ dường như bị hỏng và nó sẽ chỉ thực hiện slide một lần trước khi ném một triệu lỗi.


Tôi đã cập nhật bài đăng của mình, tôi hy vọng điều này sẽ hữu ích
bentewey

Câu trả lời:


185

Tính năng này được bao gồm như một phần của jquery ui http://docs.jquery.com/UI/Effects/Slide nếu bạn muốn mở rộng nó với tên riêng của mình, bạn có thể sử dụng tính năng này.

jQuery.fn.extend({
  slideRightShow: function() {
    return this.each(function() {
        $(this).show('slide', {direction: 'right'}, 1000);
    });
  },
  slideLeftHide: function() {
    return this.each(function() {
      $(this).hide('slide', {direction: 'left'}, 1000);
    });
  },
  slideRightHide: function() {
    return this.each(function() {
      $(this).hide('slide', {direction: 'right'}, 1000);
    });
  },
  slideLeftShow: function() {
    return this.each(function() {
      $(this).show('slide', {direction: 'left'}, 1000);
    });
  }
});

bạn sẽ cần các tài liệu tham khảo sau

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="http://jquery-ui.googlecode.com/svn/tags/latest/ui/jquery.effects.core.js"></script>
<script src="http://jquery-ui.googlecode.com/svn/tags/latest/ui/jquery.effects.slide.js"></script>

Chào! Tôi đang tìm kiếm nghịch đảo của những gì bạn đã triển khai ở đó. Về cơ bản, khi tôi sử dụng những gì tôi có ở trên để hiển thị một phần tử, phần bên trái xuất hiện đầu tiên và tiến dần về phía bên phải. Tôi đang cố gắng để nó bắt đầu từ phía bên phải và tiến dần về phía bên trái.
Wickethewok

1
nó hoạt động nếu bạn thả nổi phần tử bên phải. Nếu không thì. bạn có thể muốn hợp nhất thuộc tính bên trái và di chuyển phần tử khi bạn thu nhỏ nó.
bentewey

1
Thay đổi phần tử thành float "right" không làm đảo ngược trang trình bày đối với tôi. Tôi đã làm rõ ở trên nếu điều đó giúp ích.
Wickethewok

2
Cảm ơn bạn rất nhiều! Tôi không biết đây là một phần của hiệu ứng của jQuery. Tôi sẽ cho +2 nếu tôi có thể!
Wickethewok

4
Liên kết nguồn của hai tập lệnh ui hiện là: jquery-ui.googlecode.com/svn/tags/latest/ui/… và " jquery-ui.googlecode.com/svn/tags/latest/ui/…
Muleskinner

34

Đừng quên phần đệm và lề ...

jQuery.fn.slideLeftHide = function(speed, callback) { 
  this.animate({ 
    width: "hide", 
    paddingLeft: "hide", 
    paddingRight: "hide", 
    marginLeft: "hide", 
    marginRight: "hide" 
  }, speed, callback);
}

jQuery.fn.slideLeftShow = function(speed, callback) { 
  this.animate({ 
    width: "show", 
    paddingLeft: "show", 
    paddingRight: "show", 
    marginLeft: "show", 
    marginRight: "show" 
  }, speed, callback);
}

Với các đối số tốc độ / gọi lại được thêm vào, nó là một sự thay thế hoàn toàn cho slideUp()slideDown().


Làm thế nào có thể làm cho chúng để làm cùng một hiệu ứng với trượt bên phải?
Jayant Varshney

@JayantVarshney: đảm bảo rằng khối được căn phải, có thể với một số khối bên trong. Mã này chỉ thu nhỏ chiều rộng. Nếu CSS của bạn có thể xử lý điều đó, bạn sẽ có một trang trình bày phù hợp
vdboor

Cảm ơn ... Nhưng tôi muốn cả hai tác dụng trên cùng một div .. như mở tỉ số từ phải sang trái và sau đó đóng cửa từ trái sang phải hoặc ngược lại ...
Jayant Varshney

Vậy thì, làm thế nào về việc chuyển đổi các lớp khi gọi lại hoàn thành? :-)
vdboor

Cảm ơn, tôi sử dụng CSS3 hình ảnh động để đạt được chức năng này
Jayant Varshney

9

Bạn có thể thêm chức năng mới vào thư viện jQuery của mình bằng cách thêm các dòng này vào tệp script của riêng bạn và bạn có thể dễ dàng sử dụng fadeSlideRight()fadeSlideLeft().

Lưu ý: bạn có thể thay đổi chiều rộng của hoạt ảnh như bạn muốn, ví dụ 750px.

$.fn.fadeSlideRight = function(speed,fn) {
    return $(this).animate({
        'opacity' : 1,
        'width' : '750px'
    },speed || 400, function() {
        $.isFunction(fn) && fn.call(this);
    });
}

$.fn.fadeSlideLeft = function(speed,fn) {
    return $(this).animate({
        'opacity' : 0,
        'width' : '0px'
    },speed || 400,function() {
        $.isFunction(fn) && fn.call(this);
    });
}

1
Đây chính xác là những gì tôi cần mà không bao gồm giao diện người dùng jQuery. Chỉ cần thêm độ mờ và chiều rộng làm thông số. ... = function(opacity, speed, width, fn) {...}
Dylan Valade

1
Đây là giải pháp tốt nhất cho đến nay. Không cần thêm nhiều thư viện. Cảm ơn bạn.
hosseio

5

Và nếu bạn muốn thay đổi tốc độ và bao gồm các cuộc gọi lại, chỉ cần thêm chúng như sau:

        jQuery.fn.extend({
            slideRightShow: function(speed,callback) {
                return this.each(function() {
                    $(this).show('slide', {direction: 'right'}, speed, callback);
                });
            },
            slideLeftHide: function(speed,callback) {
                return this.each(function() {
                    $(this).hide('slide', {direction: 'left'}, speed, callback);
                });
            },
            slideRightHide: function(speed,callback) {
                return this.each(function() {  
                    $(this).hide('slide', {direction: 'right'}, speed, callback);
                });
            },
            slideLeftShow: function(speed,callback) {
                return this.each(function() {
                    $(this).show('slide', {direction: 'left'}, speed, callback);
                });
            }
        });
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.