2009-02-06 6 views
107

Ich erweiterte die jQuery Effekte namens slideRightShow() und slideLeftHide() mit ein paar Funktionen, die ähnlich wie slideUp() und slideDown() arbeiten, wie unten zu sehen. Ich möchte aber auch gerne slideLeftShow() und slideRightHide() implementieren.jQuery Folie links und zeigen

ich weiß, gibt es erhebliche Bibliotheken, die diese Art der Sache bieten (ich möchte das Hinzufügen eines weiteren großen Satzes von javascript Dateien vermeiden), kann aber ein einfaches Beispiel für jedermann zur Verfügung stellen, wie entweder slideLeftShow() oder slideRightHide() zu implementieren?

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

Die obige slideRightShow Funktion beginnt das Bild von der linken Seite zeigt, und Fortschreiten in Richtung der rechten Seite. Ich bin auf der Suche nach einer Möglichkeit, das gleiche zu tun, aber von der rechten Seite und dem Fortschritt auf der linken Seite. Vielen Dank!

EDIT

jQuery-Schnittstelle hat so etwas wie ich brauche (ich ihre „slide in Recht“ im Grunde braucht, und „schieben Sie links“ Funktionen), aber ich konnte dies mit jQuery 1.3 arbeitet nicht bekommen: http://interface.eyecon.ro/demos/ifx.html. Auch scheint ihre Demo so gut zu sein, dass sie nur eine Folie macht, bevor sie eine Million Fehler verursacht.

+0

ich meinen Beitrag aktualisiert Ich hoffe, das hilft – bendewey

+0

Related: http://stackoverflow.com/questions/596608/slide-right-to-left –

Antwort

184

Diese Funktion ist als Teil von jquery ui http://docs.jquery.com/UI/Effects/Slide enthalten, wenn Sie es mit Ihren eigenen Namen erweitern möchten, können Sie dies verwenden.

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

Sie müssen die folgenden Referenzen

<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> 
+0

Hallo! Ich suche das Gegenteil von dem, was Sie dort implementiert haben. Grundsätzlich, wenn ich das, was ich oben verwende, verwende, um ein Element zu zeigen, erscheint der linke Teil zuerst und schreitet nach rechts fort. Ich versuche, dass es von der rechten Seite beginnt und nach links geht. – Wickethewok

+1

es funktioniert, wenn Sie das Element richtig schweben. Andernfalls. Möglicherweise möchten Sie die linke Eigenschaft anima- tivieren und das Element beim Verkleinern verschieben. – bendewey

+1

Das Ändern des Elements in "float" hat die Folie für mich nicht umgekehrt. Ich habe oben geklärt, ob das hilft. – Wickethewok

32

Sie die Polsterung und Margen nicht vergessen ...

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

mit der Geschwindigkeit/Rückruf Argumenten hinzugefügt, es ist ein kompletter Tropfen als Ersatz für slideUp() und slideDown().

+0

Wie kann man sie dazu bringen, mit dem richtigen Gleiten den gleichen Effekt zu erzielen? –

+0

@JayantVarshney: Stellen Sie sicher, dass der Block rechts ausgerichtet ist, möglicherweise mit einem inneren Block. Dieser Code verkleinert nur die Breite. Wenn Ihr CSS damit umgehen kann, haben Sie eine richtige Folie – vdboor

+0

Danke ... Aber ich möchte beide Effekte auf gleicher div .. wie Öffnen von rechts nach links und dann von links nach rechts oder umgekehrt schließen ... –

9

Sie können Ihrer jQuery-Bibliothek neue Funktionen hinzufügen, indem Sie diese Zeile in Ihre eigene Skriptdatei einfügen, und Sie können einfach fadeSlideRight() und fadeSlideLeft() verwenden.

Hinweis: Sie können die Breite der Animation ändern, wie Sie möchten, Instanz von 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

Dies ist genau das, was ich ohne jQuery UI benötigt. Ich habe die Opazität und Breite als Parameter hinzugefügt. '... = Funktion (Opazität, Geschwindigkeit, Breite, Fn) {...}' –

+1

Dies ist bei weitem die beste Lösung. Keine Notwendigkeit mehr Bibliotheken hinzuzufügen. Vielen Dank. – y2josei

5

Und wenn Sie die Geschwindigkeit variieren wollen und schließen Rückrufe einfach fügen Sie sie wie folgt aus:

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

Sehr schön, danke – andreszs