検索
ホームページウェブフロントエンドjsチュートリアルマーキー宝くじイベントのJavaScript実装サンプルコード分析と最適化(1)_JavaScriptスキル

私は最近、あるプロジェクトに取り組みました。そのプロジェクトの要件の 1 つは、この機能を実現するために、主に js 関連の知識を使用しました。興味のある友人は、すぐに全文を読むことができます。

始める前に、前の記事で見逃した 2 つの問題といくつかの知識ポイントを見てみましょう。これらは、独自の再構築プロセスで使用する必要があります。

1. モバイル端末の 1px ピクセルラインの問題

デザイナーから私に渡されたモバイル Web ページのデザイン案は、すべて 2 倍の画像です。論理的に言えば、Web ページを作成するとき、すべてのオブジェクトの実際のサイズは 2 で割られます。では、1 ピクセルのラインはどうでしょうか?

まず、デザイン ドラフトの効果を示す 2 枚の写真を見てみましょう:

マーキー宝くじイベントのJavaScript実装サンプルコード分析と最適化(1)_JavaScriptスキル

Samsung S4 での実際の表示効果:

マーキー宝くじイベントのJavaScript実装サンプルコード分析と最適化(1)_JavaScriptスキル

この時点では1pxのラインが表示できないことがわかります。この問題は、S4 電話の画面ピクセル密度に関連しています。画面のピクセル密度と1pxラインの関係については多くの記事がありますので、自分で検索してください。ここでの私の解決策は、1px ラインを処理しないことです。好きなだけ書いてください。たとえベースユニットがレムであっても、それは別のユニットではありません。

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

2. PC ブラウザとモバイル ブラウザの耐障害性の違い

まずコードの一部を見てみましょう:

$('[node-type=row-a').find('div');

私が使用したセレクターには明らかに構文エラーがあります。しかし、ブラウザで実行するとどうなるでしょうか?下の写真を見てください:

マーキー宝くじイベントのJavaScript実装サンプルコード分析と最適化(1)_JavaScriptスキル

属性セレクターについては、文法上の誤りがあっても、PC ブラウザーが正しく解析できることは明らかです。しかし、携帯電話ではこの書き方は正しく解析できず、コードを実行できません。

したがって、コードを記述するときは、いくつかの細かい点に注意を払う必要があります。 。 。

3. jQuery でのセレクターの使用

jQuery または Zepto を使用するときに最も一般的に使用されるセレクターは次のように記述されます。

$('div.testClass')

必要な Dom ノードのクラスまたは ID を $() に記述するか、属性セレクターを使用します。
jQuery のドキュメントを見ると、$() について次のような説明があります:

jQuery([selector,[context]])

最も重要なことは、コンテキストの説明に注目することです (コンテキストは最も無視されやすいパラメータでもありますが、日常使用では非常に便利なパラメータです)。

デフォルトでは、context パラメータが指定されていない場合、$() は現在の HTML ドキュメント内の DOM 要素を検索します。DOM 要素セットや jQuery オブジェクトなどの context パラメータが指定されている場合は、このドキュメント内で検索します。コンテクスト。 。 jQuery 1.3.2 以降、返される要素の順序は、コンテキスト内での要素の出現順序と同じになります。

私が初めて JavaScript を学習し始めたとき、DOM の操作はブラウザのパフォーマンスを消費し、DOM の走査はプログラムのパフォーマンスにも影響を与えると聞きました。
指定された範囲内で必要なDomを検索すると、文書全体から検索するよりもはるかに高速になりますか?また、Web コンポーネントを作成する場合、ページ内にコンポーネントが何度も出現することがありますが、どのコンポーネントを操作するかをどのように判断すればよいでしょうか?このコンテキスト パラメーターは、行を決定する際に役割を果たします。詳細については読み続けてください。 。 。

4. jQuery オブジェクトの配列への変換

私が初めて jQuery を学び始めたとき、本で次のような文を見ました。

jQuery オブジェクトは JavaScript 配列です。

jQuery を使用する過程で、js オブジェクトが jQuery オブジェクトに変換され、jQuery オブジェクトが js オブジェクトに変換されることに遭遇します。これらの基本については、あまり詳しく説明しません。
ただし、jQuery オブジェクトでネイティブ Array オブジェクトのメソッドやプロパティを使用したい場合があります。簡単な例を見てみましょう:

マーキー宝くじイベントのJavaScript実装サンプルコード分析と最適化(1)_JavaScriptスキル

図のコード実行結果から、jQuery オブジェクトに対してリバース メソッドを使用する必要がないことがわかります。たとえtestが配列であっても。
では、jQuery オブジェクトにネイティブ Array オブジェクトのメソッドを使用させるにはどうすればよいでしょうか?

4.1 プロトタイプチェーン拡張機能の使用

たとえば、次のコード:

jQuery.prototype.reverse=function(){
//一些操作
}

プロトタイプを使用してメソッドを拡張する場合、プロトタイプ チェーン上の既存のメソッドが汚染される可能性があるという欠点があると誰もが常に考えてきました。メソッドにアクセスするときに、プロトタイプ チェーンを探す必要もあります。

4.2 jQuery オブジェクト内のオブジェクトを配列に追加する

以下のコードを見てください

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

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

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

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

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

var test = $('div.test');
var a= Array.from(test);
a.reverse();

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

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

那么来看两段代码

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

输出结果如下:

マーキー宝くじイベントのJavaScript実装サンプルコード分析と最適化(1)_JavaScriptスキル

看下面的代码输出是什么

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

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

マーキー宝くじイベントのJavaScript実装サンプルコード分析と最適化(1)_JavaScriptスキル

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

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

看一个 Demo:

setTimeout(function bbb(){},4000);
function aaa(){
setTimeout(function ccc(){},1000);
}
aaa();

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

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

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)Apr 11, 2025 am 08:23 AM

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)Apr 11, 2025 am 08:22 AM

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScript:Web言語の汎用性の調査JavaScript:Web言語の汎用性の調査Apr 11, 2025 am 12:01 AM

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの進化:現在の傾向と将来の見通しJavaScriptの進化:現在の傾向と将来の見通しApr 10, 2025 am 09:33 AM

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

javascriptの分解:それが何をするのか、なぜそれが重要なのかjavascriptの分解:それが何をするのか、なぜそれが重要なのかApr 09, 2025 am 12:07 AM

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

pythonまたはjavascriptの方がいいですか?pythonまたはjavascriptの方がいいですか?Apr 06, 2025 am 12:14 AM

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。

JavaScriptをインストールするにはどうすればよいですか?JavaScriptをインストールするにはどうすればよいですか?Apr 05, 2025 am 12:16 AM

JavaScriptは、最新のブラウザにすでに組み込まれているため、インストールを必要としません。開始するには、テキストエディターとブラウザのみが必要です。 1)ブラウザ環境では、タグを介してHTMLファイルを埋め込んで実行します。 2)node.js環境では、node.jsをダウンロードしてインストールした後、コマンドラインを介してJavaScriptファイルを実行します。

クォーツでタスクが開始される前に通知を送信する方法は?クォーツでタスクが開始される前に通知を送信する方法は?Apr 04, 2025 pm 09:24 PM

Quartzタイマーを使用してタスクをスケジュールする場合、Quartzでタスク通知を事前に送信する方法、タスクの実行時間はCron式によって設定されます。今...

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター