Heim > Web-Frontend > js-Tutorial > JavaScript-Implementierung der Beispielcode-Analyse und -Optimierung für Festzelt-Lotterieereignisse (1)_Javascript-Kenntnisse

JavaScript-Implementierung der Beispielcode-Analyse und -Optimierung für Festzelt-Lotterieereignisse (1)_Javascript-Kenntnisse

WBOY
Freigeben: 2016-05-16 15:15:30
Original
1428 Leute haben es durchsucht

Ich habe kürzlich an einem Projekt gearbeitet und eine der Projektanforderungen bestand darin, den Marquee-Lotterie-Effekt zu erreichen. Um diese Funktion zu erreichen, habe ich hauptsächlich js-bezogenes Wissen verwendet. Interessierte Freunde können den vollständigen Text lesen.

Bevor wir beginnen, werfen wir einen Blick auf die beiden Probleme und einige Wissenspunkte, die im vorherigen Artikel übersehen wurden und die Sie bei Ihrer eigenen Rekonstruktion nutzen müssen:

1. Problem mit 1-Pixel-Pixelzeile auf dem mobilen Endgerät

Bei den Designentwürfen der mobilen Webseiten, die mir von Designern zur Verfügung gestellt wurden, handelt es sich jeweils um 2x-Bilder. Logischerweise wird beim Schreiben einer Webseite die tatsächliche Größe aller Objekte durch 2 geteilt. Aber was ist mit einer 1-Pixel-Zeile?

Schauen wir uns zunächst zwei Bilder an, die Wirkung des Designentwurfs:

JavaScript-Implementierung der Beispielcode-Analyse und -Optimierung für Festzelt-Lotterieereignisse (1)_Javascript-Kenntnisse

Tatsächlicher Anzeigeeffekt unter Samsung S4:

JavaScript-Implementierung der Beispielcode-Analyse und -Optimierung für Festzelt-Lotterieereignisse (1)_Javascript-Kenntnisse

Sie sehen, dass die 1px-Zeile derzeit nicht angezeigt werden kann. Dieses Problem hängt mit der Bildschirmpixeldichte des S4-Telefons zusammen. Es gibt viele Artikel über die Beziehung zwischen der Bildschirmpixeldichte und der 1-Pixel-Zeile. Sie können selbst danach suchen. Meine Lösung besteht hier darin, die 1px-Zeile nicht zu verarbeiten. Schreiben Sie so viel Sie wollen. Selbst wenn meine Basiseinheit eine Rem-Einheit ist, handelt es sich nicht um eine andere Einheit.

{
position: absolute;
width: 13rem;
height: 9.2rem;
border:1px solid #000;
}
Nach dem Login kopieren

2. Der Unterschied in der Fehlertoleranz zwischen PC-Browsern und mobilen Browsern

Schauen wir uns zunächst einen Code an:

$('[node-type=row-a').find('div');
Nach dem Login kopieren

Es ist offensichtlich, dass der von mir verwendete Selektor einen Syntaxfehler aufweist. Aber was passiert, wenn Sie es in einem Browser ausführen? Schauen Sie sich das Bild unten an:

JavaScript-Implementierung der Beispielcode-Analyse und -Optimierung für Festzelt-Lotterieereignisse (1)_Javascript-Kenntnisse

Es ist offensichtlich, dass der PC-Browser den Attributselektor selbst dann korrekt analysieren kann, wenn ich Grammatikfehler habe. Auf dem Mobiltelefon kann diese Schreibweise jedoch nicht korrekt analysiert und der Code nicht ausgeführt werden.

Daher müssen Sie beim Schreiben von Code auf einige kleine Details achten. . .

3. Verwendung von Selektoren in jQuery

Der am häufigsten verwendete Selektor bei der Verwendung von jQuery oder Zepto lautet wie folgt:

$('div.testClass')
Nach dem Login kopieren

Schreiben Sie einfach die Klasse oder ID des benötigten Dom-Knotens in $() oder verwenden Sie den Attributselektor.
Wenn Sie sich die jQuery-Dokumentation ansehen, gibt es diese Beschreibung für $():

jQuery([selector,[context]])
Nach dem Login kopieren

Das Wichtigste ist, einen Blick auf die Kontextbeschreibung zu werfen (dies ist auch der am häufigsten ignorierte, aber sehr nützliche Parameter in unserem täglichen Gebrauch):

Wenn der Kontextparameter nicht angegeben ist, sucht $() standardmäßig nach DOM-Elementen im aktuellen HTML-Dokument. Wenn der Kontextparameter angegeben ist, z. B. ein DOM-Elementsatz oder ein jQuery-Objekt, wird darin gesucht Kontext. Nach jQuery 1.3.2 entspricht die Reihenfolge der zurückgegebenen Elemente der Reihenfolge, in der sie im Kontext erscheinen.

Als ich anfing, JavaScript zu lernen, hörte ich, dass der Betrieb von DOM die Browserleistung beeinträchtigt und das Durchlaufen von DOM auch die Programmleistung beeinträchtigt.
Wenn wir innerhalb des angegebenen Bereichs nach dem erforderlichen Dom suchen, ist dies dann viel schneller als die Suche im gesamten Dokument? Und wenn wir Webkomponenten schreiben, können Komponenten mehrmals auf einer Seite erscheinen. Wie können wir also beurteilen, welche Komponente wir bedienen möchten? Dieser Kontextparameter spielt bei der Bestimmung der Zeile eine Rolle. Bitte lesen Sie weiter, um Einzelheiten zu erfahren. . .

4. Konvertierung eines jQuery-Objekts in ein Array

Als ich anfing, jQuery zu lernen, sah ich einen Satz in einem Buch:

Ein jQuery-Objekt ist ein JavaScript-Array.

Und bei der Verwendung von jQuery werden Sie feststellen, dass js-Objekte in jQuery-Objekte und jQuery-Objekte in js-Objekte konvertiert werden. Ich werde nicht zu sehr auf diese Grundlagen eingehen.
Manchmal möchten wir jedoch einige Methoden oder Eigenschaften nativer Array-Objekte für jQuery-Objekte verwenden. Schauen wir uns ein einfaches Beispiel an:

JavaScript-Implementierung der Beispielcode-Analyse und -Optimierung für Festzelt-Lotterieereignisse (1)_Javascript-Kenntnisse

Anhand der Ergebnisse der Codeausführung im Bild können wir erkennen, dass wir die umgekehrte Methode nicht für das jQuery-Objekt verwenden müssen. Auch wenn test ein Array ist.
Was können wir also tun, damit das jQuery-Objekt die Methoden des nativen Array-Objekts verwendet?

4.1 Verwendung von Prototyp-Kettenverlängerungen

Zum Beispiel der folgende Code:

jQuery.prototype.reverse=function(){
//一些操作
}
Nach dem Login kopieren

Bei der Verwendung von Prototypen zur Erweiterung von Methoden denken alle immer, dass der Nachteil darin besteht, dass dadurch die vorhandenen Methoden in der Prototypenkette verschmutzt werden können. Beim Zugriff auf die Methode muss außerdem nach der Prototypenkette gesucht werden.

4.2 Objekte in jQuery-Objekten zum Array hinzufügen

Sehen Sie sich den Code unten an

var test = $('div.test');
var a=[];
$(test).each(function(){
a.push($(this));
});
a.reverse();
Nach dem Login kopieren

这样就可以将 jQuery对象翻转。

4.3使用 Array对象的 from()方法

这种方法也是自己在编写插件过程中使用的方法。看一下文档描述:

Array.from() 方法可以将一个类数组对象或可迭代对象转换成真实的数组。
个人感觉使用这个代码比较简洁。暂时还不知道有没有性能的影响。继续看下面的代码:

var test = $('div.test');
var a= Array.from(test);
a.reverse();
Nach dem Login kopieren

5.setInterval()和setTimeout()对程序性能的影响

因为setTimeout()和setInterval()这两个函数在 JavaScript 中的实现机制完全一样,这里只拿 setTimeout()验证

那么来看两段代码

var a ={
test:function(){
setTimeout(this.bbb,1000);
},
bbb:function(){
console.log('----');
}
};
a.test()
Nach dem Login kopieren

输出结果如下:

JavaScript-Implementierung der Beispielcode-Analyse und -Optimierung für Festzelt-Lotterieereignisse (1)_Javascript-Kenntnisse

看下面的代码输出是什么

var a ={
test:function(){
setTimeout(function(){
console.log(this);
this.bbb();
},1000);
},
bbb:function(){
console.log('----');
}
};
a.test();
Nach dem Login kopieren

运行这段代码的时候,代码报错

JavaScript-Implementierung der Beispielcode-Analyse und -Optimierung für Festzelt-Lotterieereignisse (1)_Javascript-Kenntnisse

由以上的结果可以知道,当我们在使用setInterval()和setTimeout()的时候,在回掉中使用this的时候,this的作用域已经发生了改变,并且指向了 window。

setTimeout(fn,0)的含义是,指定某个任务在主线程最早可得的空闲时间执行,也就是说,尽可能早得执行。它在”任务队列”的尾部添加一个事件,因此要等到同步任务和”任务队列”现有的事件都处理完,才会得到执行。
意思就是说在我们设置 setTimeout()之后,也可能不是立即等待多少秒之后就立即执行回掉,而是会等待主线程的任务都处理完后再执行,所以存在 “等待”超过自己设置时间的现象。同时也会存在异步队列中已经存在了其它的 setTimeout() 也是会等待之前的都执行完再执行当前的。

看一个 Demo:

setTimeout(function bbb(){},4000);
function aaa(){
setTimeout(function ccc(){},1000);
}
aaa();
Nach dem Login kopieren

如果运行上面的代码,当执行完 aaa() 等待一秒后并不会立即执行 ccc(),而是会等待 bbb() 执行完再执行 ccc() 这个时候离主线程运行结束已经4s 过去了。

以上内容是针对JavaScript实现跑马灯抽奖活动实例代码解析与优化(一),下篇继续给大家分享JavaScript实现跑马灯抽奖活动实例代码解析与优化(二),感兴趣的朋友敬请关注。

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage