Verständnis js-code in classie.js
hey Leute ein, die ich heruntergeladen einige einfache Effekt in JS codiert . das plugin heisst classie.js und der Kerl geschrieben hat, einige benutzerdefinierte code für die Interaktion mit diesem plugin classie.js
eine ähnliche Frage wurde gebeten, vor einer Weile classie.js Frage und der Kerl wirklich perfekt beantwortet, wie der code innerhalb classie.js ist funktionieren . das ist großartig , so dass ich nun verstehe, wie der code innerhalb classie.js funktioniert , nun mein problem ist , es gibt eine Menge code geschrieben, der tatsächlich interagiert mit diesem plugin aufgerufen classie.js und ich habe einige Schwierigkeiten Verständnis . so lassen Sie mich erklären, was elaboratly ist mein problem :
Den classie.js code :
( function( window ) {
'use strict';
var hasClass, addClass, removeClass;
if ( 'classList' in document.documentElement ) {
//console.log(document.documentElement);
hasClass = function( elem, c ) {
//cons100%ole.log("elem is : " + elem + " c is " + c);
return elem.classList.contains( c );
};
addClass = function( elem, c ) {
console.log('elem Logged');
console.log(elem);
elem.classList.add( c );
};
removeClass = function( elem, c ) {
console.log('removeClass function got used in if statement')
elem.classList.remove
( c );
};
}
else {
//I have deleted this part as its only a fallback for older browsers. :)
}
function toggleClass( elem, c ) {
var fn = hasClass( elem, c ) ? removeClass : addClass;
fn( elem, c );
}
var classie = {
//full names
hasClass: hasClass,
addClass: addClass,
removeClass: removeClass,
toggleClass: toggleClass,
//short names
has: hasClass,
add: addClass,
remove: removeClass,
toggle: toggleClass
};
//transport
if ( typeof define === 'function' && define.amd ) {
//AMD
define( classie );
} else if ( typeof exports === 'object' ) {
//CommonJS
module.exports = classie;
} else {
//browser global
window.classie = classie;
}
})( window );
Den code, der Interagiert mit classie.js :
(function() {
//disable/enable scroll (mousewheel and keys) from https://stackoverflow.com/a/4770179
//left: 37, up: 38, right: 39, down: 40,
//spacebar: 32, pageup: 33, pagedown: 34, end: 35, home: 36
var keys = [32, 37, 38, 39, 40], wheelIter = 0;
function preventDefault(e) {
e = e || window.event;
if (e.preventDefault)
e.preventDefault();
e.returnValue = false;
}
function keydown(e) {
for (var i = keys.length; i--;) {
if (e.keyCode === keys[i]) {
preventDefault(e);
return;
}
}
}
function touchmove(e) {
preventDefault(e);
}
function wheel(e) {
//for IE
//if( ie ) {
//preventDefault(e);
//}
}
function disable_scroll() {
window.onmousewheel = document.onmousewheel = wheel;
document.onkeydown = keydown;
document.body.ontouchmove = touchmove;
}
function enable_scroll() {
window.onmousewheel = document.onmousewheel = document.onkeydown = document.body.ontouchmove = null;
}
var docElem = window.document.documentElement,
scrollVal,
isRevealed,
noscroll,
isAnimating,
container = document.getElementById( 'container' ),
trigger = container.querySelector( 'button.trigger' );
function scrollY() {
return window.pageYOffset || docElem.scrollTop;
}
function scrollPage() {
scrollVal = scrollY();
//console.log(scrollVal);
if( classie.has( container, 'notrans' ) ) {
classie.remove( container, 'notrans' );
return false;
}
if( isAnimating ) {
return false;
}
if( scrollVal <= 0 && isRevealed ) {
toggle(0);
}
else if( scrollVal > 0 && !isRevealed ){
toggle(1);
}
}
function toggle( reveal ) {
isAnimating = true;
if( reveal ) {
classie.add( container, 'modify' );
}
else {
noscroll = true;
disable_scroll();
classie.remove( container, 'modify' );
}
//simulating the end of the transition:
setTimeout( function() {
isRevealed = !isRevealed;
isAnimating = false;
if( reveal ) {
noscroll = false;
enable_scroll();
}
}, 600 );
}
//refreshing the page...
var pageScroll = scrollY();
noscroll = pageScroll === 0;
disable_scroll();
if( pageScroll ) {
isRevealed = true;
classie.add( container, 'notrans' );
classie.add( container, 'modify' );
}
window.addEventListener( 'scroll', scrollPage );
//trigger.addEventListener( 'click', function() { toggle( 'reveal' ); } );
})();
alot des Codes, der im zusammenspiel mit classie.js ist eigentlich abgeleitet aus einem thread direkt von stackoverflow : wie zum deaktivieren und aktivieren scrollen
nun alle oben genannten ist nur für Ihre klaren Verständnis , was meine Frage wirklich , ich verstehe nicht ganz die Verwendung der add-Methode in den code für die Interaktion mit dem classie.js API , der seine irgendwie gar keinen Sinn für mich und MDN doc sagt sehr wenig über diese Methode . was ist die Methode wirklich, wirklich tun ?? .
Edit :: Der verwirrende Teil :
function toggle( reveal ) {
isAnimating = true;
if( reveal ) {
classie.add( container, 'modify' );
}
else {
noscroll = true;
disable_scroll();
classie.remove( container, 'modify' );
}
//simulating the end of the transition:
setTimeout( function() {
isRevealed = !isRevealed;
isAnimating = false;
if( reveal ) {
noscroll = false;
enable_scroll();
}
}, 600 );
}
Oben ist der Teil, der mich verwirrt , bin ich richtig wenn ich vermute , dass, wenn eine beliebige Funktion aus classie.js muss verwendet werden , es muss verwendet werden, wie folgt :
classie.functionname(); ?? und können nicht direkt beurteilt ?? zB. functionname();
Meine Zweite Große Problem (Verständnis JS-syntax classie.js) :
auch als eine Ergänzende Frage haben , können Sie wählen , nicht zu Antworten, aber bestimmte Teile des Codes, die in Wechselwirkung mit classie.js hat eine Menge von verwirrenden syntax , lassen Sie mich darauf hingewiesen haben .
in der disable_scroll Funktion gibt es diese :
window.onmousewheel = document.onmousewheel = wheel;
document.onkeydown = keydown;
und aktivieren Sie scroll-Funktion es ist :
window.onmousewheel = document.onmousewheel = document.onkeydown = null;
jetzt verstehe ich
A = B ;
wobei ur die Zuordnung A der Wert von B ;
Aber Das oben beschriebene Syntex ist mehr wie Ein = B = C ; und das ist völlig über meinen Kopf .
kann jemand das Bitte erklären
wenn jemand werden kann, erarbeiten und erklären , es wäre toll .
Danke.
Alexander.
- add-Methode? meinst du addEventListener?
- Nein, es ist Teil der kleinen Bibliothek. OP-Es ist nur das hinzufügen und entfernen von Klassen von DOM-Knoten.
- Ich sehe keine Methode mit dem Namen
add
irgendwo in den code gepostet, so dass ich nicht weiß, was die OP spricht, - GENAU !!! DAS WAR EINE MEINER FRAGEN , Bearbeiten und hinzufügen, dass , ich meine, ist das hinzufügen nativen js-Methode oder ist es Teil classie.js auch wenn es Teil der classie.js ich denke, es ist zu berufen, wie classie.hinzufügen , nicht nur. !!
- bearbeitet .
- bearbeitet .
- Die "add" - Funktion ist direkt in den code am Ende der Bibliothek. Siehe die "kurz-Namen" kommentieren? "hinzufügen" und "entfernen" sind Synonyme für "addClass" und "removeClass".
- Die OBJEKT-LITERAL innerhalb classie.js , wass ich vermute, dass Teil war zu tun, was u sagte , immerhin danke für die erneute Bestätigung , ich denke, der Kerl, codiert , hat das so für zB. wenn jemand anrufen wollte classie.addClass() , könnten Sie sagen, classie.add() oder classie.addClass() . Recht????
- Ja, genau 🙂 In einer Bibliothek, die winzig und ich bin nicht sicher, warum es wichtig ist, aber ja, Sie sind nur Verknüpfungen. Und ja, alle Anrufe werden müssen, von der form
classie.something()
. - pfffff !! vielen Dank !
- Ich haben Hinzugefügt, ein weiterer Teil namens " mein 2. großes problem , kannst du bitte versuchen Sie zu beantworten,, tut mir Leid, ein Schmerz 🙂
A = B = C
nur Mittel zum zuweisenC
sowohlA
undB
- in JavaScript eine Zuordnung (A=B
) einen Wert hat, ist, dassB
. SoA=B=C
ist wieA=(B=C)
; der Wert vonB=C
istC
es so ordnet, dassA
.- Fantastisch , Vielen Dank .
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht genug rep Kommentar noch.
Die add () - Methode ist keine 'native' js-Funktion. Wenn Sie einen Blick auf die classie.js code ist am Ende, es ist ein Objekt "classie', die definiert öffentliche Verknüpfungen zu den internen Funktion addClass :
Diese shorcuts lassen, rufen Sie die internen Funktionen (die sonst nicht zugänglich ist, die von der globalen scope) durch den Aufruf classie.publicFunctionName(args) oder Fenster.classie.publicFunctionName(args), wobei "publicFunctionName" ist die shorcut definiert, was genau das ist, was das zweite Stück code tut :
Alle addClass () - Methode tut, ist fügen Sie eine Klasse auf dem html-element heißt es weiter.
Ich glaube, das heißt "enthüllt-Modul "design pattern", aber nicht 100% sicher.
Hoffe, das hilft zumindest ein bisschen.
Wenn Sie möchten, zu lernen, ein wenig über js-design-Muster, die ich wärmstens empfehle die Lektüre von Addy Osmani ist eine sehr gute (und Kostenlose) Buch hier : http://addyosmani.com/resources/essentialjsdesignpatterns/book/
A = value; B = value; C = value;