js學習總結----瀏覽器滾動條捲去的高度scrolltop

来源:http://www.cnblogs.com/diasa-fly/archive/2017/07/06/7124105.html
-Advertisement-
Play Games

1、之前我們學習的JS盒子模型中:client系列/offset系列/scrollWidth/scrollHeight都是“只讀”的屬性-> 只能通過屬性獲取值,不能通過屬性修改元素的樣式 2、scrollTop/scrollLeft:滾動條捲去的高度/寬度(這兩個屬性是唯一“可讀寫”的屬性) bo ...


1、之前我們學習的JS盒子模型中:client系列/offset系列/scrollWidth/scrollHeight都是“只讀”的屬性-> 只能通過屬性獲取值,不能通過屬性修改元素的樣式

2、scrollTop/scrollLeft:滾動條捲去的高度/寬度(這兩個屬性是唯一“可讀寫”的屬性)

  box.scrollTop = 0 // 直接回到容器的頂部

  我們的scrollTop的值是存在邊界值(最大和最小值),我們設置的值比最小值小或者比最大值大都沒用,起到效果的依然是邊界的值

  [最小值是零]

  box.scrollTop = -1000;// 直接回到了容器的頂部,沒有超出

  console.log(box.scrollTop) //0

  [最大值 = 真實的高度-當前容器一屏幕的高度]

  var maxTop = box.scrollHeight - box.clientHeight;

  scrollTop最經典的應用就是回到頂部,下麵代碼如下:   

1、之前我們學習的JS盒子模型中:client系列/offset系列/scrollWidth/scrollHeight都是“只讀”的屬性-> 只能通過屬性獲取值,不能通過屬性修改元素的樣式

2、scrollTop/scrollLeft:滾動條捲去的高度/寬度(這兩個屬性是唯一“可讀寫”的屬性)

  box.scrollTop = 0 // 直接回到容器的頂部

  我們的scrollTop的值是存在邊界值(最大和最小值),我們設置的值比最小值小或者比最大值大都沒用,起到效果的依然是邊界的值

  [最小值是零]

  box.scrollTop = -1000;// 直接回到了容器的頂部,沒有超出

  console.log(box.scrollTop) //0

  [最大值 = 真實的高度-當前容器一屏幕的高度]

  var maxTop = box.scrollHeight - box.clientHeight;

  scrollTop最經典的應用就是回到頂部,下麵代碼如下: 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
            padding:0;
            margin:0;
        }
        html,body{
            width:100%;
            height:1000%;
            background:#11c900;
        }
        a{
            text-decoration: none;
            color:#000;

        }
    </style>
</head>
<body>
<a href="javascript:" id="goLink">GO</a>
//A標簽本身是跳轉頁面的,把跳轉的地址寫在href這個屬性中
/*
    1)、不寫值的話是刷新本頁面
    2)、寫的如果是#target,是錨點定位,定位到當前頁面Id為target這個位置
    3)、“javascript:”這樣寫是取消A標簽預設跳轉的行為
*/
<script>
    var goLink =document.getElementById("goLink");
    /*
        回到頂部:
        總時間(duration):500ms 
        頻率(interval):多長時間走一步 10ms 
        總距離(target): 當前的位置(當前的scrollTop)- 目標的位置(0)
        步長(step):每一次走得距離   (target/duration)*interval 
    */


    /*
        這個代碼是可以優化的:
        開始GO按鈕是不顯示的,當滾動到一定的距離之後,才顯示,反之隱藏  只要瀏覽器的滾動條在滾動,我們就需要判斷GO顯示還是隱藏
        瀏覽器的滾動條滾動:拖動滾動條、滑鼠滾輪、鍵盤上下鍵、pageDown/pageUp鍵、點擊滾動條的空白區域或者箭頭(自主操作的行為)...我們還可以通過js控制scrollTop的值來實現滾動條的滾動
    */

    window.onscroll = function computedDisplay(){//不管怎麼操作的,只要滾動條動了就會觸發這個行為
        var curTop = document.documentElement.scrollTop || document.body.scrollTop;
        var curHeight = document.documentElement.clientHeight || document.body.clientHeight;
        if(curTop>=clientHeight){
            goLink.style.display = "block"
        }else{
            goLink.style.display = "none"
        }

    }
    goLink.onclick = function(){
        this.style.display = "none";//並不會消失,因為我們滾動條往回走的時候 又會觸發onscroll事件,又會進行顯示
        window.onscroll = null;
        var duration = 500,interval=10,target=document.documentElement.scrollTop || document.body.scrollTop;
        var step = (target/duration)*interval;

        var timer = window.setInterval(function(){
            var curTop = document.documentElement.scrollTop || document.body.scrollTop;
            if(curTop===0){
                window.clearInterval(timer);
                window.onscroll = computedDisplay;
                //當動畫結束後把對應的方法重新綁定給window.onscroll
                return;
            }
            curTop-=step
            document.documentElement.scrollTop = curTop;
            document.body.scrollTop = curTop;
        },interval)
        // document.documentElement.scrollTop = 0;
        // document.body.scrollTop = 0;
    }
</script>
</body>
</html>
 

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • <script type="text/javascript" src="demo_defer.js" defer="defer"></script> 立即下載,但延遲執行。即腳本將在頁面完成解析時執行。 註:defer 屬性僅適用於外部腳本,也就是在使用 src 屬性時。 <script type= ...
  • 使用H5的全局屬性contenteditable可以讓DOM元素及其子元素變的可編輯 樣式代碼 html, body { overflow: hidden; width: 100%; height: 100%; } * { margin: 0; padding: 0; } #editor { wid ...
  • 寫死鏈接:<a href="javascript:void(0)" onclick=""></a> 在有onclick()方法在a標簽中時不能<a href="" onclick=""></a> ;href一定要寫死空連接,否則在onclick時間上提交ajax會重覆刷新。導致無法提交和報錯排除。 ...
  • 在React和Vue推進下,現在很多人都在使用webpack作為自動化構建工具,但其實在很多時候我們並不是一定需要用到它,gulp這樣的輕量級構建工具就足夠了。 最近一段時間不是太忙,所以就寫了三份配置,用在不同的情況下。 這篇文章介紹第一份配置,也是最簡單的一份。 這份配置我把它稱作demo測試配 ...
  • 1.ajaxfileupload 上傳時會出現如下問題: 2. 網上有很多的解決辦法,在這裡,我又發現了一種,可能你的錯誤會是這個原因引起的 原因是 : 你在一般處理程式中沒有返回前臺需要的數據格式字元串 3.下麵給出一個例子: 1 前臺: 2 <style type="text/css"> 3 . ...
  • 1.將時間戳轉換成時間 var formatDate = function(d) { var now = new Date(d); var year = now.getFullYear(); var month = now.getMonth() + 1; var date = now.getDate ...
  • 做互聯網產品的小伙伴一定不會對“原型”這個詞感到陌生。它就像“用戶體驗”一樣經常被各類人掛在嘴邊。原型是一種讓用戶提前體驗產品、交流設計構想、展示覆雜系統的方式。就本質而言,原型是一種溝通工具。在這裡為大家介紹最常用的6種原型圖文件格式以及各自的優缺點。 一、Mockplus的原型圖格式(.mp) ...
  • 閑言碎語不多說,直接上代碼,轉載請備註來源地,代碼自己看自己悟。 圖片在瀏覽器視窗水平居中展示(圖片尺寸不限制) ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...