主頁 > 前端設計 > 深拷貝和原型原型鏈和web api 和 this指向等(中初級前端面事題)

深拷貝和原型原型鏈和web api 和 this指向等(中初級前端面事題)

2021-06-17 20:26:13 前端設計

深拷貝

值型別的賦值就是深拷貝:變數賦值時,拷貝的不是記憶體地址,而是將資料完整的在記憶體中復制了一份

  const a = 10
  const b = a
  console.log(b);

在這里插入圖片描述

淺拷貝

參考型別(null 物件 陣列)的賦值操作都不是深拷貝:拷貝的是記憶體地址,最終兩個變數指向的是同一個地址

const a = {
name: 'jj',
age: 20
}
const b = a
b.age = 18
console.log(a.age); // 18

在這里插入圖片描述

深拷貝和淺拷貝的區別

  • 淺拷貝只復制一層物件的屬性,而深拷貝則遞回復制了所有層級
  • 淺拷貝有效性針對的是單一層級物件 [1,2,3]或者{a:1,b:2}
  • 深拷貝有效性針對的是單層或者多層級物件 [1,2,3]或者{a:1,b:2}或者[1,[1],{a:1}]或者{a:[1],b:{c:2}}

如何讓參考型別深拷貝

簡單的實作深拷貝

const p1 = {
    name: 'jj',
    age: 20
  }
  const deepClone = (obj) => {
    let result = {}
    for (let i in obj) {
      // console.log(obj[i]);
      result[i] = obj[i]
    }
    return result
  }
  const p2 = deepClone(p1)
  p2.age = 12
  console.log(p1, p2);

在這里插入圖片描述

加入遞回

const p1 = {
    name: 'ss',
    age: 20,
    address: {
      province: '河北省',
      city: '保定市',
      area: '蓮池區',
      info: '河北軟體職業技術學院'
    }
  }
  const deepClone = (obj) => {
    let result = {}
    for (let i in obj) {
      result[i] = obj[i]
    }
    return result
  }
  const p2 = deepClone(p1)
  p2.age = 2
  p2.address.city = '衡水'
  console.log(p1, p2);

輸出結果

在這里插入圖片描述

  • 對于name和age屬性手機深拷貝

  • 對于address屬性不是深拷貝

  • 深拷貝的核心是我沒找到物件或數值中的值型別(age 和 name屬性的值),然后進行賦值操作,就是深拷貝,而address屬性是一個物件自然采用記憶體地址拷貝

  • 解決方案:加入遞回,一致遞回到值型別為止

  • 在deepClone函式中的回圈改寫為:

    result[i]=deepclone(obj[i])
    

完整代碼

const deepClone = (obj) => {
    // 如果不是物件或者等于null的時候無需進行深拷貝
    if (typeof obj !== 'object' || obj == null) {
      return obj
    }
    //宣告變數,用于存盤拷貝的資料
    let result
    if (obj instanceof Array) {
      result = []
    } else {
      result = {}
    }
    for (let i in obj) {
      // console.log(deepClone(obj[i]));
      result[i] = deepClone(obj[i])
    }
    return result
  }
  const p1 = {
    name: 'ss',
    age: 20,
    address: {
      province: '河北省',
      city: '保定市',
      area: '蓮池區',
      info: '河北軟體職業技術學院'
    }
  }
  const p2 = deepClone(p1)
  p2.age = 2
  p2.address.city = '衡水'
  console.log(p1, p2);

原型和原型鏈

隱式原型和顯示原型

  class People {
    constructor(name) {
      this.name = name
    }
    eat() {
      console.log('eat');
    }
  }
  class Student extends People {
    constructor(name, number) {
      super(name)
      this.number = number
    }
    sayHi() {
      console.log(`姓名:${this.name},學號:${this.number}`);
    }
  }
  const xialuo = new Student('夏洛特', '110')
  console.log(xialuo.__proto__ === Student.prototype);//true
  console.log(xialuo.__proto__);//物件的物件原型,也是隱式原型
  console.log(Student.prototype);//類的原型物件,也是顯示原型

物件的隱式原型與類的顯式原型是同一個物件,記憶體地址一致
在這里插入圖片描述

原型關系

  • 每個class都有顯示原型prototype
  • 每個實體都有隱式宣告__proto__
  • 實體的__proto__指向對應的class的prototype

獲取屬性方法時

  const xialuo = new Student('夏洛特', '110')
  console.log(xialuo.name);//夏洛特
  xialuo.sayHi()
  xialuo.eat()
  • 獲取屬性或方法時,首先在物件的自身屬性中查找如上面name就是物件的自身屬性
  • 如果找不到,則自動取__proto__中查找,如上面的sayHi方法,在物件中并沒有,所有取物件的隱式原型上查找

原型鏈

 hasownProperty 方法判斷某個屬性或者方法是否在當前隱式原型中

在 JavaScript 中,每個物件都有一個指向它的原型(prototype)物件的內部鏈接(proto),這個原型物件又有自己的原型,直到某個物件的原型為 null 為止(也就是不再有原型指向),這種一級一級的鏈結構就稱為原型鏈(prototype chain), 當查找一個物件的屬性時,JavaScript 會向上遍歷原型鏈,直到找到給定名稱的屬性為止;到查找到達原型鏈的頂部(Object.prototype),仍然沒有找到指定的屬性,就會回傳 undefined,

在這里插入圖片描述

所有 class 都是從 Object 繼承的,也就是說 Object 是其他類的原型

作用域

script標簽的開始和結束標記之間,叫全域作用域

函式內部的是函式作用域

花括號之間的是塊級作用域

自由變數:在當前作用域中沒有,在上級找到的變數就是自由變數如果全域沒有找到就回報 is not defiend

自由變數的查找就是在函式定義的地方,向上級作用域查找

閉包

在函式呼叫完之后作用域和變數都被清除

閉包在函式呼叫之后不會清除作用域和變數,只有呼叫內部函式的時候才會清除

閉包是一種現象 閉包可以訪問其他作用域的變數 有兩種情況:1.函式作為回傳值 2.函式作為引數

this指向

this 是在函式執行時(呼叫時)確定的,而不是定義時,

在全域作用域中this是指 window

普通函式this指向

作為普通函式呼叫this值是window

apply、bind 和 call 方法可以改變普通函式中 this 的指向,傳遞的第一個引數是什么,則函式中的 this 就是什么

function fn () {
console.log(this);
}
fn.call({ x: 100 }) // {x:100}
const fn_res = fn.bind({ x: 100 })
fn_res() // {x:100}

定義在物件里面的函式(this指向)

定義在物件里面的函式this指向的是這個物件

const person = {
name: 'onlifes',
sayHi () {
console.log(this);
},
wait () {
setTimeout(function () {
console.log(this);
}, 0)
}
}
person.sayHi()
person.wait()

結果

{name: "onlifes", sayHi: ?, wait: ?}
Window

原因:因為 wait 方法中使用了 setTimeOut 函式,其中的函式永遠被當作一個普通函式,所以 this=window

箭頭函式(this指向)

箭頭函式沒有自己的this指向,箭頭函式的this指向是父級作用域的this指向決定的

class類中方法的this(this指向)

class類中方法的this指向的是宣告的物件實體

同步和異步

單執行緒和異步

JS 是單執行緒語言,只能同時做一件事,這時候就需要異步解決單執行緒的問題 異步是解決JS語言單執行緒瓶頸的一個解決方案

異步和同步的區別

異步是基于 JS 單執行緒特點而產生的

1.異步不會阻塞代碼執行

同步會阻塞代碼執行

2.同步就相當于是 當客戶端發送請求給服務端,在等待服務端回應的請求時,客戶端不做其他的事情,當服務端做完了才回傳到客戶端,這樣的話客戶端需要一直等待,用戶使用起來會有不友好,

異步就是,當客戶端發送給服務端請求時,在等待服務端回應的時候,客戶端可以做其他的事情,這樣節約了時間,提高了效率,

存在就有其道理 異步雖然好 但是有些問題是要用同步用來解決,比如有些東西我們需要的是拿到回傳的資料在進行操作的,這些是異步所無法解決的,

解決異步問題

使用Promise方法

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <div class="info">

  </div>
</body>

</html>
<script>
  const url1 =
    'https://th.bing.com/th/id/R33674725d9ae34f86e3835ae30b20afe?rik=Pb3C9e5%2b%2b3a9Vw&riu=http%3a%2f%2fwww.desktx.com%2fd%2ffile%2fwallpaper%2fscenery%2f20180626%2f4c8157d07c14a30fd76f9bc110b1314e.jpg&ehk=9tpmnrrRNi0eBGq3CnhwvuU8PPmKuy1Yma0zL%2ba14T0%3d&risl=&pid=ImgRaw'
  const url2 = 'https://tse2-mm.cn.bing.net/th/id/OIP.T1-KOJxH7Dg0YqlcZiJ6vAHaHa?pid=ImgDet&rs=1'
  const url3 =
    'https://th.bing.com/th/id/Rc6c03edea530e9caa677c9d17f193a4d?rik=MBgpsjumbTD5eQ&riu=http%3a%2f%2fwww.desktx.com%2fd%2ffile%2fwallpaper%2fscenery%2f20170209%2fca186d97701674b996264b2d352894a7.jpg&ehk=HunG%2fPF7pUbpcS34cWpNvlS%2faoDPbcaTYL6LFFPQIIM%3d&risl=&pid=ImgRaw'

  function loadImg(url) {
    return new Promise((resolve, reject) => {
      const img = document.createElement('img')
      img.src = url
      img.onload = function () {
        resolve(img)
      }
    })
  }
  loadImg(url1)
    .then(img => {
      loadInfo(img)
      return loadImg(url2)
    }).then(img => {
      loadInfo(img)
      return loadImg(url3)
    }).then(img => {
      loadInfo(img)
    })

  function loadInfo(ele) {
    const sp = document.createElement('span')
    sp.innerHTML = ele.width
    document.querySelector('.info').appendChild(sp)
    document.body.appendChild(ele)
  }
</script>

用 await方法改造

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <div class="info">

  </div>
</body>

</html>
<script>
  const url1 =
    'https://th.bing.com/th/id/R33674725d9ae34f86e3835ae30b20afe?rik=Pb3C9e5%2b%2b3a9Vw&riu=http%3a%2f%2fwww.desktx.com%2fd%2ffile%2fwallpaper%2fscenery%2f20180626%2f4c8157d07c14a30fd76f9bc110b1314e.jpg&ehk=9tpmnrrRNi0eBGq3CnhwvuU8PPmKuy1Yma0zL%2ba14T0%3d&risl=&pid=ImgRaw'
  const url2 = 'https://tse2-mm.cn.bing.net/th/id/OIP.T1-KOJxH7Dg0YqlcZiJ6vAHaHa?pid=ImgDet&rs=1'
  const url3 =
    'https://th.bing.com/th/id/Rc6c03edea530e9caa677c9d17f193a4d?rik=MBgpsjumbTD5eQ&riu=http%3a%2f%2fwww.desktx.com%2fd%2ffile%2fwallpaper%2fscenery%2f20170209%2fca186d97701674b996264b2d352894a7.jpg&ehk=HunG%2fPF7pUbpcS34cWpNvlS%2faoDPbcaTYL6LFFPQIIM%3d&risl=&pid=ImgRaw'

  function loadImg(url) {
    return new Promise((resolve, reject) => {
      const img = document.createElement('img')
      img.src = url
      img.onload = function () {
        resolve(img)
      }
    })
  }
  async function fn() {
    loadInfo(await loadImg(url1))
    loadInfo(await loadImg(url2))
    loadInfo(await loadImg(url3))
  }
  fn()

  function loadInfo(ele) {
    const sp = document.createElement('span')
    sp.innerHTML = ele.width
    document.querySelector('.info').appendChild(sp)
    document.body.appendChild(ele)

  }
</script>

web api

  • ECMA 和 W3C 是兩個機構,但這兩個機構的會員有很大重合
  • ECMA 規定 ECMAScript 的標準,W3C 規定了 Web API 的標準,也就是說 ECMA 負責 ECMAScript 腳本語言的研究和發布,W3C 定義了 ECMAScript 能做什么
  • ECMA 262 是基礎,與 Web API 結合才能發揮作用

DOM操作

dom的本質是什么

我們都知道,DOM 是一棵樹,梨樹還是桃樹?

首先要明白,通過 VS Code 編輯的 HTML 源代碼,最侄訓被瀏覽器拿到 瀏覽器拿到源代碼經過決議,構建成DOM樹,瀏覽器可以識別并通過JS可以操作的這個DOM樹 所以,要將源代碼與 DOM 區別開來

  • 源代碼是開發者撰寫的,由瀏覽器進行決議并渲染成頁面,但渲染完成后,無法通過 JS 進行修改
  • DOM 存在于瀏覽器的記憶體中(我自己的理解),通過 JS 可以修改,修改后,瀏覽器會根據修改后 的 DOM 樹重新渲染頁面

DOM節點操作

  • property :修改物件屬性,不會體現到 HTML 結構中
  • attribute:修改 html 結構,會改變 HTML 結構
  • 兩者都可能引起 DOM 結構重新渲染
// property 方式:
element.style.color='red'
element.className='blue'
// atribute 方式
element.setAttribute('class','blue')
element.getAttribute('href')

結論:盡量使用 property 的方式,萬不得已,再使用 attribute 方式

DOM 結構操作

  • 新增,插入節點
  • 獲取子元素串列,獲取父元素
  • 洗掉元素

新增節點

document.createElement('p')

插入節點

父節點.appendChild('p')

獲取子元素串列

父元素.childNodes

獲取父元素串列

子元素.parentNode

洗掉子元素

父元素.removeChild(子元素)

DOM性能優化

  • 對DOM查詢做快取
  • 將頻繁的DOM操作作為一次性操作

用代碼片段進行一次性的操作

  body
  <ul id="list"></ul>
  
  //js
  const listNode = document.getElementById("list")
  // 創建一個檔案片段,此時還沒有插入到DOM樹中
  const frag = document.createDocumentFragment()
  // 執行插入
  for (let x = 0; x < 10; x++) {
    const li = document.createElement('li')
    li.innerHTML = "list item " + x
    frag.appendChild(li)
  }
  // 完成之后,再插入到DOM樹中
  listNode.appendChild(frag)

BOM操作

BOM:瀏覽器物件模型

1.如何識別瀏覽器型別

用Navigator物件的

屬性說明
appCodeName回傳瀏覽器的代碼名
appName回傳瀏覽器的名稱
appVersion回傳瀏覽器的平臺和版本資訊
cookieEnabled回傳指明瀏覽器中是否啟用 cookie 的布林值
platform回傳運行瀏覽器的作業系統平臺
userAgent回傳由客戶機發送服務器的user-agent 頭部的值

在這里插入圖片描述

分析拆解 URI 各個部分

在這里插入圖片描述

Screen 物件

Screen 物件包含有關客戶端顯示螢屏的資訊,

屬性描述
availHeight回傳顯示螢屏的高度 (除 Windows 任務欄之外),
availWidth回傳顯示螢屏的寬度 (除 Windows 任務欄之外),
bufferDepth設定或回傳呼色板的位元深度,
colorDepth回傳目標設備或緩沖器上的調色板的位元深度,
deviceXDPI回傳顯示螢屏的每英寸水平點數,
deviceYDPI回傳顯示螢屏的每英寸垂直點數,
fontSmoothingEnabled回傳用戶是否在顯示控制面板中啟用了字體平滑,
height回傳顯示螢屏的高度,
logicalXDPI回傳顯示螢屏每英寸的水平方向的常規點數,
logicalYDPI回傳顯示螢屏每英寸的垂直方向的常規點數,
pixelDepth回傳顯示螢屏的顏色解析度(位元每像素),
updateInterval設定或回傳螢屏的重繪率,
width回傳顯示幕螢屏的寬度,

History 物件

History 物件包含用戶(在瀏覽器視窗中)訪問過的 URL

History 物件屬性

屬性描述
length回傳瀏覽器歷史串列中的 URL 數量,

History 物件方法

方法描述
back()加載 history 串列中的前一個 URL,
forward()加載 history 串列中的下一個 URL,
go()加載 history 串列中的某個具體頁面,

事件

事件系結

1.嵌入式

<button onclick="open()">按鈕</button>

<script>
function open(){
	alert(1)
}
</script>

2.事件監聽

<button id="btn">按鈕</button>
<script>
document.getElementById('btn').addEventListener('click',function(){
	alert(1)
})
</script>

3.直接系結

<button id="btn">按鈕</button>
<script>
document.getElementById('btn').onclick = function(){
	alert(1)
}
</script>

addEventListener和on的區別

on:如果事件相同就會覆寫前一個但是有時我們又需要執行多個相同的事件 on就完成不了我們想要的效果

addEventListener:可以多次系結同一個事件并且不會覆寫上一個事件,

事件代理

**事件代理:**將事件代理到父容器上,這樣修改子元素,父容器都會監聽到,從而執行對應的操作,若是將事件系結到子元素上,假設新增了子元素,又得重新給子元素系結事件,是非常繁瑣的,

事件冒泡,事件捕獲

<div>
  <p>元素</p>
</div>

事件捕獲
當你使用事件捕獲時,父級元素先觸發,子級元素后觸發,即div先觸發,p后觸發,
事件冒泡
當你使用事件冒泡時,子級元素先觸發,父級元素后觸發,即p先觸發,div后觸發,

組織冒泡的方法

第一種:event.stopPropagation();

第二種:return false;

第三種:event.preventDefault();

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

標籤:其他

上一篇:Web前端-JS基礎

下一篇:劍指Offer面試題:07 重建二叉樹

標籤雲
其他(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