2013-07-22 39 views
0

我想設計一個滑塊。這是代碼。檢查控制檯日誌中的top變量的輸出。爲什麼它是一個對象而不是價值?! http://jsfiddle.net/YtTFb/奇怪的結果加起來兩個變量

<div class="filter_opt_slider"> 
    <div></div> 
</div> 

-

.filter_opt_slider{ 
    position: relative; 
    width: 3px; 
    margin:10px; 
    height: 150px; 
    border: 1px #E0E0E0 solid; 
    background: #FFF; 
    cursor: default; 
} 

-

$(document).ready(function(){ 

$(".filter_opt_slider div").on("mousedown",function(event){ 
    dragged=$(this); 
    minY=parseInt(dragged.parent().offset().top); 
    maxY=parseInt(dragged.parent().css("height"))+minY; 
    $(document).mousemove(function(event) { 

     if(event.pageY<=maxY && event.pageY>=minY){ 
      top=event.pageY-minY; 

      console.log("minY: "+minY); 
      console.log("pageY: "+event.pageY); 
      console.log("top: "+top); 
      console.log("<------------->") 

      dragged.css({top:top})     
     } 

    }); 
    $(document).on("mouseup",function(){ 
     $(document).unbind("mousemove") 
     .unbind("mouseup"); 
    }) 
}) 

}) 
+0

我沒有看到「top」的聲明。 – Virus721

+0

'top'是全局窗口對象的屬性 - 選擇一個不同的變量名稱。 https://developer.mozilla.org/en-US/docs/Web/API/window.top – jbabey

+0

建議不要問題本身,而是整個邏輯 - 我不確定這是否是一種好方法實現拖放。我認爲你應該使用全局變量,比如「isMousButtonClicked」。在mousedown上將其設置爲true,並在mouseup上將其設置爲false。當你處理mousemove時,只需檢查變量是否爲真。 –

回答

0

這是因爲頂部已經被聲明爲window屬性(默認情況下,作爲@RP提到它)

要聲明一個變量函數內部,使用關鍵字var

var top=event.pageY-minY; 

頂部將在函數的範圍內聲明,所以它們不會有任何衝突。

更新JSFIDDLE:http://jsfiddle.net/edi9999/YtTFb/2/

0

Top屬性返回當前窗口的最頂層瀏覽器窗口。這就是爲什麼它返回對象:http://www.w3schools.com/jsref/prop_win_top.asp

基本上你沒有聲明任何變量:minY,maxY和top。

因此,在他們面前添加var或在ready函數之前聲明它們。