Sağdan sola kaydırılsın mı?


390

Nasıl daraltılmış durumdan genişletilmiş (ve tam tersi) bir div gitmek olabilir, ama bunu sağdan sola nasıl yapabilirim?

Orada gördüğüm çoğu şey her zaman soldan sağa.




Yanıtlar:


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

Referans: https://api.jquery.com/animate/


Ayrıca paddingLeft: 'toggle', paddingRight: 'toggle'öğenin dahili dolgusu olduğunda da ekleyebilirsiniz .
piotr_cz

17
İyi çalışıyor, sadece denediğimde soldan sağa doğru kayar. Bunun tersini canlandırmak mümkün mü?
twan

2
Tek sorun, içinde içerik varsa, yatay olarak "ezmesi" ve kontrollerin hareket etmesine / yeniden boyutlandırılmasına / sarılmasına vb. Neden olmasıdır. Bunun için iyi bir çözüm var mı?
Neil Barnwell

1
Kodunuzun CSSgerçek bir slayta benzemesi için daha fazlasına ihtiyacı var
AmerllicA

1
@NeilBarnwell mümkünse, içeriği sabit genişlikte bir sargıya koyun ve kabın sahibi olun overflow: hidden.
Ben Philipp

239

Bu, jQueryUI gizle / göster yöntemleri kullanılarak yerel olarak elde edilebilir. Örneğin.

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

Referans: http://docs.jquery.com/UI/Effects/Slide


141
@ekerner - Bu, büyük bir kütüphane olan JQueryUI'yi gerektirir. İstediğiniz tek şey basit bir slayt geçişi ise, bu muhtemelen cevap değildir;)
Jesse

9
JQueryUI yüklüyse bu en iyi yoldur.
steampowered

5
Açıklığa kavuşturmak için - min dosyası en az 235kb !! Bu iyi ama @Jesse'nin işaret ettiği gibi sayfanıza önemli ölçüde katkıda bulunacak
Ukuser32

1
Özel oluşturucuyu kullanarak ve slayt animasyonu hariç her şeyi kaldırarak, küçültülmüş JS'yi 20KB'nin altına almak mümkündür.
Skylar Ittner

Keşke JQuery UI belgelerinde bunun gibi örnekler olurdu. Teşekkürler
andreszs

76

Bunu kullan:

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

Canlı demo

Gelişmiş versiyon

Çift tıklamada çift kenar boşluğunu önlemek için demoya bazı kodlar eklendi: http://jsfiddle.net/XNnHC/942/

Hareket hızı ile kullanın;)

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

  • Ekstra JavaScript kodları kaldırıldı.

  • Sınıf adları ve bazı CSS kodları değişti

  • Genişletilmiş veya daraltılmış olup olmadığını bulmak için özellik eklendi

  • Hareket hızı efekti kullanıp kullanmadığı değişti

  • Değişen animasyon hızı

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


2
'Px' içindeki değerleri hesaplar, bu yüzden '%' için uygun değildir
Faisal Ashfaq

her tıklamada sola hareket ediyor.
Elyor

Dış genişliği kontrol edebilir ve doğru kenar boşluğunu eklemek için kullanabilirsiniz
Tofandel

22

JQuery UI kullanan Fiddle'daki bu çalışma örneğine bir göz atın . Başlangıçta soldan sağa kullandığım bir çözüm, ancak sağdan sola çalışacak şekilde değiştirdim.

Kullanıcının mevcut paneller arasındaki animasyonu bozmadan bağlantıları hızlı bir şekilde tıklamasını sağlar.

JavaScript kodu basittir:

$(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;
    });
});

Fiddle bağlantısından HTML ve CSS edinin.

Daha iyi efekt sunumu için beyaz arka plan ve sol dolgu eklendi.


8
jQuery UI gerektirir
Jeroen K



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

11
Ben tüm yorumlar için değilim ama bu kod oldukça açıklayıcı.
Jon

7

Bu şekilde yaptım:

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

Unutmayın, "btn" düğümü animasyondan önce gizlenmelidir ve buna "position: absolute" ayarını da yapmanız gerekebilir.


Neden kullanmıyorsunuz width: 'toggle'? btn.show().animate({width: 'toggle'}, {duration: 500});İhtiyacın olan tek şey olduğuna inanıyorum.
Aart den Braber

6

Bahsetmeye değer başka bir kütüphane animate.css . JQuery ile harika çalışıyor ve sadece CSS sınıflarını değiştirerek birçok ilginç animasyon yapabilirsiniz.

Sevmek..

$ ("# slide"). toggle (). toggleClass ('animated bounceInLeft');


5

GreenSock Animasyon Platformu (GSAP) ileTweenLite/ 'TweenMax jQuery veya CSS3 geçişleri çok daha büyük özelleştirme ile daha pürüzsüz geçişler sağlar. TweenLite / TweenMax ile CSS özelliklerini canlandırmak için "CSSPlugin" adlı eklentisine de ihtiyacınız olacak. TweenMax bunu otomatik olarak içerir.

İlk olarak, TweenMax kütüphanesini yükleyin:

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

Veya hafif sürüm olan 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>

Ardından, animasyonunuzu arayın:

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

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

Bir kimlik seçiciyle de arayabilirsiniz:

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

JQuery yüklüyse, belirli bir sınıfı içeren tüm öğeler gibi daha gelişmiş geniş seçiciler kullanabilirsiniz:

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

Tüm ayrıntılar için bakınız: TweenLite Belgeleri

Web sitelerine göre: "TweenLite, GreenSock Animasyon Platformunun (GSAP) temeli olarak hizmet eden son derece hızlı, hafif ve esnek bir animasyon aracıdır."


4

Önce öğenin genişliğini 0, sağa kayan ve sonra göstermek üzere olduğunuz olayda tanımlayabilirsiniz.

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

Bu kadar basit.


4

JQuery UI'sı olmadan , yalnızca jQuery ile sağdan sola animasyon örneği (herhangi bir sürüm, bkz. 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

ya da kullanabilirsiniz

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

4
On yaşındaki bir soruyu diğer on dört mevcut cevapla cevaplarken, cevabınızın hangi yeni yaklaşımı getirdiğini ve sorunun sorulduğunda geçerli olup olmadığını veya bu on yıl boyunca mevcut olan teknikleri kullanıp kullanmadığını açıklamaya yardımcı olacaktır. .
Jason Aller

1

Kaydı kullanarak yaptığım bir örnek (sadece HTML, CSS ve JS, sadece jquery kütüphanesi ile). Aşağı kaydırıldığında bir düğme sola kayar.

Ayrıca, istediğiniz tek şey bu efektse, jQuery UI kullanmayın, çünkü çok ağırdır (sadece bunun için kullanmak istiyorsanız).

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

Kontrol Bu örneği


1
Evet, CSS geçişleri bugünlerde bunu başarmanın en iyi yollarından biri.
Tom Tom

1

Eğer divkesinlikle konumlandırılmışsa ve genişliği biliyorsanız, şunları kullanabilirsiniz:

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

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

Hangi ekran dışına kaydırır.

Alternatif olarak, bir kabı sarabilirsiniz 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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.