2017-04-18 4 views
0

Hallo Ich habe etwas CSS und JS-Code, um eine Folie im Effekt zu erstellen, wenn ein Benutzer die Seite herunterscrollt und das Element in Sicht kommt. Ich habe mich nur gefragt, ob jemand helfen könnte zu erklären, wie ich ein Mixin erstellen würde, damit sich der Wert ändern kann.sass/scss create mixin für Animationen

Mein HTML-Element wie dies

<div class="animation-element slide-left"></div> 

Mein aktueller CSS ist dieser

.animation-element { 
    opacity: 0; 
    position: relative; 
} 

.animation-element.slide-left { 
    opacity: 0; 
    -moz-transition: all 500ms linear; 
    -webkit-transition: all 500ms linear; 
    -o-transition: all 500ms linear; 
    transition: all 500ms linear; 
    -moz-transform: translate3d(-100px, 0px, 0px); 
    -webkit-transform: translate3d(-100px, 0px, 0px); 
    -o-transform: translate(-100px, 0px); 
    -ms-transform: translate(-100px, 0px); 
    transform: translate3d(-100px, 0px, 0px); 
} 

.animation-element.slide-left.in-view { 
    opacity: 1; 
    -moz-transform: translate3d(0px, 0px, 0px); 
    -webkit-transform: translate3d(0px, 0px, 0px); 
    -o-transform: translate(0px, 0px); 
    -ms-transform: translate(0px, 0px); 
    transform: translate3d(0px, 0px, 0px); 
} 

Mein JS ist

var $animation_elements = $('.animation-element'); 
var $window = $(window); 

function check_if_in_view() { 
    var window_height = $window.height(); 
    var window_top_position = $window.scrollTop(); 
    var window_bottom_position = (window_top_position + window_height); 

    $.each($animation_elements, function() { 
    var $element = $(this); 
    var element_height = $element.outerHeight(); 
    var element_top_position = $element.offset().top; 
    var element_bottom_position = (element_top_position + element_height); 

    //check to see if this current container is within viewport 
    if ((element_bottom_position >= window_top_position) && 
     (element_top_position <= window_bottom_position)) { 
     $element.addClass('in-view'); 
    } else { 
     $element.removeClass('in-view'); 
    } 
    }); 
} 

$window.on('scroll resize', check_if_in_view); 
$window.trigger('scroll'); 

Ich möchte in der Lage sein, eine Variable übergibt

wäre $ distance, die dynamisch sein würde, um die 100/Entfernung zu ändern, von der das Element abgleitet.

Vielen Dank im Voraus.

+0

Möchten Sie die '$ distance' var von JS an eine SASS-Mischung übergeben? –

+0

Kann es nicht in Sass getan werden? Alles funktioniert wie es ist, aber wenn ich den Abstand ändern wollte, d. H. -100px zu -200px für ein anderes Element, müsste ich das ganze css wieder ausschreiben und ihm eine neue Klasse geben. Ich wusste nicht, ob es möglich war, die Entfernungsvariable einfach durch den Sass zu geben. Auf diese Weise könnte ich einen Codeblock haben und einfach die Entfernung für jedes Element ändern? – craigb88

+0

Entschuldigung für die späte Antwort. Ja, Sie können eine Variable an ein Mix-In übergeben, aber soweit ich weiß, können Sie keine Variable von JS an SASS übergeben. –

Antwort

0

bearbeiten

ich den Hinweis auf die Verwendung Compass entfernt haben, wie es wird nicht mehr unterstützt. Wenn Sie an einem automatischen Präfix für SASS interessiert sind, schauen Sie sich PostCss an, da Sie ein autoprefixer Plugin benötigen.


Sie können Variablen an Mixins in SASS übergeben. Wie ich jedoch in meinem Kommentar erwähnt habe, ist mir keine Möglichkeit bekannt, eine Variable über JS an SASS zu übergeben.

@mixin my-animation($distance) { 
    opacity: 0; 
    transition: all 500ms linear; 
    transform: translate3d($distance, 0, 0); 
} 

div { 
    @include my-animation(-100px); 
} 

Ich empfehle Compass verwenden. Wenn Sie Compass, @import 'compass';, importieren und @include transform(..); verwenden, wird die Transformeigenschaft für Sie automatisch mit einem Präfix versehen, damit Sie nicht ein paar Zeilen Code schreiben müssen.

Wenn Sie JS verwenden, um den distance Wert zu ändern, könnten Sie JS verwenden einen Inline-Stil mit der transform-Eigenschaft Sie wollen mit Ihrem benutzerdefinierten distance Wert hinzuzufügen.

+0

Noch nicht ausprobiert, aber wenn ich nach Hause komme. Es sieht so aus, wie ich es mir erhofft habe. Keine Notwendigkeit, es zu tun Ich bin JS Ich werde nur die Distanz in Sass auf der div wie Sie haben. Danke, sobald ich es versucht habe, werde ich den Kommentar genehmigen. – craigb88

+0

Vergessen zu antworten, aber das hat perfekt funktioniert. Ich habe Autoprefixer anstelle von Kompass verwendet, aber ein Leckerbissen. Vielen Dank – craigb88