2016-09-04 1 views
0

Ich habe jquery für etwa eine Stunde gekämpft, und ich hoffe, jemand kann mir hier helfen. Das folgende Beispiel unten zeigt fließende Animationen. Wenn Sie auf eines der divs klicken, wird das ausgewählte div nach links oder rechts verschoben, wenn das Ansichtsfenster größer als 700px ist, oder nach oben und unten, wenn es kleiner als 700px ist.jquery's animiert verursacht divs 'zu springen', wenn der Text darin ist

Das Problem ist, wenn Sie auf den Block "CODE" klicken. Manchmal, und es fühlt sich so an, als würde dies zufällig passieren, wird der Codeblock von 50% des Fensters auf 80% und dann glatt auf 100% übergehen. Wenn ich die h1 elements in der HTML-Datei entferne, ist der Übergang reibungslos.

Ich habe dies lokal mit Firefox, Safari, Chrom getestet, und es scheint alles zufällig zu sein.

Ich habe dies auf jsfiddle mit Firefox, Safari und Chrom getestet und es scheint, dass dieses Problem verschwindet.

Kann jemand feststellen, was das verursacht? Warum sollte ich diesen Fehler lokal sehen, aber nicht, wenn es auf jsfiddle ist?

Bitte beachten! Der Javascript-Codeblock, der bewirkt, dass die divs animiert werden, ist die Funktion _modifyDiv. Bitte entferne und füge den h1 elements im Div-Block hinzu, um zu sehen, ob es einen Unterschied auf deiner Seite gibt. Ich habe keine Ahnung, warum meine div Blöcke springen, wenn ich diese Dateien Host lokal vs durch js Geige ...

/*jshint esversion: 6 */ 
 

 
var Welcome = (function() { 
 
    var isSideBarActive = false; 
 

 
    //So I don't have to write document.getElementById everytime. 
 
    var id = function(element) { 
 
    return document.getElementById(element); 
 
    }; 
 

 
    //add multiple types of events to an element 
 
    var addMultipleEvents = function(eventsArray, element, fn){ 
 
    eventsArray.forEach(function(e){ 
 
     id(element).addEventListener(e, fn, false); 
 
    }); 
 
    } 
 
    //which mode should we navigate to? This function creates a sidebar from the element 
 
    var selectDiv = function(element){ 
 
    var selectedDiv; 
 
    var notSelectedDiv; 
 
    switch(element){ 
 
     case 'photography': 
 
     selectedDiv = 'photography'; 
 
     notSelectedDiv = 'code'; 
 
     break; 
 
     case 'code': 
 
     selectedDiv = 'code'; 
 
     notSelectedDiv = 'photography'; 
 
     break; 
 
    } 
 

 
    return _modifyDiv(selectedDiv, notSelectedDiv); 
 
    }; 
 

 
    var _modifyDiv = function (expand, contract){ 
 
    var $expand = $('#' + expand); 
 
    var $contract = $('#' + contract); 
 
    // id('aligner').style.justifyContent = 'space-between'; 
 

 
    if (!window.matchMedia('(max-width: 700px)').matches) {//is screen larger than 700px wide? 
 
     $expand.animate({ 
 
     width: '100vw', 
 
     },900); 
 
     $contract.animate({ 
 
     width: '0vw', 
 
     display: 'none' 
 
     },900).delay(100).find('h1').css('display', 'none'); 
 
    } else { //screen is less than 700px wide 
 
     $expand.animate({ 
 
     height: '100vh', 
 
     },900); 
 
     $contract.animate({ 
 
     height: '0vh', 
 
     display: 'none' 
 
     },900) 
 
    } 
 
    } 
 

 
    return {//public methods 
 
    selectDiv: selectDiv, 
 
    addMultipleEvents: addMultipleEvents 
 
    // modifyDiv: modifyDiv, 
 
    }; 
 
})(); 
 

 

 
$(document).ready(function(){ 
 
    var myEvents = ['click', 'touchend']; 
 
    Welcome.addMultipleEvents(myEvents, 'code', function(){Welcome.selectDiv('code')}); 
 
    Welcome.addMultipleEvents(myEvents, 'photography', function(){Welcome.selectDiv('photography')}); 
 

 
});
@import "https://fonts.googleapis.com/css?family=Raleway:400,500"; 
 
#aligner { 
 
    list-style: none; 
 
    display: flex; 
 
    justify-content: space-between; 
 
    flex-direction: row; 
 
    width: 100%; } 
 
    #aligner .align-spacer { 
 
    width: 20px; } 
 
    #aligner .align-item { 
 
    text-transform: uppercase; 
 
    color: #fff; 
 
    background: linear-gradient(rgba(0, 163, 136, 0.45), rgba(0, 163, 136, 0.45)), url("http://placekitten.com/600/500"); 
 
    display: flex; 
 
    justify-content: center; 
 
    align-items: center; 
 
    width: 100%; 
 
    text-align: center; 
 
    height: 100vh; } 
 
    #aligner .align-item:nth-child(1) { 
 
    background: linear-gradient(rgba(255, 0, 0, 0.45), rgba(255, 0, 0, 0.45)), url("http://placekitten.com/200/300"); 
 
    width: 100; } 
 

 
@media (max-width: 700px) { 
 
    #aligner { 
 
    flex-direction: column; } 
 
    #aligner .align-spacer { 
 
     width: 20px; } 
 
    #aligner .align-item { 
 
     height: 50vh; } } 
 
h1, h2, h3, h4, h5, h6 { 
 
    font-family: 'Raleway' !important; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="aligner"> 
 
    <div id = 'code' class = "align-item"> 
 
    <h1>Code</h1> 
 
    </div> 
 
    <div id = 'photography' class = "align-item"> 
 
    <h1>Photography</h1> 
 
    </div> 
 
</div>

+0

Das Problem funktioniert am besten, wenn Sie das Code-Snippet in "Full Page" ausführen –

Antwort

0

ich die Quelle meines Problems gefunden. Wenn Ihre Entwicklertools geöffnet sind, verursacht dies einen seltsamen "Sprung" beim Animieren. Wenn die Entwicklertools nicht geöffnet sind, funktioniert alles wie erwartet.

Verwandte Themen