主頁 > 前端設計 > 什么是mapbox?

什么是mapbox?

2021-02-08 13:57:35 前端設計

Mapbox公司于2010年6月01日在美國成立,http://Mapbox.com 是一個很棒的地圖制作及分享網站,用戶可以使用Mapbox Studio創建一個自定義、互動式的地圖,然后可以將這些自定義的地圖和資料服務你自己的網站(Web)或移動應用程式(Mobile Web/Android/IOS)上,

在技術和體驗上,這家公司對傳統的地圖GIS系統的沖擊簡直都是顛覆性的,值得一提的是它為開源社區貢獻了mapbox-gl-native /mapbox-gl-js / node-sqlite3等許許多多開源專案,因此有必要對它的一些核心開源專案和矢量瓦片技術進行研究,

發展歷程

由2010年成立至今,Mapbox在業界的影響力可也說是蒸蒸日上了,筆者以為,為原本沉悶、技術陳舊的GIS界,注入了強大的活力,為移動互聯網時代帶來了一個嶄新的地圖互動方式,下面,先列出一些在Mapbox發展歷程中經歷的一些比較重要的大事件:

  • 2011.01 起草MBTiles標準,這是一個新的跨平臺、支持離線的地圖存盤格式,
  • 2011.02-2011.06 TileMill發布,允許用戶根據自定義資料來創建地圖,開發了CartoCSS樣式描述語言(類CSS),TileMill桌面軟體是使用Mapnik和Node.js開發的,
  • 2013.05 矢量切片出現,推出了一個新的開源矢量瓦片規范,應用到Mapbox所有的Web地圖中,矢量切片提供了一種超快速、高效的格式,強化了地圖在互動特性、GeoJSON資料流、移動端渲染等等方面的性能,現在,設計迭代一個地圖可以在幾秒鐘內完成,在幾分鐘內就可以得到一個完整的全球矢量地圖,這個Mapbox Vector Tile(Mapbox 矢量瓦片)幾乎是革命性的,
  • 2014.06 Mapbox GL誕生,它是一個新的可互動的,回應式地圖的渲染庫,Mapbox GL是一個基于OpenGL ES的,非常強大的,硬體加速的制圖庫,它可以完全控制每個地圖樣式的元素,

https://pic2.zhimg.com/80/v2-351a10fadacd60c0fc4b43d3f3945edd_1440w.jpg

  • 2014.08 推出了Mapbox GL JS,它是新的一個快速而強大的Web地圖系統,Mapbox GL JS是一個客戶端的地圖渲染器,使用JavaScript和WebGL的動態繪制資料,呈現視頻游戲級別的速度和平滑,
  • 2014.09 Mapbox Studio Classic ,是開源的地圖設計平臺,在所有桌面平臺上推出:OS X作業系統,Windows和Linux,Mapbox Studio Classic允許任何人設計完全定制的地圖,很輕松地處理巨量的全球資料,在幾秒鐘內發布更新地圖,并且它所設計的地圖是與解析度無關的,適應所有從Retina設備到高解析度的列印,

https://pic3.zhimg.com/80/v2-339c9304d32e5505cdb748e33b960e02_1440w.jpg

  • 2014.12 Turf.js.Turf是,它是一個快速、緊湊且開源的JavaScript庫,實作了最常見的地理空間操作功能,Turf作為新的地理空間基礎設施的一部分,不同于JavaScript的ArcGIS API,由于Turf可以完全在客戶端完成所有操作,Web應用程式可以脫機作業,
  • 2015.11 Mapbox Studio 發布了Mapbox Studio,它是一個用于優化移動應用和現代網頁的制圖系統,Mapbox Studio包含矢量渲染來制繪地圖,更新和互動的速度與平滑程度和視頻游戲一樣,擁有的強大的資料基礎架構,支持自定義資料,格式轉換和處理快速而可靠,
  • 2016.08 上海辦公室成立
  • 2016.10 發布Mapbox Unity SDK 將Mapbox API的全部功能帶到基于位置的游戲、VR,

https://pic3.zhimg.com/80/v2-b640899c1c86c107842d0dd40003005e_1440w.jpg

  • 2017.12 Mapbox GL JS中的3D功能

https://pic3.zhimg.com/80/v2-4c24f3c1e618008314e54f597c6bbdf2_1440w.jpg

Mapbox開源專案介紹

筆者對Mapbox的一些開源專案、原理進行研究,下面將一一介紹這些筆者看過的專案并給出一些原理解讀,

MBTiles瓦片存盤規范

MBTiles瓦片存盤規范的制定主要是為了解決、優化傳統瓦片的存盤方案存在的兩個問題:

  1. 可移植性差,無法在移動端上做離線應用
  2. 存盤量大,大家都知道,因為互聯網上的地圖都以“瓦片”的形式存在,高層級的瓦片存盤數量往往是海量的,例如,對于“Web 墨卡托”投影的瓦片金字塔來說,第15層資料有 4^15 = 1073741824個瓦片,

參見檔案,Mbtiles其實本質是一個SQLite3檔案,大家知道,SQLite有它天然的可移植特性(整個資料庫就是一個sqlite3檔案,當然可移植性夠好),這個解決了1的問題,

下面簡單解讀一下規范,該規范描述了這個sqlite3檔案的表必須符合以下規定:

  • 必須要一個名叫“metadata”的table(表)或者view(視圖),這個表其實就是“元資料”表,用來描述存盤的資料,這個表必須要有兩列,一列是"name",一列是“value”,這兩列都是text型別的,這個表必須包含一些特定的row,例如name="name",value="資料集名稱";name: "format" ,value: "pbf"代表存盤的瓦片格式;name: "center" ,value: -122.1906,37.7599,1代表這個資料集存盤的資料中心在這個經緯度處,對于Mapbox矢量瓦片集,有特殊的json欄位,用來描述矢量瓦片集,
  • 必須要有一個名字叫“tiles”的表,建表陳述句CREATE TABLE tiles (zoom_level integer, tile_column integer, tile_row integer, tile_data blob);

它可能會有一個索引:

CREATE UNIQUE INDEX tile_index on tiles (zoom_level, tile_column, tile_row);

這個表主要存了x/y/z和對應的瓦片資料(BLOB),標準還提到了TMS tiling scheme,有 興趣可以詳細看下,

  • grids和grids_data表 可有可無,不細說了,

這邊給出一個MBTiles檔案的實體:

https://pic1.zhimg.com/80/v2-d04c740a017d24964af2523774c6789c_1440w.jpg

其中,map表存的是zoom_level/tile_column/tile_row/tile_id,其中tile_id是一個哈希值,

https://pic1.zhimg.com/80/v2-54cb837bfc4bc719bdf57f8641ae9e94_1440w.jpg

images表存的是tile_data/tile_id,其中tile_data是一個BLOB,

https://pic4.zhimg.com/80/v2-04271e95a9f55c33ee6c5921720636ab_1440w.jpg

tiles表是基于map表和images表的一個視圖

https://pic3.zhimg.com/80/v2-33bd4c17373a8016672c938ba86aa21e_1440w.jpg

對于不同zoom_level/tile_column/tile_row三元組,在map表中對應的tile_id有可能是相同的,這樣最終通過tiles視圖在images表中對應的tile_data就是同一個,這樣做于可以減少冗余瓦片,地圖中像海洋或空曠的土地等區域包含有成千上萬重復而冗余的純色瓦片,例如太平洋中蔚藍色的瓦片,在小比例尺中,它可能只有幾張,但在大比例尺如1:10000的地圖中,就會存在上百萬這種單一顏色的藍色瓦片,MBTiles 通過拆分瓦片索引和瓦片原始影像的存盤,使用視圖的方式來關聯二者,這樣成千上萬的瓦片索引就可以指向同一個瓦片影像,從而大大減少純色瓦片的冗余存盤,提升磁盤利用率以及瓦片檢索效率,

TileMill

TileMill這個專案到現在已經沒在維護了(但是還是可以下載使用),但是在當時這個專案引入了CartoCSS,利用Mapnik渲染瓦片圖片,還是有一定的先進性的,看了下是基于Node 0.10.x開發的,看版本號就知道有點久遠了,直接下載release版本,結果軟體一直在loading狀態所以放棄了,后來發現了這個fork,下載安裝,其中有個mime包依賴版本有break change,手動裝會1.x版本才可以成功跑起來,

下圖是TileMill自帶的一個華盛頓特區的地圖的示例,左側是地圖區域,右側是CartoCSS的樣式編輯區域

https://pic2.zhimg.com/80/v2-ec511e565e105b6db5a95939d44602c5_1440w.jpg

當然右側編輯區域用符合CartoCSS規范的的樣式描述語言去描述“圖層(layer)”的樣式(當然可以控制在圖層下面更加細節的feature)的時候,左側的地圖樣式也會隨之改變, CartoCSS的用法在這里不詳細展開了,在需要用到時可以自行查看,總之是非常類似CSS的一門標記語法,

不難發現,左側的地圖區域采用的是“柵格瓦片”,即由Mapnik將Mapnik XML描述檔案渲染成的圖片,它的作業原理入下圖所示:

https://pic2.zhimg.com/80/v2-36c559691dcd934099c531cd8d62d335_1440w.jpg

當然,在制作完地圖的樣式之后,TileMill支持將地圖進行匯出為MBTiles格式,用于離線地圖,由上圖可以看出,這里利用Mapnik的強大渲染能力,對資料、樣式的分離有了一種很好的實踐,同樣的思想為日后的MVT矢量瓦片奠定了基礎,不過這種由客戶端改變樣式描述檔案,讓服務器去觸發渲染的模式,還是有一定的局限性,畢竟增加了前后端通信的開銷,另外對于更加復雜的地圖而言,Mapnik XML檔案往往會變得非常巨大,Mapnik縱使渲染能力強大,也會有其性能的瓶頸,所以這種模式只適用于本地環境制作地圖,對標現在的Mapbox Studio來看,是遠遠不夠的,

Tilelive

在TileMill的代碼中,其實就用到了Tilelive,筆者認為,Tilelive在瓦片的調度里面是一個非常核心的庫,雖然代碼量不大,但是它的設計和Plugin能力實在是有點“小而美”,有興趣可以看看原始碼,

Tilelive is designed for streaming map tiles from sources (like custom geographic data formats) to sinks (destinations, like file systems) by providing a consistent API. This repository enables the interaction between sources and sinks and is meant to be used in tandem with at least one Tilelive plugin. Tilelive plugins (modules) follow a consistent architecture (defined in API.md) and implement the logic for generating and reading map tiles from a source or putting map tiles to a destination, or both.

https://pic1.zhimg.com/80/v2-a0e4536c937e1ff2e953e4332bd2bb80_1440w.jpg

如上圖,Tilelive其實在整個Mapbox瓦片體系里面占著比較重要的地位,看Tilelive的實作和用法,有點像設計模式中的“配接器模式”,只要按照Tilelive的設計,實作Tilelive提供的標準函式,可以利用Tilelive的一些方法,實作各個資料源的資料互導,例如:想將別人家在MBTiles里面存的瓦片資料匯入到MongoDB里面去,就可以使用Tilelive和MBTiles/MongoDB的相關“plugin”辦到,甚至你也可以自己寫一個Plugin,當然,利用Tilelive配合其他Node Web庫(例如egg等)很容易在本地搭建出一個離線的瓦片服務器,有關Tilelive Pugin的示意圖如下:

https://pic3.zhimg.com/80/v2-d7359036d0d4dda65bba96084e3891da_1440w.jpg

Mapbox矢量瓦片(MVT)標準

前文也提到過,矢量瓦片標準是Mapbox的一個對業界非常大的貢獻,到目前為止,幾乎所有主流的Web端地圖渲染庫,例如ol3.js/Cesium.js/Leaflet等都已經支持MVT標準,即可以使用它們在Web端渲染出矢量瓦片資料,矢量瓦片標準規定了一種節省存盤空間的矢量瓦片資料編碼格式,這種格式應用于客戶端或服務端高效渲染或查詢要素資訊,

標準中規定了矢量瓦片的:

  • 檔案格式 Google Protocol Buffers 、檔案后綴、MIME型別,
  • 投影和范圍 Web Mercator是默認的投影方式,Google tile scheme是默認的瓦片編號方式,
  • 內部結構
    • 圖層
    • 要素
    • 幾何圖形編碼
    • 要素屬性

矢量資料切片為瓦片后,其坐標從地理坐標轉換為螢屏坐標,以整數形式存盤,整型比浮點型所需的存盤空間更小,大大降低了瓦片的傳輸成本

實體:一個GeoJSON的格式要素如下:

{ "type": "FeatureCollection", "features": [ { "geometry": { "type": "Point", "coordinates": [ -8247861.1000836585, 4970241.327215323 ] }, "type": "Feature", "properties": { "hello": "world", "h": "world", "count": 1.23 } }, { "geometry": { "type": "Point", "coordinates": [ -8247861.1000836585, 4970241.327215323 ] }, "type": "Feature", "properties": { "hello": "again", "count": 2 } } ] }

會被結構化為:

layers { version: 2 name: "points" features: { id: 1 tags: 0 tags: 0 tags: 1 tags: 0 tags: 2 tags: 1 type: Point geometry: 9 geometry: 2410 geometry: 3080 } features { id: 1 tags: 0 tags: 2 tags: 2 tags: 3 type: Point geometry: 9 geometry: 2410 geometry: 3080 } keys: "hello" keys: "h" keys: "count" values: { string_value: "world" } values: { double_value: 1.23 } values: { string_value: "again" } values: { int_value: 2 } extent: 4096 }

有了矢量瓦片標準,對于在Web里面來說,利用WebGL的moveTo/lineTo之類的API,可以將矢量瓦片繪制出來,

Mapbox GL

Mapbox-GL.js是一個在Web瀏覽器里面決議矢量瓦片規范并且封裝了WebGL,可以在Canvas上對矢量瓦片進行繪制的地圖庫,其中也用到了一些硬體加速的東西(著色器)等,官方提供的示例也非常多非常棒,參考這些示例去開發一些基于地理位置的應用還是不錯的,

https://pic3.zhimg.com/80/v2-bb0a33c8e00be3d3d20a3e5948d4a59a_1440w.jpg

Mapbox Studio Classic

Mapbox Studio Classic是Tilemill的升級版,目前也已經不維護了,

https://pic1.zhimg.com/80/v2-23b578d0757a1d59f53fbb47a51d4160_1440w.jpg

與Tilemill的界面類似,也是左側是地圖,右側是CartoCSS的樣式編輯區域,它們的主要區別在于Mapbox Studio Classic使用了矢量瓦片進行地圖樣式的制作,同時,由于是矢量瓦片,字體之類的東西就沒法直接在矢量瓦片里面存盤,所以多了字體的功能,支持自己上傳字體等功能,它的原理基本如下圖:

https://pic1.zhimg.com/80/v2-e8e5424156582726a40ccd4f94092164_1440w.jpg

和Tilemill相比,當改變樣式檔案的時候,不用再到服務器去使用Mapnik重新把資料渲染成柵格瓦片再回傳前端了,現在有Mapbox-gl.js可以在前端直接利用矢量瓦片和樣式檔案渲染出地圖來,

Mapbox Studio

Mapbox Studio是一個在線制圖、分享平臺,“平臺”意思是,跟之前的Tilemill/Mapbox Stduio Classic的本地制圖的模式有很大的不同,可以說,矢量瓦片的出現,給了“在線制圖平臺”誕生的可能性,用戶在Mapbox網站上制作的地圖(本身在客戶端渲染瓦片的模式對服務端的開銷很低了)后,可以將瓦片、樣式、字體、Mark等資料直接托管在Mapbox平臺上,然后用戶自己的APP、網站利用自己的Accesskey 可以訪問自己的制作好的瓦片資料跟樣式,以下是筆者在線改變水系的顏色的制圖,

https://pic4.zhimg.com/80/v2-af599197541062db96a8945ba7b568c7_1440w.jpg

這個平臺肯定是不開源的,沒法從原始碼探究它的實作,但是矢量瓦片這塊的基本原理跟Mapbox Studio Classic肯定是一致的,

利用Mapbox提供的開源技術,我們完全可以在本地可以實作一個自己的簡易版的Mapbox Studio,

其他

高德最近推出的自定義地圖:https://lbs.amap.com/dev/mapstyle/index

https://pic2.zhimg.com/80/v2-b716aca34d7096a2e61ba8d7610a0d31_1440w.jpg

看起來也是前端做的矢量瓦片渲染,但是如果是這樣也肯定是自己的矢量瓦片標準吧,

原文鏈接: https://zhuanlan.zhihu.com/p/45518647

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/257808.html

標籤:其他

上一篇:ES6新特性之let和const命令

下一篇:關於 JavaScript 的事件流

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • vue移動端上拉加載

    可能做得過于簡單或者比較low,請各位大佬留情,一起探討技術 ......

    uj5u.com 2020-09-10 04:38:07 more
  • 優美網站首頁,頂部多層導航

    一個個人用的瀏覽器首頁,可以把一下常用的網站放在這里,平常打開會比較方便。 第一步,HTML代碼 <script src=https://www.cnblogs.com/szharf/p/"js/jquery-3.4.1.min.js"></script> <div id="navigate"> <ul> <li class="labels labels_1"> ......

    uj5u.com 2020-09-10 04:38:47 more
  • 頁面為要加<!DOCTYPE html>

    最近因為寫一個js函式,需要用到$(window).height(); 由于手寫demo的時候,過于自信,其實對前端方面的認識也不夠體系,用文本檔案直接敲出來的html代碼,第一行沒有加上<!DOCTYPE html> 導致了$(window).height();的結果直接是整個document的高 ......

    uj5u.com 2020-09-10 04:38:52 more
  • WordPress網站程式手動升級要做好資料備份

    WordPress博客網站程式在進行升級前,必須要做好網站資料的備份,這個問題良家佐言是遇見過的;在剛開始接觸WordPress博客程式的時候,因為升級問題和博客網站的修改的一些嘗試,良家佐言是吃盡了苦頭。因為購買的是西部數碼的空間和域名,每當佐言把自己的WordPress博客網站搞到一塌糊涂的時候 ......

    uj5u.com 2020-09-10 04:39:30 more
  • WordPress程式不能升級為5.4.2版本的原因

    WordPress是一款個人博客系統,受到英文博客愛好者和中文博客愛好者的追捧,并逐步演化成一款內容管理系統軟體;它是使用PHP語言和MySQL資料庫開發的,用戶可以在支持PHP和MySQL資料庫的服務器上使用自己的博客。每一次WordPress程式的更新,就會牽動無數WordPress愛好者的心, ......

    uj5u.com 2020-09-10 04:39:49 more
  • 使用CSS3的偽元素進行首字母下沉和首行改變樣式

    網頁中常見的一種效果,首字改變樣式或者首行改變樣式,效果如下圖。 代碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ......

    uj5u.com 2020-09-10 04:40:09 more
  • 關于a標簽的講解

    什么是a標簽? <a> 標簽定義超鏈接,用于從一個頁面鏈接到另一個頁面。 <a> 元素最重要的屬性是 href 屬性,它指定鏈接的目標。 a標簽的語法格式:<a href=https://www.cnblogs.com/summerxbc/p/"指定要跳轉的目標界面的鏈接">需要展示給用戶看見的內容</a> a標簽 在所有瀏覽器中,鏈接的默認外觀如下: 未被訪問的鏈接帶 ......

    uj5u.com 2020-09-10 04:40:11 more
  • 前端輪播圖

    在需要輪播的頁面是引入swiper.min.js和swiper.min.css swiper.min.js地址: 鏈接:https://pan.baidu.com/s/15Uh516YHa4CV3X-RyjEIWw 提取碼:4aks swiper.min.css地址 鏈接:https://pan.b ......

    uj5u.com 2020-09-10 04:40:13 more
  • 如何設定html中的背景圖片(全屏顯示,且不拉伸)

    1 <style>2 body{background-image:url(https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture); 3 background-size:cover;background ......

    uj5u.com 2020-09-10 04:40:16 more
  • Java學習——HTML詳解(上)

    HTML詳解 初識HTML Hyper Text Markup Language(超文本標記語言) 1 <!--DOCTYPE:告訴瀏覽器我們要使用什么規范--> 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <!--meta 描述性的標簽,描述一些 ......

    uj5u.com 2020-09-10 04:40:33 more
最新发布
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 07:59:23 more
  • 生產事故-走近科學之消失的JWT

    入職多年,面對生產環境,盡管都是小心翼翼,慎之又慎,還是難免捅出簍子。輕則滿頭大汗,面紅耳赤。重則系統停擺,損失資金。每一個生產事故的背后,都是寶貴的經驗和教訓,都是專案成員的血淚史。為了更好地防范和遏制今后的各類事故,特開此專題,長期更新和記錄大大小小的各類事故。有些是親身經歷,有些是經人耳傳口授 ......

    uj5u.com 2023-04-18 07:55:04 more
  • 記錄--Canvas實作打飛字游戲

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 打開游戲界面,看到一個畫面簡潔、卻又富有挑戰性的游戲。螢屏上,有一個白色的矩形框,里面不斷下落著各種單詞,而我需要迅速地輸入這些單詞。如果我輸入的單詞與螢屏上的單詞匹配,那么我就可以獲得得分;如果我輸入的單詞錯誤或者時間過長,那么我就會輸 ......

    uj5u.com 2023-04-04 08:35:30 more
  • 了解 HTTP 看這一篇就夠

    在學習網路之前,了解它的歷史能夠幫助我們明白為何它會發展為如今這個樣子,引發探究網路的興趣。下面的這張圖片就展示了“互聯網”誕生至今的發展歷程。 ......

    uj5u.com 2023-03-16 11:00:15 more
  • 藍牙-低功耗中心設備

    //11.開啟藍牙配接器 openBluetoothAdapter //21.開始搜索藍牙設備 startBluetoothDevicesDiscovery //31.開啟監聽搜索藍牙設備 onBluetoothDeviceFound //30.停止監聽搜索藍牙設備 offBluetoothDevi ......

    uj5u.com 2023-03-15 09:06:45 more
  • canvas畫板(滑鼠和觸摸)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>canves</title> <style> #canvas { cursor:url(../images/pen.png),crosshair; } #canvasdiv{ bo ......

    uj5u.com 2023-02-15 08:56:31 more
  • 手機端H5 實作自定義拍照界面

    手機端 H5 實作自定義拍照界面也可以使用 MediaDevices API 和 <video> 標簽來實作,和在桌面端做法基本一致。 首先,使用 MediaDevices.getUserMedia() 方法獲取攝像頭媒體流,并將其傳遞給 <video> 標簽進行渲染。 接著,使用 HTML 的 < ......

    uj5u.com 2023-01-12 07:58:22 more
  • 記錄--短視頻滑動播放在 H5 下的實作

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 短視頻已經無數不在了,但是主體還是使用 app 來承載的。本文講述 H5 如何實作 app 的視頻滑動體驗。 無聲勝有聲,一圖頂百辯,且看下圖: 網址鏈接(需在微信或者手Q中瀏覽) 從上圖可以看到,我們主要實作的功能也是本文要講解的有: ......

    uj5u.com 2023-01-04 07:29:05 more
  • 一文讀懂 HTTP/1 HTTP/2 HTTP/3

    從 1989 年萬維網(www)誕生,HTTP(HyperText Transfer Protocol)經歷了眾多版本迭代,WebSocket 也在期間萌芽。1991 年 HTTP0.9 被發明。1996 年出現了 HTTP1.0。2015 年 HTTP2 正式發布。2020 年 HTTP3 或能正... ......

    uj5u.com 2022-12-24 06:56:02 more
  • 【HTML基礎篇002】HTML之form表單超詳解

    ??一、form表單是什么

    ??二、form表單的屬性

    ??三、input中的各種Type屬性值

    ??四、標簽 ......

    uj5u.com 2022-12-18 07:17:06 more