注釈付きのフェードインおよびフェードアウト画像カルーセル プラグインの作成方法を段階的に説明します (2)_JavaScript スキル
前回の記事に引き続き、後編です。
始める前に、クロージャ内にすべての関数を記述することに関する上記の最適化問題について話しましょう。前述したように、初期化時に init を呼び出すだけでよいため、クロージャに init を記述するだけで、他の関数関数は init のプロトタイプ継承メソッドとして呼び出すことができます。したがって、前のコードは実際には次のように書き換えることができます:
var Honru= {};
function H$(id){return document.getElementById(id)}
function H$$(c,p){return p.getElementsByTagName(c)}
Hongru.fader = function (){
function init(options){ //オプションパラメータ: id (必須): 画像リストの親タグ ID; auto (オプション): 自動実行時間インデックス (オプション): 実行の開始画像のシリアル番号
var wp = H$(options.id), // 画像リストの親要素を取得します
ul = H$$('ul',wp)[0], // Get
li = this .li = H$$('li',ul);
this.a = options.auto?options.auto:2; //自動実行間隔
this.index = options. Position?options.position :0; // 実行を開始する画像のシリアル番号 (0 から始まります)
this.cur = this.z = 0;表示画像のシリアル番号&&z-index変数
this.pos(this.index) //変換関数
}
init.prototype = {
auto:function(){
this.li .a = setInterval(new Function ('Hongru.fader.move(1)'),this.a*1000);
},
move:function(i){// パラメータには 2 つのオプションがありますi, 1 および -1,1 次のものに実行することを意味し、-1 は前のものに実行することを意味します
var n = this.cur i;
var m = i==1?n==this .l?0:n:nthis.pos(m); /前または次のカードに変換 Zhang
},
pos:function(i){
clearInterval(this.li.a);
this.z; i].style.zIndex = this .z; //次の画像の z-index を毎回 1 ずつ増やします
this.cur = i //現在表示されている画像の正しいシリアル番号をバインドします
this.auto(); //自動的に実行します
}
}
return {init:init}
}(); しかし、これは実際には問題があります。このように書き換えると見つかるかどうかはわかりませんが、auto 関数では 'Hongru.fader.move()' を呼び出すことができなくなります。 init のプロトタイプ継承を行ってから、「Hongru.fader.init.move() )」を呼び出します。実際、これは正しくありません。この問題については、以前の記事 http://www.cnblogs.com/hongru/archive/2010/10/09/1846636.html で説明しました。プロトタイプがインスタンス化されるまでは、init はアクセスできません。したがって、これを行うときは 2 つの問題に注意する必要があります。
1 つは、初期化中に new キーワードを使用して init をインスタンス化することです。
もう 1 つは、コード内でプロトタイプ メソッドを呼び出すときに、インスタンス化したオブジェクトからも呼び出す必要があるということです。たとえば、上記のコードを初期化するときは、次のようにする必要があります。 >
コードは次のとおりです:
概要: 前のコードは次のようになります。 最適化:
コードをコピー
コードは次のとおりです:
var Honru={};
function H$(id){return document.getElementById(id)}
function H$$(c,p){return p.getElementsByTagName(c) }
Hongru.fader = function(){
function init(anthor,options){this.anthor=anthor; this.init(options);}
init.prototype = {
init: function(options){ //オプションパラメータ: id (必須): 画像リストの親タグ ID; auto (オプション): 自動実行時間; インデックス (オプション): 開始画像のシリアル番号
var wp = H$(options. id), // 画像リストの親要素を取得します
ul = H$$('ul',wp)[0], //
li = this.li = H$$( 'li ',ul);
this.a = options.auto?options.auto:2; //自動実行間隔
this.index = options.position?options.position:0; //画像の実行を開始しますシリアル番号 (0 から始まります)
this.l = li.length;
this.cur = this.z = 0; //現在表示されている画像のシリアル番号&&z-index 変数
this.pos( this .index); //変換関数
},
auto:function(){
this.li.a = setInterval(new Function(this.anthor '.move(1)'),this . a*1000);
},
move:function(i){// パラメータ i には 1 と -1 の 2 つのオプションがあり、1 は次のパラメータに実行することを意味し、-1 は次のパラメータに実行することを意味します。前のもの。Zhang
var n = this.cur i;
var m = i==1?n==this.l?0:nthis.pos(m) //前または次の画像に変換します
},
pos: function(i ){
clearInterval(this.li.a);
this.z;
this.li[i].style.zIndex = this.z;毎回インデックスに 1 を加えます
this.cur = i; //現在表示されている画像の正しいシリアル番号をバインドします
this.auto(); //自動的に実行します
}
}
return {init: init}
}();
次のように初期化する必要があります:
var fader = new Honru.fader.init('fader',{ //最初のパラメータが変数名と一致していることを確認してください
id :'fader'
}) ;
さて、コード最適化計画はこれで終了です。以下はエフェクトの 2 番目の部分の実装です: フェードインおよびフェードアウトエフェクト
実際、上記の優れたコード構造とロジックを使用すると、フェードインおよびフェードアウトエフェクトを追加するのは比較的簡単です。変更する前に画像を透明にし、タイマーを渡して徐々に透明度を上げます。しかし、より重要な境界判断がいくつかあります。同時に、IE と非 IE で透明度を変更する場合は、異なる CSS 属性を使用することに注意する必要があります。
コア コードの変更は次の 2 つの段落です。1 つは透明度グラデーション関数 fade() を追加すること、もう 1 つは pos() --> で画像を透明にしてから fade の実行を開始することです。 ()
pos() にコードセグメントを追加します:
if(this .li[i].o>=100){ //フェードインする前に画像の透明度を透明に設定します。
this.li[i].o = 0; li[i].style .opacity = 0;
this.li[i].style.filter = 'alpha(opacity=0)';
}
this.li[i].f = setInterval(new Function(this .anthor '.fade(' i ')'),20);
if(this.li[i].o> =100){
clearInterval (this.li[i].f); //透明度の変更が完了したら、タイマーをクリアします
if(!this.li.a){ //すべてのタイマーを確認します自動運転開始前にクリアされます。そうしないと、コントローラーをクリックする速度が速すぎると、タイマーがクリアされる前に次の変更が開始され、関数が台無しになります。 >else{ //透明度の変更
this.li[i].o =5;
this.li[i].style.opacity = this.li[i].o/100; .li[ i].style.filter = 'alpha(opacity=' this.li[i].o ')';
}
}
わかりました、とても簡単です。ただし、もう 1 つ覚えておくべきことは、pos() 呼び出しの開始時に最後のタイマーを忘れずにクリアする必要があるということです。 !
以下にソース コード全体を投稿します:
コードをコピーします
var Honru={};
function H$(id){return document.getElementById(id)}
function H$$(c,p){return p.getElementsByTagName(c) }
Hongru.fader = function(){
function init(anthor,options){this.anthor=anthor; this.init(options);}
init.prototype = {
init: function(options){ //オプションパラメータ: id (必須): 画像リストの親タグ ID; auto (オプション): 自動実行時間; インデックス (オプション): 開始画像のシリアル番号
var wp = H$(options. id), // 画像リストの親要素を取得します
ul = H$$('ul',wp)[0], //
li = this.li = H$$( 'li ',ul);
this.a = options.auto?options.auto:2; //自動実行間隔
this.index = options.position?options.position:0; // 実行開始番号 (0 から始まります)
this.l = li.length;
this.cur = this.z = 0; //現在表示されている画像のシリアル番号&&z-index 変数
/* == フェードを追加しますin およびフェードアウト関数 ==*/
for(var i=0;i
this.li[i].style.opacity = this.li[i].o/100; //IE 以外の場合は、opacity
this.li[i].style.filter を使用してください。 = 'alpha(opacity=' this.li[i].o ')' //IE フィルター
}
this.pos(this.index); //変換関数
}, auto:function(){
this.li.a = setInterval(new Function(this.anthor '.move(1)'),this.a*1000);
},
move : function(i){//パラメータ i には 1 と -1 の 2 つのオプションがあります。1 は次のピクチャに実行することを意味し、-1 は前のピクチャに実行することを意味します。
var n = this.cur i; var m = i==1?n==this.l?0:n:nthis.pos(m); //前または次の画像に変換します
},
pos:function(i){
clearInterval(this.li.a);自動変更タイマー
clearInterval(this.li[i].f); //フェードエフェクトタイマーをクリア
this.z;
this.li[i].style.zIndex = this.z ; //次のピクチャの z-index を毎回 1 ずつ増やします
this.cur = i; //現在表示されているピクチャの正しいシリアル番号をバインドします
this.li.a = false;以下で使用するマークを付けて、クリア タイマーが完了したことを示します。
//this.auto() //自動的に実行します
if(this.li[i].o>=100); { // 画像がフェードインする前に、画像の透明度を透明に設定します
this.li[i].o = 0;
this.li[i].style.opacity = 0; li[i] .style.filter = 'alpha(opacity=0)';
}
this.li[i].f = setInterval(new Function(this.anthor '.fade(' i ') '),20 );
},
fade:function(i){
if(this.li[i].o>=100){
clearInterval(this.li[i] .f); //透明度の変更が完了したら、タイマーをクリアします。
if(!this.li.a){ //自動操作を開始する前に、すべてのタイマーがクリアされていることを確認してください。そうしないと、コントローラーをクリックする速度が速すぎると、タイマーがクリアされる前に次の変更が開始され、関数が台無しになります。 >else{
this.li[i].o =5;
this.li[i].style.opacity = this.li[i].o/100; ].style .filter = 'alpha(opacity=' this.li[i].o ')'
}
}
}
return {init:init}
}( );
私が書いたメモに注目してください。
ランニング効果を見てみましょう:
ステップ2
ここでのフェードインとフェードアウトは単なるタイトルであることに気付いた人もいるかもしれませんが、実際にはフェードイン効果があるだけですが、効果は基本的にフェードアウトと同じです。フェードアウトしたい場合でも、2 つの文を変更するだけで済みます。笑
このパートはここで終わり、次のパートではコントローラーを追加します。

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ホットトピック









