このコード ブロックは思いどおりに動作しますが、それを関数に変換してあちこちで再利用したいと考えています。以下は、関数への変換が続く作業コードです。しかし、私は何か間違ったことをしているので、うまくいきません。
働く
$('div.destination a').click(function(){
$('html, body').stop(true,false).animate({
scrollLeft: $( $.attr(this, 'href') ).offset().left
- 1/2 * $(window).width()
+ 1/2 * $( $.attr(this, 'href') ).width()
},
{
duration: (Math.abs( $( $.attr(this, 'href') ).offset().left
- $(document).scrollLeft() ))
/ 1000
/ spaceScaleFactor
/ travelRate,
easing: 'linear',
queue: false
});
$('div.destination').prev().children().children().text(($.attr(this, 'href')).substring(1));
return false;
});
関数とクリック時の呼び出し (動作しない)
// Make the function and replace 'this' with 'x'
function travelToDestination (x) {
$('html, body').stop(true,false).animate({
scrollLeft: $( $.attr(x, 'href') ).offset().left
- 1/2 * $(window).width()
+ 1/2 * $( $.attr(x, 'href') ).width()
},
{
duration: (Math.abs( $( $.attr(x, 'href') ).offset().left
- $(document).scrollLeft() ))
/ 1000
/ spaceScaleFactor
/ travelRate,
easing: 'linear',
queue: false
});
$('div.destination').prev().children().children().text(($.attr(x, 'href')).substring(1));
return false;
});
}
//call the function on click using '$(this)' as a parameter
$('div.destination a').click(function(){
travelToDestination($(this));
}
私が言ったように、コードはそのままで問題なく動作します。関数にしようとしたときに何が間違っているのか知りたいだけです。'this' が '$(this)' と等しくない可能性があります。ありがとう!