zoukankan      html  css  js  c++  java
  • dom元素的滚动(如何实现点击展开更多功能)

    滚动

    窗口的尺寸和滚动

    窗口可视高度和宽度

    document.documentElement对应的标签是html

    document.documentElement.clientHeight()
    document.documentElement.clientwidth()
    
    alert( window.innerWidth ); // 整个窗口的宽度
    alert( document.documentElement.clientWidth ); // 窗口减去滚动条的宽度
    

    一般使用去除掉滚动条的document.documentElement.clientwidth()

    兼容性更好的获取当前文档/页面水平方向已滚动的像素值,使用

    console.log(window.pageXOffset)
    console.log(window.pageYOffset)
    

    如何将窗口按照我们想的偏移量滚动呢?

    Window.scrollBy(x,y)
    
    // 方法 scrollBy(x,y) 滚动页面至相对于现在位置的 (x, y) 位置。例如,scrollBy(0,10) 页面向下滚动 10px
    

    滚动到窗口的某个坐标

    window.scrollTo(pageX,pageY)
    
    // 方法 scrollTo(pageX,pageY) 滚动页面至相对于文档的左上角的 (pageX, pageY) 位置
    // 就好像设置 scrollLeft/scrollTop,回到顶部, 我们可以用 scrollTo(0,0)。
    

    当前元素滚动到窗口的顶部或者底部

            btn3.addEventListener('click',function() {
                // 当前元素跳转到窗口顶部
                this.scrollIntoView(top)
                top = !top
            })
            btn4.addEventListener('click',function() {
                // 当前元素跳转到窗口顶部
                this.scrollIntoView(top)
                top = !top
            })
    

    禁止滚动

    overflow: hidden;
    

    这个方法的缺点是会使滚动条消失。如果它占用了一些空间,它原本占用的空间就会空出来,使元素本身的内容“跳”出来填满空出来的空间里。

    这看起来就有点怪怪的。但我们可以解决这个问题:通过对比冻结前后的clientWidth如果在 clientWidth 增加(滚动条消失)时,将 padding 添加到 document.body 取代滚动条来保持内容宽度不变

    元素的滚动和尺寸

    • offsetleftoffsetTopoffsetParent

      offsetParent是最近的祖先元素,这里的祖先元素是指以下几种情况:

      1. CSS 定位(positionabsoluterelativefixed),
      2. 或者 <td><th><table>
      3. 或者 <body>

      如果第一个外层没有符合以上情况,不称为有效祖先元素,继续往上寻找

      offsetTopoffsetLeft 是相对于其第一个祖先元素的x/y坐标

      当自身属于以下情况的时候offsetParentnull

      1. 未显示的元素(display:none 或者不在文档中)。
      2. <body><html>
      3. position:fixed 的元素。
    • offsetWidthoffsetHeight

      • offsetWidth = 390 — 外部宽度,计算方法是内部 css 宽度(300px)加上内填充(2 * 20px)和边框宽度(2 * 25px)。
      • offsetHeight = 290 — 外部高度。
    • clientLeftclientTop

      元素的边框宽度和高度

    • clientHeightclientWidth

      测算出可见区域的内边距和内容宽度(不会将滚动条计算在内),如果没有内边距内容区域就等于clent...的值

    • scrollWidthscrollHeight包括可见区域和滚动的隐藏的高度或者宽度

      实现点击展开全文的效果

      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>Title</title>
          <style>
              .wrap {
                  position: relative;
                   300px;
                  border: 1px solid red;
              }
              .content {
                  height: 150px;
                   100%;
                  overflow: hidden;
              }
      
              .expand {
                  position: absolute;
                   100%;
                  top: 152px;
                  text-align: center;
              }
              .expand p {
                  cursor: pointer;
              }
          </style>
      </head>
      <body>
      <div class="wrap">
          <div class="content">
              <p>
                  静夜思
                  床前明月光,
                  疑是地上霜。
                  举头望明月,
                  低头思故乡。
              </p>
              <p>
                  国风·周南·关雎
                  先秦:佚名
      
                  关关雎鸠,在河之洲。窈窕淑女,君子好逑。
                  参差荇菜,左右流之。窈窕淑女,寤寐求之。
                  求之不得,寤寐思服。悠哉悠哉,辗转反侧。
                  参差荇菜,左右采之。窈窕淑女,琴瑟友之。
                  参差荇菜,左右芼之。窈窕淑女,钟鼓乐之。
              </p>
              <p>
                  上元夜六首·其一
                  唐代:崔液
      
                  玉漏银壶且莫催,铁关金锁彻明开。
                  谁家见月能闲坐?何处闻灯不看来?
              </p>
          </div>
          <div class="expand">
              <p>点击展开全文</p>
          </div>
      </div>
      
      </body>
      <script>
          var $ = function (elem) {
              return document.querySelector(elem)
          }
          var content = $('.content')
          var expand = $('.expand')
      
          expand.addEventListener('click',function () {
              console.log(content.scrollHeight)
              content.style.height = `${content.scrollHeight}px`
              expand.style.display = 'none'
          })
      
      </script>
      </html>
      
    • scrollLeftscrollTop

      元素隐藏部分的高度和宽度,滚了多少宽度和高度,它是可以直接被修改的

      修改元素的这两个属性可以使得浏览器滚动元素

      scrollTop 设置为0 和Infinity使得元素分别滚动到顶部和底部

  • 相关阅读:
    ASP.NET上传文件的三种基本方法
    实例分析 equals 和 ==
    如何保证Web Service的安全
    Winform动态显示图片,数据流方式
    C# 文件保存到数据库中或者从数据库中读取文件
    简说Session
    NotifyIcon的简单使用
    c# Invoke和BeginInvoke 区别
    DataGridView 的 CurrentCellDirtyStateChanged事件用法
    十种发送邮件的方式
  • 原文地址:https://www.cnblogs.com/daixixi/p/11315804.html
Copyright © 2011-2022 走看看