1

誰かが私のためにこの行をわかりやすく説明できますか?
これはjavascriptであり、正常に機能します。コードの背後にある正確なロジックがわかりません。たぶん、コードをいくつかの行に分割するか、「比較」のためにc#またはdelphiで記述すると役立つでしょう。

(私はここからそれを手に入れました:http://www.learningjquery.com/2009/02/slide-elements-in-different-directions

どうもありがとう!

$('#inlay-container').animate(
{
    left: parseInt($('#container').css('left'),10) == 0 ? +$('#container').outerWidth() : 0
}...
4

4 に答える 4

2

これは基本的に単なる三項式です。フォームは(bool) ? (true val) : (false val). それが行っていることは#inlay-container、左の値をどちらかに設定するか、+$('#container').outerWidth()または左の値を 0と比較している0ステートメントの戻り値に応じてアニメーション化することです。parseInt($('#container').css('left'),10) == 0#container

于 2012-06-03T17:22:08.117 に答える
1

平易な言葉で:

if #container's css left property is 0

   animate #inlay-container to right equal to the outer width of #container
else

   animate #inlay-container to left 0 from it's current position

そのコードを詳しく説明できます

var moveLeft;
if(parseInt($('#container').css('left'),10) == 0)
  moveLeft = $('#container').outerWidth();
else
  moveLeft = 0;
$('#inlay-container').animate(
{
    left: moveLeft
}

それが使用しているのは、そうでない場合の代入の省略形です。ternary operatorのように呼ばれています

val =  condition? this : that

Javascript 三項演算子http://msdn.microsoft.com/en-us/library/be21c7hw(v=vs.94).aspxを使用した演算子の優先順位の詳細を読む

于 2012-06-03T17:21:34.497 に答える
1
$('#inlay-container').animate(
{
    left: parseInt($('#container').css('left'),10) == 0 ? + $('#container').outerWidth() : 0
}

$('#container').css('left')によって設定されたleft位置を取得します。#containerCSS

parseInt($('#container').css('left'),10)を整数に変換しleftます。

次に、三項演算子について知っておく必要があります --- ? --- : ---

一般的な if-else:

if(something) {
  alert('done');
} else {
  alert('not done');
}

3 進数では、次のように記述します。

something ? alert('done') : alert('not done');

だから?行動しif:行動するelse

$('#container').outerWidth()とを#container含む幅を取得します。paddingborder

したがって、

 parseInt($('#container').css('left'),10) == 0  ?  // if left of #container is 0

                   + $('#container').outerWidth() // then left increase to outerwidth

                    : 0                             // else left will set to 0

したがって、上記の条件は次のようにも記述できます。

if($('#container').css('left'),10) == 0) {
   left = $('#container').outerWidth();
} else {
   left = 0;
}

最後に、ステートメント全体は次のように記述できます。

var left = null;
if($('#container').css('left'),10) == 0) {
   left = $('#container').outerWidth();
} else {
   left = 0;
}

$('#inlay-container').animate({
    left: left
});

関連参照:

于 2012-06-03T17:26:49.773 に答える
1

それが意味することは

container幅をinlay-containerleft場合はとして使用し、そうでない場合は幅を使用します。containerleft0inlay-containerleft0


問題:「謎解き」。

parseInt($('#container').css('left'),10) == 0 ?  //if its left is 0
    +$('#container').outerWidth() :              //then use container's width
    0                                            //else use 0

これが三項演算(または三項式)と呼ばれるものです。
続きを読む:三項演算 (ウィキペディアの検索は常に便利です!)


構文:

(condition) ? ture : false ;

//which is the same as:
if(condition){
    true
}else{
    false
}

ただし、それらの主な違いは、三項式をinlineで使用できることです。

var txt = a>1 ? a : 0;  //Yup!

var txt = 0;            //Too long.
if(a>1){
    txt = a;
}

無関係:
実際、あなたのコードは少し長い IMO です。さらに短くすることができます:

left: +$('#container').css('left')?0:+$('#container').outerWidth()
于 2012-06-03T17:23:23.130 に答える