質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

4回答

5058閲覧

jQueryで動作が重い

jackie1993427

総合スコア66

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

3クリップ

投稿2015/08/25 02:57

お世話になります。
現在作成中のサイトが、
動作が重くなってしまいました。

原因はjQueryの多用かと思います。

そこで、コードの書き方を短縮すれば動作が軽量化されると思い、
模索したのですが、js初心者なため、イマイチ理解できず質問させていただきます。

script部分は以下になります。

<script> var controller = new ScrollMagic.Controller(); $(function () { var scene = new ScrollMagic.Scene({triggerElement: "#pin2" ,triggerHook : "onLeave"}) .setPin("#pin2") .addTo(controller); }); $(function () { var scene = new ScrollMagic.Scene({ triggerElement: "#targetDiv" ,duration: 500 ,triggerHook : "onLeave"}) .setPin("#textArea") .addTo(controller); }); $(function () { var scene = new ScrollMagic.Scene({ triggerElement: "#targetDiv2" ,duration: 500 ,triggerHook : "onLeave"}) .setPin("#textArea2") .addTo(controller); }); $(function () { var scene = new ScrollMagic.Scene({ triggerElement: "#targetDiv3" ,duration: 500 ,triggerHook : "onLeave"}) .setPin("#textArea3") .addTo(controller); }); $(function () { var scene = new ScrollMagic.Scene({ triggerElement: "#targetDiv4" ,duration: 500 ,triggerHook : "onLeave"}) .setPin("#textArea4") .addTo(controller); }); $(function () { var scene = new ScrollMagic.Scene({ triggerElement: "#targetDiv5" ,duration: 500 ,triggerHook : "onLeave"}) .setPin("#textArea5") .addTo(controller); }); $(function () { var scene = new ScrollMagic.Scene({ triggerElement: "#targetDiv6" ,duration: 500 ,triggerHook : "onLeave"}) .setPin("#textArea6") .addTo(controller); }); $(function () { var scene = new ScrollMagic.Scene({ triggerElement: "#targetDiv7" ,duration: 500 ,triggerHook : "onLeave"}) .setPin("#textArea7") .addTo(controller); }); $(function () { var scene = new ScrollMagic.Scene({ triggerElement: "#targetDiv8" ,duration: 100 ,triggerHook : "onLeave"}) .setPin("#textArea8") .addTo(controller); }); $(function () { var scene = new ScrollMagic.Scene({ triggerElement: "#targetDiv9" ,duration: 500 ,triggerHook : "onLeave"}) .setPin("#textArea9") .addTo(controller); }); </script> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script type="text/javascript" src="js/crossfade.jquery.js"></script> <script> $(function(){ $('.crossfade-01').crossfade({ threshold: 0.1 }); $('.crossfade-02').crossfade({ threshold: 0.1 }); $('.crossfade-03').crossfade({ threshold: 0.1 }); $('.crossfade-04').crossfade({ threshold: 0.1 }); $('.crossfade-05').crossfade({ threshold: 0.1 }); $('.crossfade-06').crossfade({ threshold: 0.1 }); $('.crossfade-07').crossfade({ threshold: 0.1 }); $('.crossfade-08').crossfade({ threshold: 0.1 }); $('.crossfade-09').crossfade({ threshold: 0.1 }); }); </script> <script type="text/javascript" src="js/jquery-scrollInTurn.js"></script> <script type="text/javascript"> $(document).ready(function() { $('.fadeimg').scrollInTurn({ selector: 'img', fadeInSpeed : 1000, delaySpeed : 3000 }); $('.fade').scrollInTurn({ selector: 'p', fadeInSpeed : 2000, delaySpeed : 1000 }); }); </script> <script type="text/javascript"> $(function(){ $("#toggle").click(function(){ $("#menu").slideToggle(); return false; }); $(window).resize(function(){ var win = $(window).width(); var p = 768; if(win > p){ $("#menu").show(); } else { $("#menu").hide(); } }); }); </script>

スクロールに対応したアニメーションがほとんどですが、
短縮記述は可能でしょうか
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

javascript

1$(function () { 2 var scene = new ScrollMagic.Scene({triggerElement: "#pin2" 3 ,triggerHook : "onLeave"}) 4 .setPin("#pin2") 5 .addTo(controller); 6 });

上記この繰り返し部分はHTML次第で10分の1程度にまとめることが可能

javascript

1<script> 2$(function(){ 3$('.crossfade-01,.crossfade-02,.crossfade-03,.crossfade-04,...').crossfade({ 4 threshold: 0.1 5 }); 6</script>

のようにするか、わざわざクラス名を別のものにせず、共通のクラス名をつけてセレクタでそのクラスを指定。

処理速度というより、DRYじゃないので。

投稿2015/08/25 09:48

編集2015/08/25 09:50
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

答えが間違っているかもしれませんが、
jQueryのanimateやcrossfadeを使用するよりも、css3のtransitionを使用する方が速度は改善されます。
$(.....).css({transition:....});
となりますでしょうか?
html構造の組み換えがちょっと大変ですね。
最近はどのブラウザもjs処理が高速になってきましたが、js処理が低速だったころは劇的に速度が改善されました。

投稿2015/08/25 03:34

編集2015/08/25 03:36
rik

総合スコア1151

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jackie1993427

2015/08/25 03:55

スクロールによっての動作ですのでtransitionで実現するのは厳しい気がします。 トリガーを指定してのアニメーションですので... こちらはこちらでナビゲーションなどに利用させていただきます! ありがとうございます!
rik

2015/08/25 04:02

スクロールによってのトリガーにてJavaScript(jQuery)からcssを変更するという事になります。 私はjQueryを使用せず全てネイティブJavaScriptで書いていますが、そのように書けています。複数の処理が重なっても速度低下があまりありませんのでお勧めです。
jackie1993427

2015/08/25 09:29

なるほど、そういう使い方があるのですね... 調べつつちょっと挑戦してみようかと思います。
guest

0

僕だったら
・似た処理は共通関数にする。
・アニメーションはCSS3を検討する。
をするかなと思います。

共通化はthisを使って、個別な値が必要なら
オブジェクトなり配列なりのテーブルを作って参照させるとか、
html要素のdata-hogeなどの属性にいれちゃうとかします。
あとはスクロールを全部拾うと重たくなるので、間引くとかですかね。
これはレイテンシに関わるので最後に回しそうですが。

投稿2015/08/31 11:18

mrkakky

総合スコア25

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

体感的な軽さに繋がるかわかりませんが、同じ記述がたくさんあるので、関数化してみてはどうでしょうか?

javascript

1<script> 2$(function () { 3 //カンマ区切りでIDやclassを入れたいだけ入れる 4 var firstArray = ["#pin2", "#targetDiv", "#targetDiv2","#targetDiv3", "#targetDiv4", "...."]; 5 for(var i=0; i < firstArray.length; i++){ 6 //配列に格納した要素をメソッドに入れる 7 //forをlengthまでの回数を回しているので、配列の要素数が増えてもOK 8 firstMethod(firstArray[i]); 9 } 10}); 11 12//最初のメソッドを定義 13function firstMethod(target){ 14 var _target = target; 15 var scene = new ScrollMagic.Scene({ 16 triggerElement: _target 17 ,duration: 500 18 ,triggerHook : "onLeave"}) 19 .setPin(_target) 20 .addTo(controller); 21} 22</script> 23 24<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 25<script type="text/javascript" src="js/crossfade.jquery.js"></script> 26<script> 27$(function () { 28 //カンマ区切りでIDやclassを入れたいだけ入れる 29 var secondArray = ['.crossfade-01', '.crossfade-02', '.crossfade-03', '.crossfade-04', '....']; 30 for(var i=0; i < secondArray.length; i++){ 31 secondMethod(secondArray[i]); 32 } 33}); 34function secondMethod(target){ 35 var _target = target; 36 $(_target).crossfade({ 37 threshold: 0.1 38 }); 39} 40</script> 41 42<script type="text/javascript" src="js/jquery-scrollInTurn.js"></script> 43<script type="text/javascript"> 44 $(document).ready(function() { 45 thirdMethod('.fadeimg', 'img', 1000, 3000); 46 thirdMethod('.fade', 'p', 2000, 1000); 47 }); 48 49 function thirdMethod(target, select, fSpeed, dSpeed){ 50 var target = _target; 51 var select = _select; 52 var fSpeed = _fSpeed; 53 var dSpeed = _dSpeed; 54 $(target).scrollInTurn({ 55 selector: select, 56 fadeInSpeed : fSpeed, 57 delaySpeed : dSpeed 58 }); 59 60 } 61</script>

投稿2015/08/27 12:57

utoka

総合スコア56

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問