クリック時にイベントリスナーの追加/削除を切り替えたいと思います。誰かが私のコードを改善する方法を指摘できますか?
Stackoverflow で多くの回答を読みましたが、役に立たなかったものはありません。
表示された数字にポインターを合わせると、センターキューブが回転して同じ数字が表示される学習ツールです。
ページが読み込まれると、イベント リスナーが中央のキューブに追加されます。小さな jQuery を作成して、クリックされたキューブにリスナーを追加し、ポインターが置かれている数字も表示するようにしました。
Chrome で動作し、Opera で動作します。FF はサルバドール・ダリと IE だと思います...当たり前!
ページの読み込み時に追加されるイベント リスナー
var thisCube = '.two';
var init = function() {
var box = document.querySelector(thisCube).children[0],
showPanelButtons = document.querySelectorAll('#hover-change li'),
panelClassName = 'show-front',
hover = function( event ){
box.removeClassName( panelClassName );
panelClassName = event.target.className;
box.addClassName( panelClassName );
};
for (var i=0, len = showPanelButtons.length; i < len; i++) {
showPanelButtons[i].addEventListener( 'mouseover', hover, false);
}
};
window.addEventListener( 'DOMContentLoaded', init, false);
新しいリスナーを追加するjQuery
$('.one, .three, .four, .five, .six, .seven, .eight, .nine').click(function() {
thisCube = $(this).data('id');
init();
});
イベントリスナーを正しく追加していないと確信しているため、他のソリューションについて読んだときに問題が発生しています。
関連するすべてのコードを投稿するという新しいルールにより、この投稿が大きくなりすぎるため、この投稿用に jsfiddle を作成しませんでした。jsfiddle で見たい人は、質問してください。
- 編集 -
このコードを追加してクラスを追加しようとしましたrotate
が、要素にそのクラスが既にある場合はrotate
、イベントリスナーを削除して削除します。イベントリスナーは削除されません。
$('.one, .two, .three, .four, .five, .six, .seven, .eight, .nine').on('click', function() {
if($(this).hasClass('rotate'))
{
$(this).removeClass('rotate');
alert('remove ' + $(this).attr("class"));
$(this).off('click');
} else {
$(this).addClass('rotate');
alert('add ' + $(this).attr("class"));
thisCube = $(this).data('id');
init();
}
});
-- 私の解決策 --
$('.container').click(function(){
$(this).toggleClass('rotate');
});
$('#hover-change').children().hover(function(){
$('.rotate > #cube').removeClass();
$('.rotate > #cube').addClass($(this).attr('class'));
},
function(){});