jQuery glisse vers la gauche et montre

111

J'ai étendu les jQueryeffets appelés slideRightShow()et slideLeftHide()avec des fonctions de couple qui fonctionnent comme slideUp()et slideDown()comme on le voit ci - dessous. Cependant, je voudrais également mettre en œuvre slideLeftShow()et slideRightHide().

Je sais qu'il existe d'importantes bibliothèques qui offrent ce type de chose (j'aimerais éviter d'ajouter un autre grand ensemble de javascriptfichiers), mais quelqu'un peut-il fournir un exemple simple de la façon de mettre en œuvre l'un slideLeftShow()ou l' autre slideRightHide()?

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

La slideRightShowfonction ci-dessus commence à afficher l'image du côté gauche et progresse vers le côté droit. Je cherche un moyen de faire la même chose mais de commencer par le côté droit et de progresser vers la gauche . Merci!

ÉDITER

L'interface jQuery a quelque chose comme j'en ai besoin (j'ai essentiellement besoin de leurs fonctions "slide in right" et "slide out left"), mais je n'ai pas pu faire fonctionner cela avec jQuery 1.3: http://interface.eyecon.ro/demos /ifx.html . De plus, leur démo semble cassée et elle ne fera qu'une seule diapositive avant de lancer un million d'erreurs.

Wickethewok
la source
J'ai mis à jour mon message J'espère que cela aide
bendewey

Réponses:

185

Cette fonctionnalité est incluse dans jquery ui http://docs.jquery.com/UI/Effects/Slide si vous souhaitez l'étendre avec vos propres noms, vous pouvez l'utiliser.

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

vous aurez besoin des références suivantes

<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>
Bendewey
la source
Salut! Je cherche l'inverse de ce que vous avez mis en œuvre là-bas. En gros, lorsque j'utilise ce que j'ai ci-dessus pour montrer un élément, la partie gauche apparaît en premier et progresse vers la droite. J'essaie de le faire démarrer du côté droit et de progresser vers la gauche.
Wickethewok le
1
cela fonctionne si vous faites flotter l'élément à droite. Autrement. vous souhaiterez peut-être annimer la propriété de gauche et déplacer l'élément lorsque vous le rétrécissez.
bendewey
1
Changer l'élément pour qu'il flotte "à droite" n'a pas inversé la diapositive pour moi. J'ai précisé ci-dessus si cela aide.
Wickethewok le
2
Merci beaucoup! Je ne savais pas que cela faisait partie des effets de jQuery. Je donnerais +2 si je le pouvais!
Wickethewok
4
Le lien de la source des deux scripts d' interface utilisateur est maintenant: jquery-ui.googlecode.com/svn/tags/latest/ui/… et " jquery-ui.googlecode.com/svn/tags/latest/ui/…
Muleskinner
34

N'oubliez pas le rembourrage et les marges ...

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

Avec les arguments speed / callback ajoutés, c'est un remplacement complet pour slideUp()et slideDown().

vdboor
la source
Comment leur faire faire le même effet avec un glissement à droite?
Jayant Varshney
@JayantVarshney: assurez-vous que le bloc est aligné à droite, éventuellement avec un bloc interne. Ce code ne fait que réduire la largeur. Si votre CSS peut gérer cela, vous aurez une diapositive de droite
vdboor
Merci ... Mais je veux les deux effets sur la même div .. comme l'ouverture de droite à gauche puis la fermeture de gauche à droite ou vice versa ...
Jayant Varshney
Eh bien, que diriez-vous de changer de classe lors du rappel d'achèvement? :-)
vdboor
Merci, j'ai utilisé des animations CSS3 pour réaliser cette fonctionnalité
Jayant Varshney
9

Vous pouvez ajouter une nouvelle fonction à votre bibliothèque jQuery en ajoutant ces lignes sur votre propre fichier de script et vous pouvez facilement utiliser fadeSlideRight()et fadeSlideLeft().

Remarque: vous pouvez modifier la largeur de l'animation comme vous le souhaitez une instance de 750 pixels.

$.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);
    });
}
thebhatta
la source
1
C'est exactement ce dont j'avais besoin sans inclure l'interface utilisateur jQuery. Je viens d'ajouter l'opacité et la largeur en tant que paramètres. ... = function(opacity, speed, width, fn) {...}
Dylan Valade
1
C'est de loin la meilleure solution. Pas besoin d'ajouter plus de bibliothèques. Je vous remercie.
hosseio
5

Et si vous souhaitez faire varier la vitesse et inclure des rappels, ajoutez-les simplement comme ceci:

        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);
                });
            }
        });
Steve Grove
la source