主頁 > 前端設計 > vue-seamless-scroll 從入坑到放棄

vue-seamless-scroll 從入坑到放棄

2021-01-05 10:18:39 前端設計

vue-seamless-scroll從入坑到放棄

  • 一、vue-seamless-scroll是什么?
  • 二、使用步驟
    • 1.引入庫
    • 2.具體使用
  • 三、下面就是我的踩坑之路
    • 1.vue-seamless-scroll中的事件丟失問題
    • 2. 解決事件丟失問題
    • 3.vue-seamless-scroll 中異步資料的問題
    • 4.資料時有時無解決
  • 四、 vue-seamless-scroll 原始碼理解
    • 1.頁面結構分析
    • 2. js邏輯部分分析
      • 2.1 屬性簡單介紹
      • 2.2 computed屬性簡單介紹
      • 2.3 methods方法介紹
          • _initMove初始化方法原始碼分析(主要)
          • _move滾動方法原始碼分析(主要)
  • 五、 個人插件推薦
  • 結語
    • 參考質料

一、vue-seamless-scroll是什么?

vue-seamless-scroll是vue當前使用最多的一個串列回圈滾動插件,它功能強大使用方便,這也是我為什么選擇它來入坑的原因,

二、使用步驟

1.引入庫

//安裝vue-seamless-scroll插件
npm install vue-seamless-scroll --save
//在mian.js檔案中引入
import scroll from 'vue-seamless-scroll'
Vue.use(scroll)

2.具體使用

先貼上官方示例地址

//此處為官方示例地址的demo
<template>
    <vue-seamless-scroll :data="listData" class="seamless-warp">
        <ul class="item">
            <li v-for="item in listData">
                <span class="title" v-text="item.title"></span><span class="date" v-text="item.date"></span>
            </li>
        </ul>
    </vue-seamless-scroll>
</template>
<style lang="scss" scoped>
    .seamless-warp {
        height: 229px;
        overflow: hidden;
    }
</style>
<script>
    export default {
        data () {
            return {
                listData: [{
                   'title': '無縫滾動第一行無縫滾動第一行',
                   'date': '2017-12-16'
                 }, {
                    'title': '無縫滾動第二行無縫滾動第二行',
                    'date': '2017-12-16'
                 }, {
                     'title': '無縫滾動第三行無縫滾動第三行',
                     'date': '2017-12-16'
                 }, {
                     'title': '無縫滾動第四行無縫滾動第四行',
                     'date': '2017-12-16'
                 }, {
                     'title': '無縫滾動第五行無縫滾動第五行',
                     'date': '2017-12-16'
                 }, {
                     'title': '無縫滾動第六行無縫滾動第六行',
                     'date': '2017-12-16'
                 }, {
                     'title': '無縫滾動第七行無縫滾動第七行',
                     'date': '2017-12-16'
                 }, {
                     'title': '無縫滾動第八行無縫滾動第八行',
                     'date': '2017-12-16'
                 }, {
                     'title': '無縫滾動第九行無縫滾動第九行',
                     'date': '2017-12-16'
                 }]
                }
            }
       }
</script>

可以看出使用的方式沒什么難度,這里也貼出官網給出要注意的地方,

注意:需要給父容器一個height和:data='Array’和overfolw:hidden;左右滾動需要給ul容器一個初始化 css width

如果以上步驟沒有你都沒有出錯就應該可以看到效果了,

三、下面就是我的踩坑之路

1.vue-seamless-scroll中的事件丟失問題

我們的業務邏輯大概是這樣的
![在這里插入圖片描述](https://img-blog.csdnimg.cn/20201204095345565.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk5Mjg2Nw==,size_16,color_FFFFFF,t_70
剛開始我還以為可以開心的使用vue-seamless-scroll來做這個效果,但在實作這個滾動容器之后就發現了問題,這里面的點擊事件時有時無,
在這里插入圖片描述
只能說我心態崩了,這是什么情況?

打開F12參看他的滾動容器,發現了他的一個驚天的秘密,
在這里插入圖片描述
??原來他的實作方式是自己復制了一份相同的dom,貼在了原來dom的后面來實作回圈滾動的,看到這里我就猜到問題出現在他復制出來的dom中,又重新試了一下所有的點擊事件,果然有一個dom容器中的點擊事件完全沒有問題,而另一個中的點擊事件沒有任何相應,

碰到這個問題的同學我想肯定不會很少吧,估計都會自己去重新實作一個組件了吧,別急往下看,

2. 解決事件丟失問題

使用 @click="scrollClick($event)"的方式在外層父元素上添加點擊事件來獲取點擊的子dom的方式,再獲取其中的資料來進行下一步的事件處理,

<div
	class="v-scroll"
	v-if="isScroll(item.title)"
	@click="scrollClick($event)">
	 	<vue-seamless-scroll :data="newData" class="list-style ">
		 ...
	     </vue-seamless-scroll>
 </div>

父容器的事件處理

   scrollClick(e) {
       //通過 e.target獲取點擊的dom
       //通過e.target.dataset獲取vuedom中的自定義屬性
       let data = e.target.dataset;
       this.$emit("supervise-detail", data.name, data.type);
    }

在要監聽點擊事件的子dom中的處理

 <span
        :title="itemObj.number2"
        :data-name="itemObj.name"
        :data-type="'all'"
        >/{{ itemObj.number2 }}</span
      >
</span>

這里使用data-屬性的方式來進行屬性系結,以方便父容器的點擊事件中獲取該屬性,
這樣就可以通過其中的屬性來處理相應的事件內容了,

3.vue-seamless-scroll 中異步資料的問題

這個專案的業務邏輯是這樣的,
在這里插入圖片描述
這個問題也是比較頭痛的,當時看到的效果是滾動容器中顯示的資料時有時無,

??原因是其中的資料可能是多個介面回傳回來的,所以vue-seamless-scroll的data更新達不到統一,所以在有些資料還沒有回傳時vue-seamless-scroll就將dom復制出來,而復制出來的dom中的資料不是回應式的,所有就會出現資料時有時無的情況,

這也使我想到了其中的解決辦法,接著往下看,

4.資料時有時無解決

1、使用promise、generator或async的方式來解決異步資料的問題
這里可以使用promise、generator或async的方式來解決異步的問題,使介面順序呼叫, 具體實作就不貼出來了,網上有很多,然后在最后一個介面資料成功回傳時,添加一個是否已全部加載的欄位,并為其賦值為true,以用來在vue-seamless-scroll上使用v-if來控制vdom的渲染,
2、使用key來使vue-seamless-scroll重新渲染
原理都是一樣的,就是通過vue-seamless-scroll的渲染來使其重新復制已經賦好值的dom,具體使用如下:
    <vue-seamless-scroll ref="scrollModule" :data="newData" class="list-style " :key="scrollKey">
    ......
    </vue-seamless-scroll>

在vue的data中添加一個scrollKey,然后系結在vue-seamless-scroll 的組件上,

  methods: {
		......
    upDateKey() {
      this.scrollKey++;
    },
  },

??然后在methods中添加一個upDateKey方法,使key值更新, 這時就可以在該組件中或在其父主鍵中使用$refs.設定的名稱.upDateKey()來修改key值,使其重新渲染,

關于key的使用不清楚的同學可以看一下下面的文章,

Vue 中 強制組件重新渲染的正確方法.

這時只需這介面資料成功回傳時呼叫其方法就可以了,
你以為這就完了?再來扒一扒它的原始碼吧

四、 vue-seamless-scroll 原始碼理解

在這里插入圖片描述
??在已經引入的專案中,打開node_module庫就可以看到其原始碼了,結構也很簡單,主要的就index.js與myClass.vue檔案, index.js檔案是寫vue插件時候的一些配置,感興趣的可以搜一搜vue插件開發,主要的就是myClass.vue檔案,

1.頁面結構分析

查看如下:


<template>
  <div ref="wrap">
    <div :style="leftSwitch" v-if="navigation" :class="leftSwitchClass" @click="leftSwitchClick">
      <slot name="left-switch"></slot>
    </div>
    <div :style="rightSwitch" v-if="navigation" :class="rightSwitchClass" @click="rightSwitchClick">
      <slot name="right-switch"></slot>
    </div>
    <div
      ref="realBox"
      :style="pos"
      @mouseenter="enter"
      @mouseleave="leave"
      @touchstart="touchStart"
      @touchmove="touchMove"
      @touchend="touchEnd"
    >
      <div ref="slotList" :style="float">
        <slot></slot>
      </div>
      <div v-html="copyHtml" :style="float"></div>
    </div>
  </div>
</template>

??這是它全部的頁面結構代碼,是不是很簡潔,在這部分我們主要關注的就是ref="realBox"的div標簽,這個就是它實作回圈滾動的主要dom容器,可以看到這個dom容器上系結了很多事件,這個就是用來監聽pc端的滑鼠移入移出與移動端的手指觸摸事件,在繼續看他里面的結構,很明顯可以看到有一個包含slot標簽的dom容器,和一個帶有v-html="copyHtml"的dom容器,

??看到這里也初步的證明了我們前面的猜想,使用slot插入進來的dom就是資料擁有回應式監聽,事件保存完好的源dom(我們自己插入的dom),而使用v-html 復制出來的dom,就是資料沒有回應式,事件丟失的dom,OK繼續往下看,

2. js邏輯部分分析

2.1 屬性簡單介紹

在這里插入圖片描述
上面這一部分都是一些基礎引數,根據圖上注釋理解即可,繼續走著,

2.2 computed屬性簡單介紹

在這里插入圖片描述

接下來就是它的computed屬性,

??看第一個注釋從leftSwitchState到rightswitch都是在使用它的switch功能時用到的,這偏文章就不做解釋了,而且基本上都是一兩行代碼,注釋也寫的很清楚,所以感興趣的同學可以自行去研究,

接下來兩個就是比較重要的屬性:

??float屬性就是控制兩個滾動容器是水平排列還是垂直排列的動態樣式,
pos屬性,他就是控制滾動容器的滾動方向與速度的動態樣式,

ok繼續往下看

在這里插入圖片描述
這些屬性就比較重要了下面來一個一個講

??defaultOption屬性就是滾動容器的默認配置,如果一些屬性沒用自行配置就會取其中默認的配置,

??options屬性就是將傳入的配置屬性與默認屬性進行合并,得到的最終配置引數的,

??navigation屬性是控制switch模式下的切換按鈕是否顯示的,
??autoPlay屬性是控制容器是否自動滾動的,這里代碼也很簡單,如果為switch模式(是否顯示switch的切換按鈕)默認不自動滾動,而不是swich模式就取傳入進來的值來判斷是否自動滾動,

繼續走著
在這里插入圖片描述
這個就是剩下的computed屬性,上面的截圖中也做了一些簡單的解釋,取幾個主要的我在說一下,

??baseFontSize屬性是計算字體的基礎大小的,主要是用來為realSingleStopWidth與realSingleStopHeight屬性方便計算對應的寬度與高度,

??step屬性是計算滾動的步長(距離)的,在獲取自身的步長時,也將單步滾動的步長計算了看出來,這里作者也對應做出了相對應的警告,警告的內容就是上面的console.error中的內容,

??看到這里一些基本的屬性,就全部看完了,是不是沒什么太復雜的地方,好我們繼續往下看,我們下一步該考慮使用這個組件時他是從哪一步開始執行的,我想聰明的你很快就已經想到了,沒錯就是mounted鉤子函式,

2.3 methods方法介紹

那我們繼續走著

在這里插入圖片描述
??這不要太簡單,我本來想只截下mounted中的代碼,可是只有一行,所以把methods中的方法也貼出來了,那我們就先大致了解一下(我們先猜測一下),

??leftSwitchClick rightSwitchClick 方法看名字就能知道這是switch模式下,左邊按鈕與右邊按鈕的點擊事件,

??_cancle 方法的英文意思時快取,那我們就將它先理解為一些快取操作相關的方法,

??touchStart、touchMove、touchEnd 方法,我想看名字你們也應該猜到了這是移動端相關的手指觸摸事件,

??enter、leave方法,這兩個我們之前是不是在哪見過,是的它們就是滾動主容器上系結的滑鼠事件,忘記的可以回過頭去,在講解template結構上看一下,

??_move方法,名字是移動的意思,那我們就先將它理解為移動相關的函式,

??_initMove方法,這個就是我們剛才mounted中的初始化函式,我們等下就會詳細講解,

??_dataWarm方法,這個看意思是資料警告,如果展示還不理解先放一下,等下我們回頭再看,

??_startMove_stopMove方法,這個也根據名字見他們風別理解為開始移動與停止移動的方法,

看到這里你可能會有這樣的感觸,原來命名方法或屬性的時候,名字取得與功能相對貼進一點是多么的友好!閑話少說,我們進入主要的部分,

_initMove初始化方法原始碼分析(主要)

在這里插入圖片描述
??從全域來看,_initMove方法使用vue中的nextTick方法進行異步回呼處理,然后在器方法中獲取一些基礎的屬性,根據這些屬性進行一些滾動之前的初始化,

??先從第三四行代碼開始看,它呼叫了一下_dataWarm方法與清空copyHtml的操作,這里有遇到了這個_dataWarm方法,心急的同學可能會馬上去看一下里面的內容,不過我喜歡先讀完一整個方法在去看一些它使用過而我沒有了解的方法,那我們就繼續往下走,

第一個方框部分:
??這段代碼的意思是,如果為水平滾動這通過ref屬性來獲取整個容器的寬高與插入進來dom容器的寬度,代碼如下

this.height = this.$refs.wrap.offsetHeight
this.width = this.$refs.wrap.offsetWidth
let slotListWidth = this.$refs.slotList.offsetWidth

再根據autoPlay屬性來修正滾動容器的寬度與滾動父容器的寬度,最后再根據slotListWidth 設定內容的實際寬度realBoxWidth

??第二個方框部分,是根據autoplay屬性來動態切換影片的樣式,

??第三個方框部分,是比較主要的,他通過scrollSwitch來判斷是否可以滾動,如果可以就重新開啟一個計時器,并將插入進來的dom使用$ref的方式獲取其中的dom保存下來,然后通過一個settimeout來實作異步獲取父滾動容器的高度,并呼叫滾動函式開始滾動,否則就會呼叫_cancle方法做一些快取處理,并初始化yPosxPos屬性,

看到這里肯定有一些心急的同學把這個_cancle方法看完了,那我這里也回頭看下這個處理快取的函式吧,
在這里插入圖片描述
這里面只有一行代碼,就是清除使用requestAnimationFrame方法所造成的快取,

那我們在回頭看一下_dataWarm方法,
在這里插入圖片描述
看的出來作者還是很貼心的,接下來就是核心的_move方法了,

_move滾動方法原始碼分析(主要)

由于_move方法的代碼比較多,所以這里將逐層講解,這樣也可以更清晰的看出該部分的結構,便于我們更好的閱讀原始碼,
在這里插入圖片描述
??這里先看最外層,作者標出的注釋也比較貼心,所以這里我們理解起來也很容易,他先使用了一個開關變數來模擬滑鼠的hover事件,實作停止與滾動的切換,接著就是滾動之前的快取清理操作,

??最后就是這個滾動函了數實作滾動的主邏輯,這里他使用了requestAnimationFrame方法來實作滾動的效果,在requestAnimationFrame中的這個回呼方法就是滾動的主函式,在這個函式后還使用bind方法將this保存了下來,以防回呼函式中的this指向問題,

??不得不提一下要注意使用requestAnimationFrame與settimeout來實作影片的區別了,具體的區別也是比較容易搜到的,我也提供了一下相關的質料,

setTimeout, setInterval 與 requestAnimationFrame 隱藏的各種坑

在這里插入圖片描述
??這部分就是我們重點關注的物件,來看看這里可是怎么實作的,

??雖然其中的部分代碼沒有展開,但我們還是可以從注釋與定義的屬性名中猜到他們是做什么的,截圖中我也做了對應的注釋,函式的開始通過系結this來獲取滾動容器的真實寬度與高度,滾動的方向,單步停止等待時間、步長,在跟據這些屬性做出下面對應的一些邏輯操作(根據滾動方向與單步滾動模式下做出的一些對應的邏輯操作),

在這里插入圖片描述
??先展開框出來的第一部分,截圖中我沒有添加注釋,因為這里也是比較簡單,我們先把帶有注釋的上與左一同理解,下與右一同理解,他們只有滾動變化的屬性(xPos與yPos)不同其他邏輯都是一模一樣的,那這里我就把帶有注釋上與下拿出來詳細解釋一下,

上:如果y軸方向滾動距離的絕對值(yPos的滾動距離)大于等于父容器高度的一半,就將y軸滾動的位置賦值為起始位置,再觸發外部的ScrollEnd方法,然后就是根據滾動步長來計算y軸滾動的位置,

下:如果y軸方向滾動距離的絕對值(yPos的滾動距離)小于等于滾動的起始位置時,就將y軸滾動的位置賦值為父容器高度的一半的負值,再觸發外部的ScrollEnd方法,然后就是根據滾動步長來計算y軸滾動的位置,

在這里插入圖片描述
我們來根據這張圖理解一下,假設頁面剛好滾動到如圖這種情況,然后繼續向上滾動,剛好滾動到我們插入進來的dom完全隱藏時(剛好滾動了一個dom的高度),他就會將滾動的位置初始為起始的位置,如此往復,就達到了回圈滾動的效果,

向下滾動也可以想象一下滾動到當前位置時,我們插入進來的dom上面沒有dom了,所以就將位置向前了一個dom容器的高度,在如此往復,

接下來就是單步滾動模式下的邏輯了,
在這里插入圖片描述
??這里也是非常簡單的,先將單步滾動的定時器清除掉,在進入判斷時寬度的單步滾動模式還是高度單步滾動模式,看判斷是寬度還是高度單步滾動的兩個if判斷中的內容,是不是一模一樣,所以不要怕干就完了,

??同樣的先判斷realSingleStopHeight或realSingleStopWidth是否存在,再通過滾動的距離對realSingleStopHeight或realSingleStopWidth取余,看是否小于步長,如果小于就進入單步定時器進行等待滾動,否則直接呼叫move方法進行滾動,是不是很簡單,

??到這里我們對vue-seamless-scroll中的核心原始碼就全部講解完畢了,如果有同學還對它其他部分的原始碼感興趣,可以根據這個分析思路繼續去了解一下,相信你們的能力一定可以的,

五、 個人插件推薦

??在這篇文章的最后我也帶上一點私貨,那就是我自己實作的一個回圈滾動插件,這個插件雖然沒有vue-seamless-scroll這個功能豐富,但他將vue-seamless-scroll不足的地方都彌補了一下,包括復制出來dom的點擊事件,及資料的回應依賴都保存了下來,還增加了滑鼠的滾輪模式,避免與滾動中的資料互動時的尷尬問題(例:滾動過去的資料要在等下一輪滾動才能交換),

插件地址:
https://www.npmjs.com/package/@david-j/vue-j-scroll
效果圖:

在這里插入圖片描述
圖中滑鼠懸浮再滾動容器上仍何以使用滾輪控制滾動,如果想與滾動過去的某一條資料互動就不需要再等一個輪回了,是不是解決了某些同學的燃眉之急,如果感興趣并且使用了該插件,還請各位同學多多反饋,我會積極的對插件中的問題及時修復,功能上也會相對做出擴展的,

結語

好了這篇文章到這里就完全結束了,文章中我的一些個人看法較多,如果各位大佬們感覺有什么不足之處可盡情提出,我將及時的做出修改與答復,希望我們同學習,同進步,以后有時間我還會在寫一些其他方面的文章的,希望大家多多支持,

參考質料

vue-seamless-scroll使用中遇到關于click的問題.

Vue 中 強制組件重新渲染的正確方法.

setTimeout, setInterval 與 requestAnimationFrame 隱藏的各種坑

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

標籤:其他

上一篇:海龜 (turtle) 畫圖實戰任務(三):繪制彩虹條及繪制隨機顏色、粗細、瓣數的雪花

下一篇:【JavaScript】原生js中運算子以及流程控制

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