整合營銷服務商

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

          免費咨詢熱線:

          CSS篇-讓頁面平滑滾動

          看個錨點定位的例子

          發現頁面唰的一些就到頂部了,快到我們懵逼了。。。

          開始解決

          scroll-behavior

          CSS屬性 scroll-behavior 為一個滾動框指定滾動行為,其他任何的滾動,例如那些由于用戶行為而產生的滾動,不受這個屬性的影響。在根元素中指定這個屬性時,它反而適用于視窗。

          scroll-behavior:smooth 寫在滾動容器元素上,可以讓容器的滾動變得平滑。

          在網頁默認滾動是在<html>標簽上,移動端大多數在<body>標簽上。

          我們可以這樣加:

          html, 
          body { scroll-behavior:smooth; }
          

          加了以后的效果如下:

          這是錄制的GIF圖,效果沒那么好。 大家可以動手試一下,滑動體驗非常不錯。

          缺點

          兼容性不夠好

          當然我們可以通過js來做個類似

          Element.scrollIntoView() 方法

          DOM元素的scrollIntoView() 方法讓當前的元素滾動到瀏覽器窗口的可視區域內,通過觸發滾動容器的定位實現。

          DOM元素的scrollIntoView()方法 是原生JS 兼容到IE6,兼容性非常好。

          參數如下

          {
           behavior: "auto" | "instant" | "smooth", // 默認 auto
           block: "start" | "center" | "end" | "nearest", // 默認 center
           inline: "start" | "center" | "end" | "nearest", // 默認 nearest
          }
          

          解釋一下這三個參數:

          1. behavior 表示滾動方式。auto 表示使用當前元素的 scroll-behavior 樣式。instant 和 smooth 表示 直接滾到底 和 使用平滑滾動。
          2. block 表示塊級元素排列方向要滾動到的位置。對于默認的 writing-mode: horizontal-tb 來說,就是豎直方向。start 表示將視口的頂部和元素頂部對齊;center 表示將視口的中間和元素的中間對齊;end 表示將視口的底部和元素底部對齊;nearest 表示就近對齊。
          3. inline 表示行內元素排列方向要滾動到的位置。對于默認的 writing-mode: horizontal-tb 來說,就是水平方向。其值與 block 類似。

          用法:

          html:

          <div class="wrap">
           <div onClick="onScrollIntoView()">點擊讓黑色塊到頂部</div>
           <ul class="body">
           <li>1</li>
           <li>2</li>
           <li id="box">我是黑色</li>
           <li>3</li>
           <li>4</li>
           </ul>
          </div>
          

          js:

          function onScrollIntoView () {
           var element = document.getElementById("box");
           element.scrollIntoView({behavior: "smooth"});
          }
          

          效果:

          這回大家再也不用害怕做錨點定位啦。

          最后我們在說一個關于頁面滾動問題吧,那就是 返回頂部 功能實現

          返回頂部 功能實現

          我們常用定時器 setInterval 來不斷減去高度。

          如:當前距離頂部 1000, 我們每10毫秒減50,

          var timer = setInterval(function() { // 定時器 每10毫秒執行一次
           // 頂部距離 document.body.scrollTop = 1000 
           var speed = 50 // 返回頂部速度 
           document.body.scrollTop = document.body.scrollTop - speed
           if (document.body.scrollTop === 0) { // 返回到達頂部后, 銷毀定時器
           clearInterval(timer)
           }
          }, 10)
          

          效果:

          大家會發現,頁面返回是滾動起來很干。 沒10毫秒減50. 很平均,在交互上效果并不好。

          借鑒上面 scroll-behavior:smooth 的交互效果。 緩動的返回頂部。

          改一下計算方式:1000/2 = 500, 500/2 =250, 250/2 = ...... 這樣滑動起來是不是就平滑了呢?

          換算成公式:開始位置 = 開始位置 + (結束位置 - 開始位置) / 速度

          document.body.scrollTop = 1000 + (0 - 1000) / 2

          公式太煩了還是上代碼吧:

          var onTop = function (a, b, c, d) {
           if (a == b || typeof a != 'number') {
           return
           }
           b = b || 0
           c = c || 2
           
           var speed = function () {
           a = a + (b - b) / c
           
           if (a < 1) {
           d(b, true)
           return
           }
           d(a, false)
           requestAnimationFrame(speed)
           }
           speed()
          }
          
          • a 開始位置
          • b 結束位置
          • c 速度
          • d 位置回調,d(當前的位置值, 否動畫結束)


          調用:

          var target = document.body.scrollTop ? document.body : document.documentElement
          onTop(target.scrollTop, 0, 4, function (value) {
           target.scrollTop = value
          })
          

          效果:

          Ps: gif錄制效果不好,大家可以動手寫一下DEMO

          單屬性匯總:

          1 name屬性

          服務器會識別不同的name屬性,并根據name屬性來捕獲不同元素內的數據。

          2 value屬性

          value 屬性為 input 元素設定值。

          對于不同的輸入類型,value 屬性的用法也不同:

          type="button", "reset", "submit" - 定義按鈕上的顯示的文本

          type="text", "password", "hidden" - 定義輸入字段的初始值

          type="checkbox", "radio", "image" - 定義與輸入相關聯的值

          注釋:<input type="checkbox"> 和 <input type="radio"> 中必須設置 value 屬性。

          注釋:value 屬性無法與 <input type="file"> 一同使用。

          注意:單選框和復選框傳遞數據到數據庫時一定要設置value, 否則插入數據失敗;

          3 type屬性

          它決定了<input>標簽在頁面中的表現樣式和功能

          text 文本框

          password 密碼框

          radio 單選框

          checkbox 復選框

          file 文件域

          hidden 隱藏域

          image 圖像域

          submit 提交按鈕

          reset 重置按鈕

          button 普通按鈕

          4 size屬性

          列表框中size屬性用來設置列表框顯示的行數;

          文本框和密碼框會使用size屬性設置域的顯示寬度;

          5 disabled屬性

          定義disabled屬性可以禁止使用該元素;

          無法將數據提交到服務器處理;

          6 readonly屬性

          常用在輸入性表單對象中(如文本框、密碼框、文本區域),用來禁止輸入任何信息;

          可以將數據提交到服務器處理;

          7 checked屬性

          它與disabled屬性一樣沒有屬性值,常用在選擇性表單對象中,定義對象處于被選中狀態(如單選按鈕和復選框)

          但在列表框或者下拉式菜單中,為了表示被選中的項目,可使用selected屬性;

          7 placeholder屬性

          規定幫助用戶填寫輸入字段的提示。

          表單對象:

          1 文本框

          <input type="text" name="textfield" id="textfield" value="單行文本框" size="20" maxlength="20">

          必需的屬性:name type

          2 密碼域

          <input type="password" name="passwordfield" id="passwordfield">

          必需的屬性:name type

          3 文本域

          <textarea name="textarea" cols="20" rows="5" wrap="physical"></textarea>

          必需的屬性:name cols rows

          wrap屬性 默認值:輸入的文本會自動換行。當數據提交到服務器被處理時, 換行符不會隨輸入的文本一同被提交到服務器;

          off(也可寫成wrap):不自動換行, 當輸入的內容超出文本區域右邊界時, 文本將向左滾動, 并顯示滾動條。

          如果希望換行,必須手動輸入回車鍵才能將插入點移到下一行;

          virtual:文本能夠自動換行, 當數據提交到服務器被處理時, 換行符不會隨輸入文本一同提交到服務器;(默認值)

          physical:文本能夠自動換行, 當數據提交到服務器被處理時, 換行符將會隨輸入的文本一同被提交到服務器進行處理;

          關于如何限制文本域輸入字符串的長度 見javascript|語法|設置文本框

          HTML5中wrap中屬性值修改為hard|soft

          soft 當在表單中提交時, textarea 中的文本不換行, 默認值。

          hard 當在表單中提交時, textarea 中的文本換行(包含換行符)。

          當使用 "hard" 時, 必須規定 cols 屬性

          4 單選按鈕

          單選按鈕傳遞的信息簡單,如1或0、True或False。

          <input type="radio" name="radio" value="1"/>選項1
          <input type="radio" name="radio" value="2"/>選項2
          <input type="radio" name="radio" value="3"/>選項3

          多個單選按鈕通過定義相同的name屬性, 以實現捆綁在一起;

          必需的屬性:type name value

          5 復選框

          <input type="checkbox" name="checkbox[]" value="1"/>選項2
          <input type="checkbox" name="checkbox[]" value="2"/>選項2
          <input type="checkbox" name="checkbox[]" value="3"/>選項2

          通過設置相同的name屬性可以把多個復選框捆綁在一起;

          必需的屬性:type name value

          6 列表框/下拉菜單

          <select name="select" size=1>
          <option value="1">1</option>
          <option value="2" selected="selected">2</option>
          <option value="3">3</option>
          </select>

          如果select元素中不設置size屬性,則該元素會顯示為下拉菜單樣式

          <select name="select" size="1" multiple="multiple">
          <option value="1">1</option>
          <option value="2" selected="selected">2</option>
          <option value="3">3</option>
          </select>

          如果希望以列表框形式顯示,則可以使用size屬性指定列表框的高度(顯示幾個選項);

          還可以通過mutiple屬性定義列表框是否為多選(默認是單選);

          通過<optgroup>標簽把相關的選項組合在一起:

          <select>
          <optgroup label="PHP版塊">
          <option value ="resource">資源共享</option>
          <option value ="study">學習交流</option>
          <option value ="salary">薪酬待遇</option>
          </optgroup>
          <optgroup label="IOS版塊">
          <option value ="resource">資源共享</option>
          <option value ="study">學習交流</option>
          <option value ="salary">薪酬待遇</option>
          </optgroup>
          </select>

          注意:其中PHP版塊和IOS版塊不能被選中

          所有主流瀏覽器都支持 <optgroup> 標簽。

          7 文件域

          <input type="file" name="file"/>
          <input type="file" name="file" multiple/>

          8 按鈕

          提交按鈕

          <input type="submit" name="" value="提交"/>

          name值必須給出

          重置按鈕

          <input type="reset" name="" value="重置"/>

          普通按鈕

          <input type="button" name="" value="普通按鈕"/>

          它一般是配合javascript來使用;

          關于控制表單提交按鈕見: javascript|語法|控制表單提交

          9 圖像域

          <input type="image" name="image" value="提交" src="images/vote_d.gif" alt="提交" align="middle"/>

          10 隱藏域

          限制上傳文件大小

          <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />

          傳遞ID值

          <input type="hidden" name="id" value="<?php echo $result['id'];?>" />

          11 button標簽

          在 button 元素內部,您可以放置內容,比如文本或圖像。這是該元素與使用 input 元素創建的按鈕之間的不同之處。

          <button type="button" name="button" value="按鈕"><img src="hw001.jpeg"/></button>

          普通按鈕<button type="button">普通按鈕</button> 它一般是配合javascript來使用, 默認值

          提交按鈕<button type="submit">提交按鈕</button>

          重置按鈕<button type="reset">重置按鈕</button>

          提交表單

          enctype屬性

          該屬性包含兩種方式:

          application/x-www-form-urlencoded 是默認編碼類型

          multipart/form-data

          multipart/form-data編碼方式可以用來傳輸二進制數據或者非ASCII字符的文本(如圖片、不同格式的文件等),上傳文件必須使用此屬性

          multipart: 多部件的

          multiple: 多重的

          text/plain

          text/plain將表單屬性發送到電子郵箱時,enctype的值必須設為"text/plain",否則將會出現亂碼。

          發送電子郵件的表單程序

          <form name="form1" method="post" action="mailto:marker@broadview.com.cn" enctype="text/plain">
          </form>

          action 表單提交的腳本

          如果傳遞到本頁面,則直接輸入控制 action=""

          表單提交方式method:post/get

          <form action="test.php?id=5" method="post" >
          name: <input type="text" name="name" value="100">
          </form>

          id=5是get傳, name="100" 是post傳! //高洛峰解釋

          action="" 表示傳遞到當前腳本文件

          target 指定提交到哪一個窗口

          _blank 打開新窗口

          _self 當前的窗口,默認值

          _parent 上一層窗口

          _top 最上層窗口

          框架名稱 指定指定窗口或框架名稱

          label標簽

          作用: 擴大觸控區域, 為了提升用戶體驗, 點擊文字也能選中表單

          <form action=" method="get" accept-charset="utf-8">
          <label>電子郵箱: <input type="text" name="email" value="" placeholder="請輸入電子郵箱"/></label><br/>
          <label>密碼: <input type="password" name="password"/></label><br/>
          <label for="address">地址</label>
          <input type="text" name="address" id="address" placeholder="請輸入地址" />
          </form>

          for與id一致

          <input type="radio" id="sec" name="sex"> <label for="sex">男</label>

          簡化寫法:

          <label><input type="checkbox"/>周杰倫-晴天</label>

          注意: "for" 屬性可把 label 綁定到另外一個元素。請把"for"屬性的值設置為相關元素的 id 屬性的值。

          PHP實例:創建發送郵件信息的html表單

          代碼:

          <html>
          <head>
          <title>簡單郵件發送表單</title>
          </head>
          <body>
          <h1>Mail Form</h1>
          <form name="form1" method="post" action="simpleEmail.php">
          <table>
          <tr><td><b>To</b></td><td><input type="text" name="mailto" size="35"></td></tr>
          <tr><td><b>郵件主題:</b></td>
          <td><input type="text" name="mailsubject" size="35"></td></tr>
          <tr><td><b>郵件內容</b></td>
          <td><textarea name="mailbody" cols="50" rows="7"></textarea></td>
          </tr>
          <tr><td colspan="2">
          <input type="submit" name="Submit" value="發送">
          </td>
          </tr>
          </table>
          </form>
          </body>
          </html>


          simpleEmail.php

          架是將一個頁面劃分為若干個窗口, 每一個窗口都是獨立;

          要實現框架必須使用框架型的DTD;

          框架就像一個窗戶是由窗格和玻璃組成;

          框架中不能有body及body子標記;

          框架是由框架集(frameset)和框架頁(frame)組成;

          格式:

          <!DOCTYPE html>
          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
          </head>
          <frameset>
          <frame />
          <frame />
          </frameset>
          </html>

          框架標簽:

          <frameset></frameset> 放在一個框架文檔的<body>標簽之前, 也可以嵌在其他框架文檔中;

          框架中不能有body及body子標記, 框架是由框架集(frameset)和框架頁(frame)組成;

          <frameset rows="value,value"> 定義一個框架內的行數, 可用像素值或高度百分比;

          <frameset cols="value,value"> 定義一個框架內的列數, 可用像素值或寬度百分比;

          <frameset cols="120,*"></frameset>

          <frameset cols="25%,50%,25%"></frameset>

          <frameset rows="120,*"></frameset>

          <frameset rows="25%,50%,25%"></frameset>

          frameborder 框架邊框顯示屬性

          該屬性用于指定框架周圍是否顯示邊框, 取值有1(顯示邊框, 默認值)和0(不顯示邊框)。

          framespacing 該屬性用于指定框架之間的間隔, 以像素為單位。

          如果不設置該屬性,則框架之間沒有間隔。

          border 指定邊框寬度屬性

          該屬性用于指定邊框的寬度, 只有在frameborder屬性為1時有效。

          bordercolor 指定邊框顏色

          <noframes></noframes> 定義在不支持框架的瀏覽器中顯示什么提示;

          <html>
          <frameset cols="25%,50%,25%">
          <frame src="frame_a.html"/>
          <frame src="frame_b.html"/>
          <frame src="frame_c.html"/>
          <noframes>
          <body>您的瀏覽器無法處理框架!</body>
          </noframes>
          </frameset>
          </html>

          <frame> 定義一個框架內的單一窗或窗區域;

          <frame src="url"> 規定框架內顯示的html文檔;

          <frame name="name"> 命名框架或區域以便別的框架可以指向它;

          <frame marginwidth=""> 定義框架左右邊緣的空白大小,必須大于等于1;

          <frame marginheight=""> 定義框架上下邊緣的空白大小,必須大于等于1;

          <frame scrolling=""> 設置框架是否有滾動欄,其值可以是"yes","no",或"auto";

          <frame noresize> 禁止用戶調整一個框架的大小;其值只有一個"noresize"

          <frame src="frame_a.htm" longdesc="w3school.txt" /> longdesc屬性指向了帶有框架內容長描述的頁面:

          <iframe></iframe> 創建一個內聯的框架;

          src 定義在框架中顯示的內容的來源;

          frameborder 規定是否顯示框架周圍的邊框。(0或1);

          align 控制對齊方式(left、right、middle、top、bottom);

          height 框架的高度,

          width 框架的寬度;

          marginheight 定義 iframe 的頂部和底部的邊距。

          marginwidth 定義 iframe 的左側和右側的邊距。

          scrolling 規定是否在 iframe 中顯示滾動條(yes、no、auto)。

          name 規定 iframe 的名稱。

          bordercolor 指定邊框顏色

          <iframe src ="/index.html" frameborder="0" bordercolor="red">

          <p>Your browser does not support iframes.</p>

          </iframe>


          關于框架集<frameset></frameset>中屬性cols rows分割方法理解

          <frameset cols="40%,2*,*"> 將窗口分為40%,40%,20%

          <frameset cols="100,200,*"> 將窗口分為100像素,200像素和剩下的700像素

          <frameset cols="100,*,*">    將100像素以外的窗口平均分配

          <frameset cols="*,*,*">     將窗口分為三等份

          <frameset rows="*,*,*"> 總共有三個按列排列的幀,每個幀占整個瀏覽器窗口的1/3

          <frameset cols="40%,*,*"> 總共有三個按行排列的幀,第一個幀占整個瀏覽器窗口的40%,剩下的空間平均分配給另外兩個幀

          <frameset rows="40%,*" cols="50%,*,200">

          以上"*"表示剩余部分

          總共有六個幀,先是在第一行中從左到右排列三個幀,然后在第二行中從左到右再排列三個幀,即兩行三列,

          所占空間依據rows和cols屬性的值,其中200的單位是像素

          屬性匯總:

          frameset(框架集)

          rows 它是將框架集劃分為上下型

          cols 它是將框架劃分為左右型

          border 是用于設置框架的邊框粗細

          frameborder 是用于設置是否顯示邊框, 取值:yes|no或1|0

          bordercolor 用于設置框架邊框的顏色

          frame(框架頁)

          noresize 是否可以調整小窗口的大小

          name 用于設置小窗口的名稱

          src 小窗口的url

          scroll 是否顯示滾動條 yes|no|auto

          實例: iframe滿屏方案


          主站蜘蛛池模板: 中文乱码人妻系列一区二区| V一区无码内射国产| 国产主播福利一区二区| 无码人妻精品一区二区蜜桃百度 | 无码少妇一区二区| 无码国产精品一区二区免费I6| 国产综合一区二区在线观看| 日韩高清一区二区三区不卡| 亚洲香蕉久久一区二区| 日韩精品无码中文字幕一区二区| 亚洲男人的天堂一区二区| 午夜DV内射一区区| 极品少妇一区二区三区四区| 国产日韩一区二区三区| 精品一区高潮喷吹在线播放| 亚洲一区二区三区首页| 久久久久一区二区三区| 亚洲夜夜欢A∨一区二区三区| 国产精品福利区一区二区三区四区| 国产午夜精品一区二区三区极品| 国产大秀视频在线一区二区| 日韩亚洲AV无码一区二区不卡| 丰满少妇内射一区| 国产精品无圣光一区二区| 久久久精品人妻一区二区三区| 日本一区二区三区高清| 久久精品一区二区三区四区 | 一区国产传媒国产精品| 成人免费一区二区三区在线观看| 国内精品无码一区二区三区| 国产在线精品一区二区不卡麻豆| 区三区激情福利综合中文字幕在线一区亚洲视频1| 在线精品亚洲一区二区| 国产欧美一区二区精品仙草咪| 精品国产精品久久一区免费式| 日本精品一区二区三区在线视频| 丝袜美腿高跟呻吟高潮一区| 久久AAAA片一区二区| 亚洲视频在线观看一区| 老熟妇高潮一区二区三区| 精品中文字幕一区在线|