mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Mi 24.04.2024 15:45 Benutzername: Passwort: Auto-Login

Thema: [JavaScript] - Vertikal Sliden vom 19.02.2010


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> [JavaScript] - Vertikal Sliden
Autor Nachricht
Kash
Threadersteller

Dabei seit: 07.11.2002
Ort: Schopfheim
Alter: 41
Geschlecht: Männlich
Verfasst Fr 19.02.2010 13:45
Titel

[JavaScript] - Vertikal Sliden

Antworten mit Zitat Zum Seitenanfang

Hallo zusammen,

habe mir ein kleines Script geschrieben welches ein Element in einem Elternelement von unten nach oben schiebt.
Dies geschieht eine bestimmte anzahl an Schleifendurchläufen.

Jetzt ist es so das sobald das Kindelement außerhalb des Viewports des Elternelements geschoben hat und wieder nach unten geschoben wird der Start ein wenig verzögert wieder anläuft.

JS

Code:
$(document).ready(function(){
var i = 0;
   var hoehe = $("#move").height();
   while (i < 10){
      $('#move').animate({
         marginTop: "-" + hoehe + "px",
      }, 20000 );
      $('#move').animate({
         marginLeft: "236px",
      }, 1 );
      $('#move').animate({
         marginTop: hoehe + "px",
      }, 1 );
      $('#move').animate({
         marginLeft: "0px",
      }, 1 );
      i = i + 1;
   }
});



HTML

Code:
<div class="con-slider-sidebar">
   <div id="move">
      lorem ipsum<br />
      lorem ipsum<br />
      lorem ipsum<br />
      lorem ipsum<br />
      lorem ipsum<br />
      lorem ipsum<br />
      lorem ipsum<br />
      lorem ipsum<br />
      lorem ipsum<br />
      lorem ipsum<br />
      lorem ipsum<br />
      lorem ipsum<br />
      ende
   </div>
</div>



CSS

Code:
.con-slider-sidebar {
      position:relative;
      width:236px;
      height:166px;
      border:1px dashed #ccc;
      overflow:hidden;
   }
   .con-slider-sidebar #move {
      display:block;
      
   }



Hat mir jemand einen Tipp wie ich es schaffe das sobald #move rausgeschoben wird es natlos unten wieder nach oben geht? Ohne das es die Pause gibt?

Sollte ich evtl 2 Kindelemente anlegen und diese nacheinander animieren?

Vielen Dank.


// So funktioniert es. Hatte einen dummen fehler drin

Code:
$(document).ready(function(){
var i = 0;
   var elem = $('#move');
   var hoehe = $("#move").height();
   
   hoehe = hoehe + 10;
   
   while (i < 500){
      $('#move').animate({
         marginTop: "-" + hoehe + "px",
      }, 20000 );
      $('#move').animate({
         marginLeft: "236px",
      }, 1 );
      $('#move').animate({
         marginTop: "140px",
      }, 1 );
      $('#move').animate({
         marginLeft: "0px",
      }, 1 );
      i = i + 1;
   }
});


Ich kann natürlich nicht die Größe des <div> wieder als Marginwert angeben.


Zuletzt bearbeitet von Kash am Fr 19.02.2010 14:20, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
sahnemuh

Dabei seit: 19.06.2003
Ort: /dev/null
Alter: 42
Geschlecht: Männlich
Verfasst Fr 19.02.2010 15:45
Titel

Re: [JavaScript] - Vertikal Sliden

Antworten mit Zitat Zum Seitenanfang

mich wundert, dass du keine timingprobleme mit deinen animationen bekommst.
du chainst die sachen nicht und verwendest keine callbackfunktionen - du feuerst also quasi 10 animationen mehr oder weniger gleichzeitig ab.
der sinn von animate in einer milisekunde erschließt sich mir auch nicht ganz - theoretisch könntest du das ganze doch auch einfach per css() setzen.

wenn ich das ganze also richtig verstehe, meinst du sowas:

Code:

// variablen initialisieren
var hoehe = 0;
var moveContainer;
$(document).ready(function(){
       // variablen schon mal cachen - jeder aufruf von $('irgendwas') ruft die Funktion auf, die dieses element sucht, was sehr viel performance frisst.
        moveContainer = $('#move');
        // s.o. - die höhe des containers ändert sich ja nicht also reicht es sie ein mal auszulesen.
        hoehe = moveContainer.height();
        // nun die funktion aufrufen, die den kram bewegt. ich habe ihr einen parameter spendiert wie oft sie sich selbst noch aufrufen soll.
        moveUp(10);
});
function moveUp(amount) {
        // die eigentliche animation starten
        moveContainer.animate({
                marginTop: "-" + hoehe + "px",
        },20000,function() { // diese funktion wird ausgeführt, sobald die animation durchgelaufen ist.
                amount--; // amount um einen zähler verringern
                if(amount>=1) {
                        // das zu bewegende element wieder "nullen"
                        moveContainer.css("marginTop",0);
                        // und wieder von vorn... dieses mal mit einem zähler weniger.
                        moveUp(amount);
                }
        });
}




// mit kommentaren versehen


Zuletzt bearbeitet von sahnemuh am Fr 19.02.2010 15:56, insgesamt 3-mal bearbeitet
  View user's profile Private Nachricht senden
Anzeige
Anzeige
Kash
Threadersteller

Dabei seit: 07.11.2002
Ort: Schopfheim
Alter: 41
Geschlecht: Männlich
Verfasst Fr 19.02.2010 16:02
Titel

Antworten mit Zitat Zum Seitenanfang

Danke für Deinen Tipp. Ja so sauber läuft das noch nicht.
Und an einer Fallbacklösung sitze ich gerade.

Ich werde mich bei Gelegheit Deiner Lösung mal annehmen.
Das wird bis in 2 Wochen sowieso nicht publiziert.

Nur um den Kunden zu zeigen wie es in etwa läuft.
  View user's profile Private Nachricht senden
sahnemuh

Dabei seit: 19.06.2003
Ort: /dev/null
Alter: 42
Geschlecht: Männlich
Verfasst Fr 19.02.2010 16:17
Titel

Antworten mit Zitat Zum Seitenanfang

achso. was dein problem löst ist übrigens das "animate" vom standardverhalten des easings ("swing"), welches am anfang und ende der animation etwas langsamer läuft auf "linear" umzustellen.

ich hab' das ganze mal hier zusammengebastelt:
http://jsfiddle.net/VkYLu/1/
  View user's profile Private Nachricht senden
Kash
Threadersteller

Dabei seit: 07.11.2002
Ort: Schopfheim
Alter: 41
Geschlecht: Männlich
Verfasst Fr 19.02.2010 16:20
Titel

Antworten mit Zitat Zum Seitenanfang

sahnemuh hat geschrieben:
achso. was dein problem löst ist übrigens das "animate" vom standardverhalten des easings ("swing"), welches am anfang und ende der animation etwas langsamer läuft auf "linear" umzustellen.

ich hab' das ganze mal hier zusammengebastelt:
http://jsfiddle.net/VkYLu/1/


Super, 'liniear' scheint einiges in diesem Fall zu bewirken.
Danke für dieses Bsp.
  View user's profile Private Nachricht senden
 
Ähnliche Themen iframe per javascript vertikal scrollen
Javascript Code von vertikal auf horizontal
[Javascript] iframe horizontal UND vertikal scrollen
automatisch mit javascript horizontal und vertikal scrollen
DIV auf/zu sliden
Wie begrenze ich mein Panorama beim Sliden?
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.