整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          js組件-可拖動的div

          幾天用js實現了鼠標拖動div的功能,但是用起來不是那么便捷,于是想著把這個功能做成一個組件,使用的時候直接引入,不用再寫那么多冗余代碼了。

          想要實現的效果

          • 只要把div注冊到該組件,目標div就都能隨意拖動
          • 可設置div能夠拖動的范圍

          實現分析


          js組件的基本寫法和div拖動的邏輯就不再贅述了,前面文章已經說過了,可點擊下面鏈接查看

          js實現div可拖動

          js組件的基本寫法

          在這里主要分析下怎么限制拖動的范圍,先看下圖:


          限制范圍


          拖動時有四種邊緣情況,即圖中的1、2、3、4,我們一一來看

          1. 當div拖動到位置1時,我你們再往左拖動,都應該失效,即拖動div的left 始終等于外層div的left值
          2. 當div拖動到位置2時,我們再往上拖動,都應該無效,即拖動div的top始終等于外層div的top值
          3. 當div拖動到位置3時,我們再往右拖動,都應該無效,即拖動div的left始終等于外層div的left加上外層div的寬度,然后再減去拖動div的寬度
          4. 當div拖動到位置4時,我們再往下拖動,都應該無效,即拖動div的top始終等于外層div的top加上外層div的高度然后減去拖動div的高度

          理論知識弄明白了,我們先看下實現的效果吧


          有范圍的拖動

          下面貼上實現的代碼

          html中引入組件,并初始化

          html中引入組件

          具體的js組件實現


          js拖動組件1

          js拖動組件2

          html頁面,顯示的內容太多,會影響用戶體驗,如果有一些,點擊才出現的內容,就可以減少內容的干擾。使用jquery就可以很快的實現。


          例子

          <!DOCTYPE html>
          <html lang="en">
          <head>
           <meta charset="UTF-8">
           <meta name="viewport" content="width=device-width, initial-scale=1.0">
           <meta http-equiv="X-UA-Compatible" content="ie=edge">
           <title>div隱藏測試</title>
           <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.0.js">
           </script>
          </head>
          <body>
           <button id="controller">隱藏或者顯示</button>
           <div id="contents" style="display: none;">
           <p>div的內容</p>
           </div>
           <script>
           $("#controller").click(function () {
           if ($("#contents").is(":hidden")) {
           $("#contents").show()
           } else {
           $("#contents").hide()
           }
           })
           </script>
          </body>
          </html>
          


          jqyery操作

          $("#contents").is(":hidden") 可以判斷是否是隱藏

          $("#contents").show() 表示display:block,

          $("#contents").hide() 表示display:none;

          操作元素的屬性

          $("#contents").attr("style","display:none;"); //隱藏div

          $("#contents").attr("style","display:block;"); //顯示div

          也可以操作css屬性

          $("#contents").css("display","none"); //隱藏div

          $("#contents").css("display","block"); //顯示div

          也可以直接使用toggle轉換開關實現

          $("#contents").toggle()

          有時候,我們想閱讀頁面中某段精彩的內容,但由于頁面太長,用戶需要自己滾動頁面,查找起來非常麻煩 ,很容易讓人失去繼續往下閱讀的興趣。這樣體驗非常不好,所以我們可以想辦法 實現點擊某段文字或者圖片跳轉到頁面指定位置,方便用戶的閱讀。

          一、 純 html 實現

          1. 利用 id 為標記的錨點

          這里作為錨點的標簽可以是任意元素。

            <a href="#aa">跳轉到 id 為 aa 標記的錨點</a>
            <p>-------------分隔線-------------</p>
            <div id="aa">a</div>
          

          2. 利用 a 標簽的 name 屬性作為錨點

          這里作為錨點的標簽只能是 a 標簽。

            <a href="#bb" >跳轉到 name 為 bb 的 a 標簽錨點</a>
            <p>-------------分隔線-------------</p>
            <a name="bb">name 為 bb 的 a 標簽的錨點</a>
            <div id="abb">bbb</div>
          

          注意:當以 ' a 標簽 name 屬性作為錨點 ' 和 ' 利用 id 為標記的錨點 ' 同時出現(即以 name 為錨點和以 id 為錨點名字相同時),會將后者作為錨點。

          二、 js 實現

          1. 利用 scrollTo()

          window.scrollTo 滾動到文檔中的某個坐標。可提供滑動效果,想具體了解 scrollTo() 可以看看 MDN 中的介紹。

          話不多說,看下面代碼

          「html 部分」:

            <a id="linkc">平滑滾動到 c</a>
            <p>-------------分隔線-------------</p>
            <div id="cc">c</div>
          

          「js 部分」:

            var linkc = document.querySelector('#linkc')
            var cc = document.querySelector('#cc')
          
            function to(toEl) {
              // toEl 為指定跳轉到該位置的DOM節點
              let bridge = toEl;
              let body = document.body;
              let height = 0;
              
              // 計算該 DOM 節點到 body 頂部距離
              do {
                height += bridge.offsetTop;
                bridge = bridge.offsetParent;
              } while (bridge !== body)
              
              // 滾動到指定位置
              window.scrollTo({
                top: height,
                behavior: 'smooth'
              })
            }
          
            linkc.addEventListener('click', function () {
              to(cc)
            });
          

          2. 利用 scrollIntoView()

          Element.scrollIntoView() 方法讓當前的元素滾動到瀏覽器窗口的可視區域內。想具體了解 scrollIntoView() 可以看看 MDN 中的介紹。

          下面也直接上代碼

          「html 部分」:

            <a onclick="goTo()">利用 scrollIntoView 跳轉到 d</a>
            <p>-------------分隔線-------------</p>
            <div id="dd">ddd</div>
          

          「js 部分」:

            var dd = document.querySelector('#dd')
          
            function goTo(){
              dd.scrollIntoView()
            }
          

          注意:此功能某些瀏覽器尚在開發中,請參考瀏覽器兼容性表格以得到在不同瀏覽器中適合使用的前綴。由于該功能對應的標準文檔可能被重新修訂,所以在未來版本的瀏覽器中該功能的語法和行為可能隨之改變。

          下面為了方便看效果,把上面的代碼整理在一起。

          <!DOCTYPE html>
          <html lang="en">
          <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>Document</title>
            <style>
              div {
                width: 600px;
                height: 300px;
                background-color: pink;
              }
            </style>
          </head>
          <body>
            <a href="#aa">跳轉到以 id 為 aa 標記的錨點 a</a>
            <p>-------------分隔線-------------</p>
            <a name="aa">hhh</a>
            <div id="aa">aa</div>
            <a href="#bb" >跳轉到 name 為 bb 的 a 標簽錨點</a>
            <p>-------------分隔線-------------</p>
            <a name="bb">name 為 bb 的 a 標簽的錨點</a>
            <p>-------------分隔線-------------</p>
            <div>bb</div>
            <a id="linkc">平滑滾動到 c</a>
            <p>-------------分隔線-------------</p>
            <div id="cc">cc</div>
            <a onclick="goTo()">利用 scrollIntoView 跳轉到 d</a>
            <p>-------------分隔線-------------</p>
            <div id="dd">dd</div>
            <p>-------------分隔線-------------</p>
            <div></div>
          </body>
          <script>
            var cc = document.querySelector('#cc')
            var linkc = document.querySelector('#linkc')
          
            function to(toEl) {
              //ele為指定跳轉到該位置的DOM節點
              let bridge = toEl;
              let body = document.body;
              let height = 0;
              do {
                height += bridge.offsetTop;
                bridge = bridge.offsetParent;
              } while (bridge !== body)
          
              console.log(height)
              window.scrollTo({
                top: height,
                behavior: 'smooth'
              })
            }
          
            linkc.addEventListener('click', function () {
              to(cc)
            });
          
          </script>
          <script>
            var dd = document.querySelector('#dd')
          
            function goTo(){
              dd.scrollIntoView()
            }
          </script>
          </html>
          

          效果圖:


          主站蜘蛛池模板: 3d动漫精品啪啪一区二区中| 国产一区二区三区高清在线观看 | 亚洲毛片不卡av在线播放一区| 嫩B人妻精品一区二区三区| 一区二区三区午夜视频| 精品一区二区三区电影| 麻豆一区二区99久久久久| 青娱乐国产官网极品一区| 国产精品一级香蕉一区| 日韩AV无码一区二区三区不卡毛片 | 福利一区在线视频| 中文字幕AV一区二区三区 | 精品人妻无码一区二区三区蜜桃一 | 人妻少妇久久中文字幕一区二区 | 精品国产一区二区三区久久影院 | 国产日本亚洲一区二区三区| 一区二区三区免费视频网站| 日韩在线视频一区| 99无码人妻一区二区三区免费| 激情内射亚洲一区二区三区爱妻| 色欲AV蜜桃一区二区三| 99精品国产一区二区三区2021 | 亚洲AV本道一区二区三区四区| 蜜桃无码AV一区二区| 日韩精品区一区二区三VR| 国产成人一区二区在线不卡| 精品人妻系列无码一区二区三区 | 亚洲一区二区三区首页| 亚洲一区二区三区在线观看蜜桃| 精品在线一区二区| 亚洲日韩精品国产一区二区三区 | 日本精品一区二区三区在线视频一 | 久久国产高清一区二区三区| 91福利国产在线观一区二区| 中文字幕一区二区三区精华液 | 亚洲爆乳精品无码一区二区| 一区二区不卡视频在线观看| 无码人妻一区二区三区一| 国产美女精品一区二区三区| 亚洲一区二区三区在线观看网站| 日韩国产免费一区二区三区|