コメント機能。対策について

アバター
MoNoQLoREATOR
記事: 284
登録日時: 14年前
住所: 東京

コメント機能。対策について

投稿記事 by MoNoQLoREATOR » 14年前

結局、次のような対策をすることにしました。

コメント文、コメントサイズ、コメントカラー、コメントスピードを全て読み込む(現段階で4MBメモリ消費見込み)

一度に表示するコメント数を原則100個にする(コメントされたらページが更新されるまでその分増やす)

あるコメントが流れ終わった

その文字列を次枠のコメント文(あらかじめコメントを何番目まで読み込んだか記憶しておく)に差し替える

また流す


ここで問題が発生しました。原因不明のバグです。

eleX = eval(ele.style.left.replace(/px/,"")); //数値の部分だけを数値として取り出す

の部分(25行目)で

Uncaught TypeError: Cannot read property 'style' of null

というエラーがまず1000個ほど出て、その後全く同じエラー(場所も)がもう一つ出て、こちらはどんどんエラー数が増えていきます。"style"が無いという事は、オブジェクトが作られていないという事でしょうか。

CODE:

function move()
{
	var ele;		//オブジェクト用
	var eleX;		//コメントのx座標を数値として記録させておく
	var nowWinSize;	//ウインドウの幅を記録させておく
	var comSca;
	
		if(window.innerWidth){
			nowWinSize = window.innerWidth;						//ウインドウの幅を取得
		} else if(document.documentElement.clientWidth){
			nowWinSize = document.documentElement.clientWidth;	//ウインドウの描画可能領域の取得
		}
	
	
	comSca = Math.floor(commentNum / 20);
		
		//コメントの数だけ繰り返す
		for(i=0; i<commentActNum; i++){
		
			ele = document.getElementById("comment"+i);		//"comment"+i のIDのオブジェクトデータを渡す
			
			if(commentAct==1){
				//↓コメントが表示設定のとき↓
				
				eleX = eval(ele.style.left.replace(/px/,""));	//数値の部分だけを数値として取り出す
				eleX -= commentSpeed[i];						//x座標移動
				
			    
			    if(ele.textContent) str=ele.textContent;
			    else str=ele.innerText;
			 
			    //コメントが画面を通り過ぎた ならば
				if(eleX < (-1)*str.length*intComSize[i]){
					//コメントを差し替える処理(これから書くところ)
					
			        eleX = Math.floor( Math.random()*nowWinSize*comSca +nowWinSize );  //新しいx座標初期値を設定
			        ele.style.top = ( Math.floor(Math.random()*1400)+300 )+"px";  //新しいy座標初期値を設定
			    }
				
				ele.style.left = eleX+"px";	//x座標設定
				
				//↑コメントが表示設定のとき↑
			}else{
				//コメントが非表示設定のとき
					ele.style.left = ( Math.floor(Math.random()*nowWinSize*comSca +nowWinSize) )+"px";
			}
		}
}
最後に編集したユーザー MoNoQLoREATOR on 2011年4月02日(土) 18:20 [ 編集 1 回目 ]

アバター
kimuchi
記事: 163
登録日時: 14年前

RE: コメント機能。対策について

投稿記事 by kimuchi » 14年前

私も似たような構想を考えていました。

そのエラーが出るということは、20行目で要素が拾われていない→オブジェクトが生成されていない
ということでしょう。
生成部分に問題があるか、或いはIDの指定ミスのいずれかだと思います。

追記:
(゚⊿゚)イラネと思われるかもしれませんが、こちらで拵えた物を貼っておきます。
※スクリプト、変更筒所のみ。また結構流用してしまったので、問題があれば削除します。
► スポイラーを表示
最後に編集したユーザー kimuchi on 2011年4月02日(土) 21:13 [ 編集 1 回目 ]

アバター
MoNoQLoREATOR
記事: 284
登録日時: 14年前
住所: 東京

Re: コメント機能。対策について

投稿記事 by MoNoQLoREATOR » 14年前

本当ですね。生成部分にミスがありました。解決しました。