私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレ+ JavaScript の質問用スレッド vol.82 +

みんなの評価 :
レスフィルター : (試験中)
優しいなwツンデレだね
動かす方法も上に書いてあるし、あとはなんとかなるだろう
個人的には最短手プログラム見てみたいが
動かす方法も上に書いてあるし、あとはなんとかなるだろう
個人的には最短手プログラム見てみたいが
>>746 には異論があるな。
単純だけれどひどく時間が掛かる(手数の多い)アルゴリズム
を考案したとして、それを手でやることはあり得ないけど
プログラム書いて動かす場合は無問題とかならよくあると思う。
単純だけれどひどく時間が掛かる(手数の多い)アルゴリズム
を考案したとして、それを手でやることはあり得ないけど
プログラム書いて動かす場合は無問題とかならよくあると思う。
変数名 = (function(e){
return e.currentStyle || document.defaultView.getComputedStyle(e, '')
})(document.getElementById('ID')).height;
return e.currentStyle || document.defaultView.getComputedStyle(e, '')
})(document.getElementById('ID')).height;
画像が読み込めたかどうかはどうやって判断すればいいですか?
image.completeはエラーや中断されてもtrueになるらしいし
loadイベントはキャッシュがあるときは発生しない場合があるらしいし
といってわざわざ
image.src += "?" + new Date().getTime()
などと新しいurlを設定するのも無駄な通信を発生させるのがよくなさそうだし…
相手によって"?~"を付けたり付けなかったりしてお茶を濁すんですか?
image.completeはエラーや中断されてもtrueになるらしいし
loadイベントはキャッシュがあるときは発生しない場合があるらしいし
といってわざわざ
image.src += "?" + new Date().getTime()
などと新しいurlを設定するのも無駄な通信を発生させるのがよくなさそうだし…
相手によって"?~"を付けたり付けなかったりしてお茶を濁すんですか?
一時的(ローカル)と常時(グローバル)?ならほとんど差は無いよね。
function(){}で定義すると、それより前(同じファイルなら)でもその関数を使える。
(firefoxでエラーはかれた覚えもあるけど。)
関数内でなく(=htmlに直書き等)
if (flag){
function(){}
}
って場合分けで定義したい場合、function(){}で定義すると、flagがfalseでもそれが定義されるから、
この場合はvar window.hoge = function(){};ってやる。
function(){}で定義すると、それより前(同じファイルなら)でもその関数を使える。
(firefoxでエラーはかれた覚えもあるけど。)
関数内でなく(=htmlに直書き等)
if (flag){
function(){}
}
って場合分けで定義したい場合、function(){}で定義すると、flagがfalseでもそれが定義されるから、
この場合はvar window.hoge = function(){};ってやる。
無名関数の中で動かすのがほとんどだから変数に入れるな、グローバル汚すと面倒だし。
グローバルに書かないといけないときは
window["myproject"] = {
"hello": function() { }
}
のように名前空間のようなことをしてる
グローバルに書かないといけないときは
window["myproject"] = {
"hello": function() { }
}
のように名前空間のようなことをしてる
>>746
今考えている解き方はあります
一言で説明すると、パネルを一列ずつ揃えていく感じです
一番上の横一列(1,2,3,4)をそろえたら今度は左端の一列(5,9,13)を揃えて…という処理を繰り返し、完成させます
15パズルの縦横一列ずつを揃えれば残りは実質8パズルとなりますし、シャッフルして混ぜたものなので14-15パズルの形になる心配もありません
その状態でも解けるということはわかるので、無駄なパネル(縦横一列)を動かす必要がなくなるはず…と考えています
私がこれを実践しようとすると、どうしても1,2,4,3と並んでしまうので…
>>749
とりあえず空きマスを動かすことだけを考えて書いてみましたが、動きませんでした
追加した文は下記の通りです
(336行目まで省略)
function ans(){
if(panelID[15]!=15){
for(i=0;i<3;i++){
/*空きマスをひとつ右に移動させる*/
panelID[clickCellY*cellNumX+i]=panelID[clickCellY*cellNumX+(i+1)];
/*空きマスが一番右にあるときに処理を終わらせる*/
if(panelID[15]==panelID[cellNumX+i] || panelID[15]==panelID[cellNumX+i+4] ||panelID[15]==panelID[cellNumX+i+8] ||panelID[15]==panelID[cellNumX+i+12]){
break; } }
for(i=0;i<4;i++){
/*空きマスをひとつ下に移動させる*/
panelID[i*cellNumX+clickCellX]=panelID[(i+1)*cellNumX+clickCellX];
/*空きマスが一番右下にあるときにゴールの処理を行う*/
if(panelID[15]==15){
flag=1; } } }
//-->
</SCRIPT>
<INPUT TYPE=button VALUE="自動で解く" onClick="ans()"><BR>
今考えている解き方はあります
一言で説明すると、パネルを一列ずつ揃えていく感じです
一番上の横一列(1,2,3,4)をそろえたら今度は左端の一列(5,9,13)を揃えて…という処理を繰り返し、完成させます
15パズルの縦横一列ずつを揃えれば残りは実質8パズルとなりますし、シャッフルして混ぜたものなので14-15パズルの形になる心配もありません
その状態でも解けるということはわかるので、無駄なパネル(縦横一列)を動かす必要がなくなるはず…と考えています
私がこれを実践しようとすると、どうしても1,2,4,3と並んでしまうので…
>>749
とりあえず空きマスを動かすことだけを考えて書いてみましたが、動きませんでした
追加した文は下記の通りです
(336行目まで省略)
function ans(){
if(panelID[15]!=15){
for(i=0;i<3;i++){
/*空きマスをひとつ右に移動させる*/
panelID[clickCellY*cellNumX+i]=panelID[clickCellY*cellNumX+(i+1)];
/*空きマスが一番右にあるときに処理を終わらせる*/
if(panelID[15]==panelID[cellNumX+i] || panelID[15]==panelID[cellNumX+i+4] ||panelID[15]==panelID[cellNumX+i+8] ||panelID[15]==panelID[cellNumX+i+12]){
break; } }
for(i=0;i<4;i++){
/*空きマスをひとつ下に移動させる*/
panelID[i*cellNumX+clickCellX]=panelID[(i+1)*cellNumX+clickCellX];
/*空きマスが一番右下にあるときにゴールの処理を行う*/
if(panelID[15]==15){
flag=1; } } }
//-->
</SCRIPT>
<INPUT TYPE=button VALUE="自動で解く" onClick="ans()"><BR>
>>759
関数宣言と関数式の違いが分かれば、使いどころなんかも見えてくるんじゃなかろか。
宣言は文脈を辿る(実行コンテキスト)前にオブジェクトが生成され参照可能になる。
hoge(); // 呼出可
function hoge() {
}
広範囲で使う(呼出、参照代入)関数の場合、記述位置に融通が利くとかがメリットになるか。
グローバルな関数は基本、宣言でいいんじゃないか。
式は評価されるまでオブジェクトが生成されないけど、プロパティ、引数等への単一な参照代入なら
宣言、代入よりも無駄なステップが省けそうだし可読性もよくなるんじゃないのかね。
var hoge = function() {
}
同時に呼出すことはよくあるけど、これだけだと使いどころと言えるような場面はピンと来ない。
関数宣言と関数式の違いが分かれば、使いどころなんかも見えてくるんじゃなかろか。
宣言は文脈を辿る(実行コンテキスト)前にオブジェクトが生成され参照可能になる。
hoge(); // 呼出可
function hoge() {
}
広範囲で使う(呼出、参照代入)関数の場合、記述位置に融通が利くとかがメリットになるか。
グローバルな関数は基本、宣言でいいんじゃないか。
式は評価されるまでオブジェクトが生成されないけど、プロパティ、引数等への単一な参照代入なら
宣言、代入よりも無駄なステップが省けそうだし可読性もよくなるんじゃないのかね。
var hoge = function() {
}
同時に呼出すことはよくあるけど、これだけだと使いどころと言えるような場面はピンと来ない。
単にラムダ関数が用意されてるだけでしょ
いろんな書き方が出来ますよ
好きなの使ってねってことだ
いろんな書き方が出来ますよ
好きなの使ってねってことだ
jQueryのソース程度も読めないようならfor inは一律使用禁止にしといた方がいいと思う
>>768って、Objectオブジェクトが拡張されてるから使うなってことなのか?
そんな理由で盲目的にfor inループ使わない、って対応するようなら
フレームワークがなかろうと、いずれ問題は起きそうな気がする
そんな理由で盲目的にfor inループ使わない、って対応するようなら
フレームワークがなかろうと、いずれ問題は起きそうな気がする
>>767
panelIDをコピーしたpanelIDCopyという配列を作りました
var panelIDCopy;
function ans(){ //「自動で解く」のボタンを押したときにpanelIDの配列をpanelIDCopyに代入する
for(i=0;i<15;i++){
panelIDCopy[i]=panelID[i];}
>最低限パネルが動く0~15の数値(2~4個)すべてをはじき出すには?
空白のパネルを中心として、そこから上下左右1マスのパネルのことですよね?(空白のパネルの場所にもよりますが)
それと位置番号と要素ですが、
ⅠⅡⅢ □57
ⅣⅤⅥ 681
ⅦⅧⅨ 243
↑で言うとローマ数字が位置番号、数字と空白の□が要素で
「Ⅰが空白でⅡに5のパネル、Ⅲに7のパネルがある」という解釈で合ってますか?
panelIDをコピーしたpanelIDCopyという配列を作りました
var panelIDCopy;
function ans(){ //「自動で解く」のボタンを押したときにpanelIDの配列をpanelIDCopyに代入する
for(i=0;i<15;i++){
panelIDCopy[i]=panelID[i];}
>最低限パネルが動く0~15の数値(2~4個)すべてをはじき出すには?
空白のパネルを中心として、そこから上下左右1マスのパネルのことですよね?(空白のパネルの場所にもよりますが)
それと位置番号と要素ですが、
ⅠⅡⅢ □57
ⅣⅤⅥ 681
ⅦⅧⅨ 243
↑で言うとローマ数字が位置番号、数字と空白の□が要素で
「Ⅰが空白でⅡに5のパネル、Ⅲに7のパネルがある」という解釈で合ってますか?
>>768
jQueryがグローバル汚染するのは $ と jQuery だけ。
> prototypeではfor...inが挙動がおかしくなる
それが正しい動作なんだけどね。利用者が for-in の使い方を間違っているだけ。
jQueryがグローバル汚染するのは $ と jQuery だけ。
> prototypeではfor...inが挙動がおかしくなる
それが正しい動作なんだけどね。利用者が for-in の使い方を間違っているだけ。
>>772
配列のコピーはOKだね。その他もろもろの認識も。
適切かどうかは置いといて、用語統一は必要だから位置と要素でいこか。
無理にコードにする必要はないからね。
「左は1引いて右は1足す」こんな感じで規則性を考えていけばいいんじゃないかと思う。
実際、16マス程度ならデータで用意しとけば済む話しなんだけど、n * nなら使い回せるもの考えよう。
ひとつ確認。
こっちは空マスの隣接マスしか移動できない認識でいたんだけど、どうも違う。
今頃気付いてあれだけど、複数マスをスライドさせる仕様に拘りはあるの?
隣接のみ仕様で納得のものが作れるようになれば、複数スライド仕様への移行も
難しくないように思うのだが。(と無責任に言ってみる)
配列のコピーはOKだね。その他もろもろの認識も。
適切かどうかは置いといて、用語統一は必要だから位置と要素でいこか。
無理にコードにする必要はないからね。
「左は1引いて右は1足す」こんな感じで規則性を考えていけばいいんじゃないかと思う。
実際、16マス程度ならデータで用意しとけば済む話しなんだけど、n * nなら使い回せるもの考えよう。
ひとつ確認。
こっちは空マスの隣接マスしか移動できない認識でいたんだけど、どうも違う。
今頃気付いてあれだけど、複数マスをスライドさせる仕様に拘りはあるの?
隣接のみ仕様で納得のものが作れるようになれば、複数スライド仕様への移行も
難しくないように思うのだが。(と無責任に言ってみる)
振る舞いとしてはそれでいいと思うけど?
メソッドはプロトタイプチェーンから参照されるとかも説明しないと駄目か
メソッドはプロトタイプチェーンから参照されるとかも説明しないと駄目か
なんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるwなんだここwなんだここwなんだここwなんだここwなんだここwなんだここw
終わってるw
new演算子を使うと、
例えば、2次元配列を作りたくて var a = new Array(100); のような教科書通りの記述をすると
jslintでエラー扱いされるんですが
new演算子はjslintの中では悪者扱いなの?
例えば、2次元配列を作りたくて var a = new Array(100); のような教科書通りの記述をすると
jslintでエラー扱いされるんですが
new演算子はjslintの中では悪者扱いなの?
C#でブラウザを作っていて、JavaScriptを実装をしたいのですが、普通の実装用の説明では自分にとって抽象的でわかりにくいので、具体的でわかりやすい(できれば日本語の)参考サイトを探しています
>>783
ぐぐれ
ぐぐれ
>>782
よく知らんけど、それは本当に警告じゃなくてエラー(処理がそこで止まる)なの?
よく知らんけど、それは本当に警告じゃなくてエラー(処理がそこで止まる)なの?
>>782
一次元だし。
一次元だし。
onSoundCompleteとか、onProgressChangeってFlashのaction scriptで使われるものなのでしょうか?
サイトからコピペしたmp3を再生するjavascriptのコードを実行したのですが、onsoundcompleteとonprogresschangeのところだけ実行されていないことがわかりました。
(Flashの代わりにHTML5でmp3を再生している模様)
今のところコメントアウトしても動作に問題はないのですが、今回新しく機能を追加しようと思ったときに、
onsoundcompleteとonprogresschangeが使えなくて困っています。
誰か詳しい人アドバイスください。
サイトからコピペしたmp3を再生するjavascriptのコードを実行したのですが、onsoundcompleteとonprogresschangeのところだけ実行されていないことがわかりました。
(Flashの代わりにHTML5でmp3を再生している模様)
今のところコメントアウトしても動作に問題はないのですが、今回新しく機能を追加しようと思ったときに、
onsoundcompleteとonprogresschangeが使えなくて困っています。
誰か詳しい人アドバイスください。
>>794
onProgressChange の認識は合ってる。
サンプルコードには「jPlayer 1.1.1」とあるから、最新の 2.0.0 には対応していないのだろう。
古いバージョンで運用するか、コードを修正する必要があると思う。
onProgressChange の認識は合ってる。
サンプルコードには「jPlayer 1.1.1」とあるから、最新の 2.0.0 には対応していないのだろう。
古いバージョンで運用するか、コードを修正する必要があると思う。
JavaScriptを使用した連動プルダウンを作成しているのですが、
画面崩れの原因が特定できずに困っています。
リストから野菜を選択後、名前を指定した後にブラウザバックで画面が崩れます。
対象ブラウザはIEです。
ヒントになりそうな事でも構いませんので、ご示唆していただけないでしょうか。
ソースは以下にUpしました。
http://www.dotup.org/uploda/www.dotup.org1355275.txt.html
Pass:1234
画面崩れの原因が特定できずに困っています。
リストから野菜を選択後、名前を指定した後にブラウザバックで画面が崩れます。
対象ブラウザはIEです。
ヒントになりそうな事でも構いませんので、ご示唆していただけないでしょうか。
ソースは以下にUpしました。
http://www.dotup.org/uploda/www.dotup.org1355275.txt.html
Pass:1234
>>777
>「左は1引いて右は1足す」こんな感じで規則性を考えていけばいいんじゃないかと思う。
確かにそう考えた方がわかりやすいですね
上下も考えると上なら4引いて下なら4足す、で出来ますし
>複数マスをスライドさせる仕様
これがどこを指しているのかわからないのですが、ソースのどの辺りのことでしょうか?
>「左は1引いて右は1足す」こんな感じで規則性を考えていけばいいんじゃないかと思う。
確かにそう考えた方がわかりやすいですね
上下も考えると上なら4引いて下なら4足す、で出来ますし
>複数マスをスライドさせる仕様
これがどこを指しているのかわからないのですが、ソースのどの辺りのことでしょうか?
>>798
>上なら4引いて下なら4足す
だね。当たり前でつまらないかも知れないけど、まぁ付き合ってよ。(ツッコみどころは遠慮なくツッコむ)
ここで4がn * nのn(平方根)であることに注目してみる。左右の1は不変だけど
上下には定数ではなく変数を割り当てておけば使い回せる。あとは取り捨て条件を加え、有効数値をチョイスすればよい。
var n = Math.sqrt(panelIDCopy.length);
//iの隣接位置を配列で返す(不正方向 -1)
function fuga(i, n) {
var arr = [], l = n * n, a;
a = i - 1;
if (i % n !== 0) arr.push(a);
else arr.push(-1);
a = i + 1;
if (i % n !== n - 1) arr.push(a);
else arr.push(-1);
a = i - n;
if (a > -1) arr.push(a);
else arr.push(-1);
a = i + n;
if (a < l) arr.push(a);
else arr.push(-1);
return arr;
}
単調な書き方になってるけど、そこはヌルーの方向で。
返された配列から-1を除く数値を選んで保存。前回空マスだった位置を除外してもいい。
同時にpanelIDCopyの該当要素を入れ替えれば1局面進められる。
指定回数局面を進められるところまでは実装できそうかな?
>上なら4引いて下なら4足す
だね。当たり前でつまらないかも知れないけど、まぁ付き合ってよ。(ツッコみどころは遠慮なくツッコむ)
ここで4がn * nのn(平方根)であることに注目してみる。左右の1は不変だけど
上下には定数ではなく変数を割り当てておけば使い回せる。あとは取り捨て条件を加え、有効数値をチョイスすればよい。
var n = Math.sqrt(panelIDCopy.length);
//iの隣接位置を配列で返す(不正方向 -1)
function fuga(i, n) {
var arr = [], l = n * n, a;
a = i - 1;
if (i % n !== 0) arr.push(a);
else arr.push(-1);
a = i + 1;
if (i % n !== n - 1) arr.push(a);
else arr.push(-1);
a = i - n;
if (a > -1) arr.push(a);
else arr.push(-1);
a = i + n;
if (a < l) arr.push(a);
else arr.push(-1);
return arr;
}
単調な書き方になってるけど、そこはヌルーの方向で。
返された配列から-1を除く数値を選んで保存。前回空マスだった位置を除外してもいい。
同時にpanelIDCopyの該当要素を入れ替えれば1局面進められる。
指定回数局面を進められるところまでは実装できそうかな?



類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.87 + (1001) - [97%] - 2011/6/21 6:33
- + JavaScript の質問用スレッド vol.81 + (1001) - [97%] - 2010/12/10 20:01
- + JavaScript の質問用スレッド vol.88 + (1001) - [97%] - 2011/7/20 7:03
- + JavaScript の質問用スレッド vol.86 + (1001) - [97%] - 2011/5/27 21:50
- + JavaScript の質問用スレッド vol.85 + (1001) - [97%] - 2011/4/25 21:32
- + JavaScript の質問用スレッド vol.84 + (1001) - [97%] - 2011/3/30 7:32
- + JavaScript の質問用スレッド vol.83 + (1001) - [97%] - 2011/2/24 8:02
- + JavaScript の質問用スレッド vol.80 + (1001) - [97%] - 2010/11/9 2:17
- + JavaScript の質問用スレッド vol.89 + (1001) - [97%] - 2011/9/4 4:17
- + JavaScript の質問用スレッド vol.126 + (348) - [95%] - 2023/1/12 17:00
- + JavaScript の質問用スレッド vol.123 + (1002) - [95%] - 2015/4/27 23:30
- + JavaScript の質問用スレッド vol.126 + (952) - [95%] - 2015/11/18 13:15
- + JavaScript の質問用スレッド vol.127 + (160) - [95%] - 2021/7/16 9:30
- + JavaScript の質問用スレッド vol.127 + (1001) - [95%] - 2016/2/4 0:15
- + JavaScript の質問用スレッド vol.128 + (1001) - [95%] - 2016/2/26 6:45
- + JavaScript の質問用スレッド vol.112 + (1001) - [95%] - 2013/11/27 16:46
- + JavaScript の質問用スレッド vol.125 + (1001) - [95%] - 2015/10/7 17:45
トップメニューへ / →のくす牧場書庫について