2009-12-03 102 views
7

我有許多表單域跨越頁面摺疊。當按下「tab」鍵來遍歷每個輸入/選擇字段時,它位於頁面底部的下一個字段。焦點或標籤鍵上的輸入按下,移動到屏幕中心

我的一些領域有工具提示,驗證響應和自動建議框出現在字段下方。當切換到該字段時,您無法在頁面摺疊下看到這些元素。

是否有一個javascript或jQuery腳本,可以垂直居中焦點輸入/ textarea/select/button字段而不是對齊到底部的屏幕?

+2

我不知道別人一樣,但是屏幕位置的變化我每次更改焦點時會讓我發瘋* *。我希望只有當所需元素之一不完全位於視口內時纔會滾動偏移量。 – 2009-12-03 13:45:00

+0

我的答案也適合你嗎?如果/爲什麼不能滿足你的問題,請提供一個評論 – jitter 2009-12-04 19:21:01

+0

@Pekka我同意這是一個奇特的行爲,並會謹慎使用,因爲它會很煩人。試圖想出一個合適的解決方案 - 也許只有當「標籤」不在焦點上或者可以使幻燈片動畫化時,纔將焦點放在中間。否則,還有哪些其他方法可以保持從頁面摺疊填充的焦點輸入? – 2009-12-07 03:19:38

回答

14

您可以綁定到焦點事件,然後計算字段的偏移量並將其居中在屏幕上。

$(':input').focus(function(){ 
    var center = $(window).height()/2; 
    var top = $(this).offset().top ; 
    if (top > center){ 
     $(window).scrollTop(top-center); 
    } 
}); 
+0

我認爲這是對我的問題最簡單的解決方案,但正如所評論的那樣,該操作不是標準操作,並且在大多數情況下可能是令人討厭的操作 - 需要稍微重新定義該問題才能對此解決方案有實際的使用。 – 2009-12-07 00:54:36

+0

做了一些檢查,它得到的值正確,但窗口或文檔scrollTop()不想玩球...我已經改變了這個div id(#div).scrollTop幾乎這樣做,但不是'這與我所期望的身體或窗戶一致。 – 2009-12-07 03:17:18

+0

Firefox和/或Chrome有時會出現問題。你可以試試'$('html,body')。animate({scrollTop:top - center},300);'這對我有用 – schemar 2015-04-10 14:43:08

1

最簡單的事情將是包括jQuery ScrollTo pluginjQuery Viewport插件。

然後將每個輸入+相關的其他元素(驗證響應,....)包裝在一個div中。

重點檢查div是否完全可見,如果不使用scrollTo。完成。

當然這有點膨脹,但如果你可以忍受2個更多的依賴和一個額外的〜4kb這應該工作,而不需要自己做計算。

1

從上面平滑滾動效果

$(':input').focus(function() { 
     var center = $(window).height()/2; 
     var top = $(this).offset().top; 
     if (top > center) { 
      $('html, body').animate({ scrollTop: top - center }, 'fast');    
     } 
    }); 
+1

太棒了!多謝,夥計。 – 2017-04-06 00:31:17

相關問題