主頁 > 前端設計 > JavaScript(八)—— PC 端網頁特效

JavaScript(八)—— PC 端網頁特效

2021-10-10 08:30:31 前端設計

本篇為 JavaScript 系列筆記第八篇,將陸續更新后續內容,參考:黑馬程式員JavaScript核心教程,前端基礎教程

系列筆記:

JavaScript(一)—— 初識JavaScript / 注釋 / 輸入輸出陳述句 / 變數 / 資料型別

JavaScript(二)—— 運算子 / 流程控制 / 陣列

JavaScript(三)—— 函式 / 作用域 / 預決議 / 物件

JavaScript(四)—— 內置物件 / 簡單資料型別與復雜型別

JavaScript(五)—— Web APIs 簡介 / JavaScript 必須掌握的 DOM 操作

JavaScript(六)—— DOM 事件高級

JavaScript(七)—— BOM 瀏覽器物件模型

文章預覽
請添加圖片描述

「一」元素偏移量 offset


offset 系列相關屬性可以 動態的 得到該元素的位置(偏移)、大小等:

  1. 獲得元素距離帶有定位父元素的位置
  2. 獲得元素自身的大小(寬度、高度)
  3. 回傳的數值不帶單位

offset 系列常用屬性如下:
在這里插入圖片描述

  • offsetTopoffsetLeft 屬性

在這里插入圖片描述

  1. 父親有定位,則以 父親 為準,回傳 45
  2. 父親無定位,則以 body 為準,回傳 195
  • offsetWidthoffsetHeight 屬性
  1. 計算數值時包含 paddingborderwidth
  2. 可以動態獲取數值,比如瀏覽器縮小時,數值相應變化
  • offsetParent 屬性

在這里插入圖片描述

  1. 回傳帶有定位的父親,否則回傳 body
  2. 與節點操作中 parentNode 相比,parentNode 回傳最近一級的父親,無論父親是否有定位
  • offset 與 style 區別

offset

  1. offset 可以得到任意樣式表中的樣式值
  2. offset 系列獲得的數值是沒有單位的
  3. offsetWidth 包含 padding、border、width
  4. offsetWidth 等屬性是只讀屬性,只能獲取不能賦值
  5. 只想獲取元素大小位置,offset 更合適

style

  1. style 只能得到行內樣式表中的樣式值
  2. style.width 獲得的是帶有單位的字串
  3. style.width 獲得不包含 padding 和 border 的值
  4. style.width 是可讀寫屬性,可以獲取也可以賦值
  5. 要想給元素更改值,需要用 style

在這里插入圖片描述

  • 案例:獲取滑鼠在盒子內的坐標
    請添加圖片描述
var box = document.querySelector('.box');
box.addEventListener('mousemove', function (e) {
     var x = e.pageX - this.offsetLeft;
     var y = e.pageY - this.offsetTop;
     this.innerHTML = 'x坐標是' + x + ' y坐標是' + y;
 })
 box.addEventListener('mouseout', function () {
     this.innerHTML = '';
 })
  • 案例:模態框拖拽

請添加圖片描述

var login = document.querySelector('.login');
var mask = document.querySelector('.login-bg');
var link = document.querySelector('#link');
var closeBtn = document.querySelector('#closeBtn');
var title = document.querySelector('#title');
// 顯示
link.addEventListener('click', function () {
    mask.style.display = 'block';
    login.style.display = 'block';
})
// 隱藏
closeBtn.addEventListener('click', function () {
    mask.style.display = 'none';
    login.style.display = 'none';
})
// 拖拽
title.addEventListener('mousedown', function (e) {
    var x = e.pageX - login.offsetLeft;
    var y = e.pageY - login.offsetTop; 
    document.addEventListener('mousemove', move);
    function move(e) {
        login.style.left = e.pageX - x + 'px';
        login.style.top = e.pageY - y + 'px';
    }
    document.addEventListener('mouseup', function () {
        document.removeEventListener('mousemove', move);
    })
})
  1. 滑鼠按下 mousedown,獲取滑鼠在盒子中坐標
  2. 滑鼠移動 mousemove,求得模態框的 lefttop
  3. 滑鼠彈起 mouseup,移除注冊事件 removeEventListener
  • 案例:仿京動放大鏡
    請添加圖片描述

部分 HTML 代碼

<div class="preview_img">
    <img src="img/mac_small.jpg" alt="">	<--小圖-->
    <div class="mask"></div>				<--遮罩-->
    <div class="preview_img_big">			<--大圖-->
        <img src="img/mac_big.jpg" alt="" class="big_img">
    </div>
</div>

部分 CSS 代碼

.preview_img {
    position: relative;
    height: 450px;
    border: 1px solid #ccc;
}

.mask {
    display: none;
    position: absolute;
    left: 0;
    top: 0;
    width: 300px;
    height: 300px;
    background: #FEDE4F;
    opacity: .5;        /* 不透明度 */
    border: 1px solid #ccc;
    cursor: move;       /* 滑鼠樣式為移動 */
}

.preview_img_big {
    display: none;
    position: absolute;
    left: 450px;
    top: -1px;
    width: 540px;
    height: 540px;
    border: 1px solid #ccc;
    overflow: hidden;
}

.big_img {
    position: absolute;
    top: 0;
    left: 0;
}

JS 代碼

window.addEventListener('load', function () {
    var preview_img = document.querySelector('.preview_img');
    var mask = document.querySelector('.mask');
    var big = document.querySelector('.preview_img_big');

    preview_img.addEventListener('mouseover', function () {
        mask.style.display = 'block';
        big.style.display = 'block';
    })

    preview_img.addEventListener('mousemove', move);

    function move(e) {
        var x = e.pageX - this.offsetLeft;
        var y = e.pageY - this.offsetTop;
        // 減去遮罩盒子高度一半 
        var maskX = x - mask.offsetWidth / 2;
        var maskY = y - mask.offsetHeight / 2;
        // 最大移動距離(寬高相等)
        var maskMax = preview_img.offsetWidth - mask.offsetWidth;
        if (maskX <= 0) {
            maskX = 0;
        } else if (maskX >= maskMax) {
            maskX = maskMax;
        }
        if (maskY <= 0) {
            maskY = 0;
        } else if (maskY >= maskMax) {
            maskY = maskMax;
        }
        mask.style.left = maskX + 'px';
        mask.style.top = maskY + 'px';
        // 獲得大圖片
        var big_img = document.querySelector('.big_img');
        // 最大移動距離
        var bigMax = big_img.offsetWidth - big.offsetWidth;
        var bigX = maskX * bigMax / maskMax;
        var bigY = maskY * bigMax / maskMax;
        big_img.style.left = -bigX + 'px';
        big_img.style.top = -bigY + 'px';
    }

    preview_img.addEventListener('mouseout', function () {
        mask.style.display = 'none';
        big.style.display = 'none';
    })
})

注意:

  1. 若將 js 檔案放在 html 上面,注意一定要先加載視窗 window.addEventListener('load', function(){}),否則注冊事件系結為空,出現報錯
    在這里插入圖片描述
  2. 理解遮罩層和放大圖片移動的演算法

「二」元素可視區 client


通過 client 相關屬性可以動態的得到該元素的邊框大小、元素大小

在這里插入圖片描述

  • client 系列和 offset 系列區別
    在這里插入圖片描述

「三」元素滾動 scroll


使用 scroll 相關屬性可以動態得到該元素的大小、滾動距離等
在這里插入圖片描述
在這里插入圖片描述

  • onscroll 事件

如果瀏覽器的高(或寬)度不足以顯示整個頁面時,會自動出現滾動條,當滾動條向下滾動時,會觸發 onscroll 事件

  • 案例:仿淘寶固定右側側邊欄
    請添加圖片描述

部分 HTML 代碼
在這里插入圖片描述

JS 代碼

var sliderbar = document.querySelector('.slider-bar');
var banner = document.querySelector('.banner');
 var bannerTop = banner.offsetTop;
 var sliderbarTop = sliderbar.offsetTop - bannerTop;

 var main = document.querySelector('.main');
 var goBack = document.querySelector('.goBack');
 var mainTop = main.offsetTop;

 document.addEventListener('scroll', function (e) {
     if (window.pageYOffset >= bannerTop) {
         sliderbar.style.position = 'fixed';
         sliderbar.style.top = sliderbarTop + 'px';
     } else {
         sliderbar.style.position = 'absolute';
         sliderbar.style.top = '300px';
     }
     if (window.pageYOffset >= mainTop) {
         goBack.style.display = 'block';
     } else {
         goBack.style.display = 'none';
     }
 })

注意:頁面被卷去的頭部,有兼容問題,通常有下面幾種寫法:

  1. 宣告了 DTD(<!DOCTYPE html>),使用 document.documentElement.scrollTop
  2. 未宣告 DTD,使用 document.body.scrollTop
  3. IE9 開始,新方法 window.pageYOffsetwindow.pageXOffset

「四」影片函式


  • 影片實作原理

通過定時器 setInterval() 不斷移動盒子位置,實作步驟:

  1. 獲得盒子當前位置
  2. 通過定時器不斷重復移動單位距離(需要添加定位,使用 element.style.left )
  3. 添加結束定時條件
    請添加圖片描述
    在這里插入圖片描述
  • 影片函式的封裝

可能一個頁面中會多次呼叫影片程序,因此可以將其封裝成函式,

注意:函式需要傳遞 2 個引數,影片物件移動的距離

function animate(obj, target) {
    var timer = setInterval(function () {
        if (obj.offsetLeft >= target) {
            clearInterval(timer);
        }
        obj.style.left = obj.offsetLeft + 2 + 'px';
    }, 10)
}
  • 影片函式給不同元素記錄不同定時器

若每次呼叫都宣告 var timer 變數,會造成占用大量記憶體以及重復命名歧義等問題,因此,這里利用給物件添加屬性的方式進行賦值操作 obj.timer,實作了不同元素指定不同定時器
請添加圖片描述
在這里插入圖片描述

  1. 為避免持續點擊導致開啟多個定時器,應在函式呼叫開始時清除所有定時器
  2. 為避免停止后點擊還會少量移動問題,在到達指定距離后,return 結束函式呼叫
  • 緩動效果原理

緩動影片就是讓元素運動速度有所變化,最常見的是逐漸降速到停止,使得效果更加自然

演算法: 步長 = (目標位置 - 當前位置)/ 10

 var step = (target - obj.offsetLeft) / 10;
 step = step > 0 ? Math.ceil(step) : Math.floor(step);

請添加圖片描述
在這里插入圖片描述

  1. 避免小數問題導致最后無法運動到指定 target, 這里利用了向上取整
  2. 此外,考慮到后退程序,向上取整也出現了問題,因此需要分類來討論
    在這里插入圖片描述
  • 影片函式添加回呼函式

回呼函式原理:函式可以作為一個引數,作為傳遞到另一個函式中

function animate(obj, target, callback) {}	// callback 回呼函式

animate(span, 500, function () {})

請添加圖片描述
在這里插入圖片描述

  • 影片函式封裝到單獨 JS 檔案中

以后會經常使用影片函式,因此可以將其單獨封裝到一個 JS 檔案中,使用時直接參考 JS 檔案即可
在這里插入圖片描述

  • 案例:滑動盒子
    請添加圖片描述
    <div class="sliderbar">
        <span></span>
        <div class="con">問題反饋</div>
    </div>

    <script>
        var sliderbar = document.querySelector('.sliderbar');
        var con = document.querySelector('.con');
        sliderbar.addEventListener('mouseenter', function () {
            animate(con, -160, function () {
                sliderbar.children[0].innerHTML = '→';
            });
        })
        sliderbar.addEventListener('mouseleave', function () {
            animate(con, 0, function () {
                sliderbar.children[0].innerHTML = '←';
            });
        })
    </script>
  1. mouseentermouseleavemouseovermouseout 用法一樣,區別在于前者無法冒泡
  2. 注意要參考 animate.js

「五」常見網頁特效案例


  • 案例:淘寶輪播圖
    請添加圖片描述

JS 代碼主要利用
在這里插入圖片描述

  1. animate.js 代碼
function animate(obj, target, callback) {
    clearInterval(obj.timer);
    obj.timer = setInterval(function () {
        var step = (target - obj.offsetLeft) / 10;
        step = step > 0 ? Math.ceil(step) : Math.floor(step);
        if (obj.offsetLeft == target) {
            clearInterval(obj.timer);
            callback && callback();
        }
        obj.style.left = obj.offsetLeft + step + 'px';
    }, 15);
}
  1. index.js 代碼
window.addEventListener('load', function () {
    var arrow_l = document.querySelector('.arrow-l');
    var arrow_r = document.querySelector('.arrow-r');
    var focus = document.querySelector('.focus');
    var focusWidth = focus.offsetWidth;


    //  滑鼠經過 focus 顯示隱藏左右按鈕
    focus.addEventListener('mouseenter', function () {
        arrow_l.style.display = 'block';
        arrow_r.style.display = 'block';
        // 滑鼠經過停止自動輪播
        clearInterval(timer);
        timer = null; // 清除定時器變數
    })
    focus.addEventListener('mouseleave', function () {
        arrow_l.style.display = 'none';
        arrow_r.style.display = 'none';
        timer = setInterval(function () {
            //手動呼叫點擊事件
            arrow_r.click();
        }, 2000);
    })


    // 動態生成小圓圈
    var ul = focus.querySelector('ul');
    var ol = focus.querySelector('.circle');
    for (var i = 0; i < ul.children.length; i++) {
        var li = document.createElement('li');
        // 淘寶原始碼中 li 中又創建了 a,其實在這里不創建 a 也可以,本案例暫且依淘寶為準
        var a = document.createElement('a');
        // 記錄索引
        a.setAttribute('index', i);
        ol.appendChild(li);
        li.appendChild(a);
        // 圓圈系結事件
        li.addEventListener('focus', function () {
            this.blur();
        })
 
        a.addEventListener('click', function () {
            // 排他思想,被點擊的圓圈設定 current 樣式
            for (var i = 0; i < ol.children.length; i++) {
                ol.children[i].firstChild.className = '';
            }
            this.className = 'current';

            // 移動圖片
            var index = this.getAttribute('index');
            animate(ul, - index * focusWidth);

            // 修改索引
            num = circle = index;
        })
    }
    ol.children[0].firstChild.className = 'current';

    // 克隆第一張圖片放在 ul 最后,實作無縫滾動(不復制直接添加的話會多出一個小圓圈)
    var first = ul.children[0].cloneNode(true);
    ul.appendChild(first);
    // 點擊右側按鈕, 圖片滾動一張
    var num = 0;
    // circle 控制小圓圈的播放
    var circle = 0;
    // flag 節流閥, 防止連續點擊造成過快播放
    var flag = true;
    // 右側按鈕
    arrow_r.addEventListener('click', function () {
        if (flag) {
            flag = false; // 關閉節流閥
            // 如果走到最后復制的一張圖片,ul 快速復原
            if (num == ul.children.length - 1) {
                ul.style.left = 0;
                num = 0;
            }
            num++;
            animate(ul, -num * focusWidth, function () {
                flag = true; // 打開節流閥
            });
            circle++;
            // 最后一張時復原
            if (circle == ol.children.length) {
                circle = 0;
            }
            // 呼叫函式
            circleChange();
        }
    })
	// 左側按鈕
    arrow_l.addEventListener('click', function () {
        if (flag) {
            flag = false;
            if (num == 0) {
                num = ul.children.length - 1;
                ul.style.left = - num * focusWidth + 'px';
            }
            num--;
            animate(ul, -num * focusWidth, function () {
                flag = true;
            });
            circle--;
            circle = circle < 0 ? ol.children.length - 1 : circle;
            circleChange();
        }
    })

    // 圓圈變色
    function circleChange() {
        for (var i = 0; i < ol.children.length; i++) {
            ol.children[i].firstChild.className = '';
        }
        ol.children[circle].firstChild.className = 'current';
    }

    // 自動播放輪播圖
    var timer = this.setInterval(function () {
        arrow_r.click();
    }, 2000);
})
  1. html 代碼、css 代碼由于篇幅問題不再給出

遇到的問題

  • 開始寫輪播圖效果時,遇到點擊 li 后出現游標持續閃爍的問題,嘗試了各種方法,都沒有很好的解決
    在這里插入圖片描述
    如上圖所示輸入游標
  • 最后靈機一動,發現其實這個問題只需要給整個盒子設定 font-size: 0;,即可完美解決


  • 案例:影片回傳頁面頂部

在此前案例中,回傳頂部使用的是錨點鏈接,在此處介紹一種新方式:

window.scroll(x, y)   // 滾動視窗至檔案中的指定位置

本案例利用 window.scroll(x, y) 配合影片函式 animate 實作影片回傳頂部效果
請添加圖片描述

部分 JS 代碼

goBack.addEventListener('click', function () {
    // 視窗進行滾動, 物件是 window
    animate(window, 0);
    // window.scroll(0, 0);
});

// 影片函式
function animate(obj, target) {
    clearInterval(obj.timer);
    obj.timer = setInterval(function () {
        var step = (target - window.pageYOffset) / 10;
        step = step > 0 ? Math.ceil(step) : Math.floor(step);
        if (window.pageYOffset == target) {
            clearInterval(obj.timer);
        }
        window.scroll(0, window.pageYOffset + step);
    }, 15);
}

這里注意 animate 函式 將引數改為垂直相關,利用 window.pageYOffset


  • 案例:筋斗云導航
    請添加圖片描述
window.addEventListener('load', function () {
    var cloud = document.querySelector('.cloud');
    var c_nav = document.querySelector('.c-nav');
    var lis = c_nav.querySelectorAll('li');

    // 設定變數,記錄起始位置
    var current = 0;
    for (var i = 0; i < lis.length; i++) {
        // 滑鼠進入,當前 li 位置為目標值
        lis[i].addEventListener('mouseenter', function () {
            animate(cloud, this.offsetLeft);
        })
        // 滑鼠離開,回到起始位置
        lis[i].addEventListener('mouseleave', function () {
            animate(cloud, current);
        })
        // 滑鼠點擊,當前位置設為目標值
        lis[i].addEventListener('click', function () {
            current = this.offsetLeft;
        })
    }
})

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

標籤:其他

上一篇:npm publish 時提示需要升級TLS 1.2的解決方案

下一篇:Vue3.0的多種偵聽方式

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