92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线

首頁

JavaScript自定義事件廣播與訂閱

前端達人

昨天寫聊天室用到nodejs的event模塊,今天也用JavaScript前端的 event寫一個,通過一次觸發,全局響應,接下來做單頁應用,嘗試不以傳統方式進行事件處理,改為以自定義event進行處理,看看對傳統單頁應用的與我的想法在實際實施上有什么區別和影響。

<!DOCTYPE html> <html> <head lang="zh-CN"> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"/> <title></title> </head> <body> <input id="bu1" type="button" value="點我"> <script> //自定義test1事件 var ev1 = new Event('t1', {bubbles: 'true', cancelable: 'true'});
    ev1.aaa='ev1'; //創建event的對象實例。 var ev2 = document.createEvent('HTMLEvents'); // 3個參數:事件類型,是否冒泡,是否阻止瀏覽器的默認行為 ev2.initEvent('t2', true, true);
    ev2.aaa = 'ev2';

    document.getElementById("bu1").addEventListener('click', function () { document.dispatchEvent(ev1);
        document.dispatchEvent(ev2);
    }, false);

    (function () { document.addEventListener('t1', function (e) { console.log(e.aaa+1);
        }, false); //document上綁定自定義事件oneating document.addEventListener('t2', function (e) { console.log(e.aaa+2);
        }, false);
    })();
    (function () { document.addEventListener('t1', function (e) { console.log(e.aaa+3);
        }, false); //document上綁定自定義事件oneating document.addEventListener('t2', function (e) { console.log(e.aaa+4);
        }, false);
    })();
    (function () { document.addEventListener('t1', function (e) { console.log(e.aaa+5);
        }, false); //document上綁定自定義事件oneating document.addEventListener('t2', function (e) { console.log(e.aaa+6);
        }, false);
    })(); </script> </body> </html>
            
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57

input輸入框改變顏色 以及input輸入內容更改顏色

前端達人

效果圖
在這里插入圖片描述
1- 改變input輸入框顏色
border: 1px solid pink;
2-改變input輸入內容顏色
color: pink;
全部代碼

<!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>css新增屬性值</title>
    <style>
        /* 必須是input元素;但是同時也具備input元素有value這個值    用中括號[]*/
        /* input[value]{
            color:red
        } */

        *{
            padding: 0;
            margin: 0;
        }
        input[type=password]{
            color: pink;
            border: 1px solid pink;
            outline: none;

        }
    </style>
</head>
<body>
    <!--1.利用屬性選擇器就可以不用借助于類或者id選擇器  -->

    <!-- <input type="text" value="請輸入你喜歡的人">
    <input type="text"> -->
      <!-- 2.屬性選擇器還可以選擇屬性=值的某些元素 -->
      <input type="text">
      <input type="password">

</body>
</html>``` 
            
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

jquery 根據下標獲取classname,以及其子元素,修改classname的值

前端達人

1. 根據下標獲取對應的classname,實現點擊按鈕觸發當前塊的點擊事件

<div class="right" @click="meetingfileVisible(index)">
  <span class="foldIcon">
     <i class="el-icon-caret-bottom"></i>
  </span>
</div>
<div class="meeting-file">
  <span>與現實生活一致</span>
</div> 
            
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
.meeting-file{ display:none; } 
            
  • 1
  • 2
  • 3
meetingfileVisible(index) { $(".meeting-file").eq(index).slideToggle("slow"); var cal =$(".foldIcon").eq(index).children("i").attr("class"); cal = cal === 'el-icon-caret-bottom' ? 'el-icon-caret-top' : 'el-icon-caret-bottom'; $(".foldIcon").eq(index).children("i").attr("class", cal); }, 
            
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

jquery里判斷數組內是否包含了指定的值或元素的方法

前端達人

本文講的是在jquery里,如何判斷一個數組里是否包含了指定的值,變量,或其它對象元素的方法。

在jquery里,我們可以用$.inArray來判斷一個數組里是否包含了指定的值或其它對象元素,來看一個簡單的實例:


    
  1. var arr=["aijquery","jquery","I like it"];
  2. var str="aijquery.cn";
  3. if($.inArray(str,arr)<0){
  4. alert("數組里不包含!");
  5. }

$.inArray是用來獲取指定的值在數組中的位置,從0開始計數(如果沒有找到則返回 -1 。

 

上面的數組只是普通的字符型數組,下面我們來看其它類型的數組,比如jquery里用$.makeArray來生成的HTML元素類數組:


    
  1. //我們首先使用$.makeArray來生成一個數組
  2. var arr=$.makeArray($("div"));

現在假設這些div里,我們其中有一個ID為"aijquery"的div,那么我們是否可以用上面的方法來判斷這個div是否包含在這個數組里呢?

答案是可以的,不過需要注意轉換jquery對象為js對象,來看下面站長的測試結果:


    
  1. $.inArray($("#aijquery"),arr);//返回-1 這是錯誤的結果
  2. $.inArray($("#aijquery")[0],arr);//返回0 這才是正確的結果

 

 

PS:關于jquery對象與js對象之間的轉換:jquery對象與dom對象之間互相轉換的方法,使jquery對象可以直接使用js里的方法

 

 
<!doctype html>
<html lang="en">
<head>
<title>$.inArray判斷元素是否包含在數組中的在線演示-aijQuery.cn</title>
<script language="JavaScript" src="http://cdn.bootcss.com/jquery/1.9.1/jquery.min.js"></script>
<link rel="stylesheet" >
</head>
<body>
  <div id="aijquery">aijquery</div>
  <div>1</div><div>2</div><div>3</div>
  <P id="inarray">div#aijquery在數組里的位置是:</P>
<script language="javascript"> var arr=$.makeArray($("div")); //在測試的時候,可以把下面代碼中的[0]去掉,換成jquery對象來試 $("#inarray").append($.inArray($("#aijquery")[0],arr)); </script>
</body>
</html>
View Code

摘自:http://www.aijquery.cn/Html/jqueryrumen/79.html


藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請加微信ban_lanlan,報下信息,藍小助會請您入群。歡迎您加入噢~~
希望得到建議咨詢、商務合作,也請與我們聯系01063334945。 

分享此文一切功德,皆悉回向給文章原作者及眾讀者. 免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。 

藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務、UI設計公司、界面設計公司、UI設計服務公司、數據可視化設計公司、UI交互設計公司、高端網站設計公司、UI咨詢、用戶體驗公司、軟件界面設計公司

關于vue播放flv,m3u8視頻流(監控)的方法

前端達人

前文:隨著前端大屏頁面的逐漸壯大,客戶的需求也越來越多,大屏上面展示的事物也越來越豐     富。其中實時播放監控的需求逐步增加,視頻流格式也是有很多種,用到最多的.flv、.m3u8。

一、 JessibucaPlayer插件用來播放flv流

1.首先是先把文件放在vue項目的public下面

2.在index.html文件里面引入 index.js文件(直接引入即可)

 3.把封裝好的JessibucaPlayer組件放到公共components


  1. <template>
  2. <div class="jessibuca-player" style="width: 100%; height: 100%">
  3. <div class="container" :id="id" ref="container"></div>
  4. </div>
  5. </template>
  6. <script>
  7. export default {
  8. name: "JessibucaPlayer",
  9. props: {
  10. videoUrl: {
  11. type: String,
  12. default: ""
  13. },
  14. id: {
  15. type: Number,
  16. required: true
  17. }
  18. },
  19. data() {
  20. return {
  21. jessibuca: null // jessibuca 實例化對象
  22. };
  23. },
  24. methods: {
  25. init() {
  26. this.jessibuca = new window.Jessibuca({
  27. container: document.getElementById(this.id), // 播放器容器,若為 string ,則底層調用的是 document.getElementById('id')
  28. videoBuffer: 0.2, // 設置最大緩沖時長,單位毫秒,播放器會自動消除延遲。
  29. forceNoOffscreen: true, // 是否不使用離屏模式(提升渲染能力)
  30. hasAudio: false, // 是否有音頻
  31. rotate: 0, // 設置旋轉角度,只支持,0(默認) ,180,270 三個值
  32. isResize: false, // 1.當為true的時候:視頻畫面做等比縮放后,高或寬對齊canvas區域,畫面不被拉伸,但有黑邊;2.當為false的時候:視頻畫面完全填充canvas區域,畫面會被拉伸
  33. isFullSize: true, // 當為true的時候:視頻畫面做等比縮放后,完全填充canvas區域,畫面不被拉伸,沒有黑邊,但畫面顯示不全
  34. debug: false, // 是否開啟控制臺調試打印
  35. timeout: 30, // 設置超時時長, 單位秒,在連接成功之前和播放中途,如果超過設定時長無數據返回,則回調timeout事件
  36. supportDblclickFullscreen: true, // 是否支持屏幕的雙擊事件,觸發全屏,取消全屏事件。
  37. showBandwidth: false, // 是否顯示網速
  38. operateBtns: {
  39. // 配置功能
  40. fullscreen: false, // 是否顯示全屏按鈕
  41. screenshot: false, // 是否顯示截圖按鈕
  42. play: false, // 是否顯示播放暫停按鈕
  43. audio: false // 是否顯示聲音按鈕
  44. },
  45. keepScreenOn: false, // 開啟屏幕常亮,在手機瀏覽器上, canvas標簽渲染視頻并不會像video標簽那樣保持屏幕常亮。
  46. isNotMute: false, // 是否開啟聲音,默認是關閉聲音播放的。
  47. loadingText: "加載中...", // 加載過程中文案。
  48. background: "" // 背景圖片。
  49. });
  50. // 事件:
  51. this.jessibuca_load()
  52. // 1. 監聽 jessibuca 初始化事件。
  53. this.jessibuca.on("load", () => {
  54. this.jessibuca_load()});
  55. // 2. 信息,包含錯誤信息
  56. this.jessibuca.on("log", data => this.jessibuca_log(data));
  57. // 3. 觸發暫停事件
  58. this.jessibuca.on("pause", this.jessibuca_pause);
  59. // 4. 觸發播放事件
  60. this.jessibuca.on("play", this.jessibuca_play);
  61. // 5. 當前是否全屏
  62. this.jessibuca.on("fullscreen", this.jessibuca_fullscreen);
  63. // 6. 觸發聲音事件,返回boolean值
  64. this.jessibuca.on("mute", this.jessibuca_mute);
  65. // 7. 當解析出音頻信息時回調
  66. this.jessibuca.on("audioInfo", this.jessibuca_audioInfo);
  67. // 8. 當解析出視頻信息時回調
  68. this.jessibuca.on("videoInfo", this.jessibuca_videoInfo);
  69. // 9. 錯誤信息
  70. this.jessibuca.on("error", this.jessibuca_error);
  71. // 10. 當設定的超時時間內無數據返回,則回調
  72. this.jessibuca.on("timeout", this.jessibuca_timeout);
  73. // 11. 流狀態統計,流開始播放后回調,每秒1次
  74. this.jessibuca.on("start", this.jessibuca_start);
  75. // 12. 渲染性能統計,流開始播放后回調,每秒1次
  76. this.jessibuca.on("performance", this.jessibuca_performance);
  77. // 13. 當前網速, 單位KB 每秒1次,
  78. this.jessibuca.on("kBps", this.jessibuca_kBps);
  79. },
  80. // 事件:
  81. jessibuca_load() {
  82. // 監聽 jessibuca 初始化事件。
  83. console.log("on load");
  84. console.log("module", this.videoUrl);
  85. this.methods_play(this.videoUrl);
  86. },
  87. jessibuca_log(data) {
  88. // 信息,包含錯誤信息
  89. console.log("on log", data);
  90. },
  91. jessibuca_pause(flag) {
  92. // 觸發暫停事件
  93. console.log("on pause", flag);
  94. },
  95. jessibuca_play(flag) {
  96. // 觸發播放事件
  97. console.log("on play", flag);
  98. },
  99. jessibuca_fullscreen(flag) {
  100. // 當前是否全屏
  101. console.log("on fullscreen", flag);
  102. if (flag) {
  103. let myEvent = new Event("resize");
  104. setTimeout(() => {
  105. window.dispatchEvent(myEvent);
  106. }, 100);
  107. }
  108. },
  109. jessibuca_mute(flag) {
  110. // 觸發聲音事件
  111. console.log("on mute", flag);
  112. },
  113. jessibuca_audioInfo(data) {
  114. // 當解析出音頻信息時回調,2個回調參數
  115. // 1. numOfChannels:聲頻通道
  116. // 2. sampleRate 采樣率
  117. console.log("audioInfo", data);
  118. },
  119. jessibuca_videoInfo(data) {
  120. // 當解析出視頻信息時回調
  121. // 1. w:視頻寬
  122. // 2. h:視頻高
  123. console.log("videoInfo", data);
  124. },
  125. jessibuca_error(error) {
  126. // 錯誤信息
  127. console.log("error:", error);
  128. },
  129. jessibuca_timeout() {
  130. // 當設定的超時時間內無數據返回,則回調
  131. console.log("timeout");
  132. },
  133. jessibuca_start(s) {
  134. // 流狀態統計,流開始播放后回調,每秒1次
  135. // 1. buf: 當前緩沖區時長,單位毫秒
  136. // 2. fps: 當前視頻幀率,
  137. // 3. abps: 當前音頻碼率,單位bit,
  138. // 4. vbps: 當前視頻碼率,單位bit,
  139. // 5. ts:當前視頻幀pts,單位毫秒
  140. // console.log('stats is', s);
  141. },
  142. jessibuca_performance(performance) {
  143. // 渲染性能統計,流開始播放后回調,每秒1次。
  144. // 0: 表示卡頓、1: 表示流暢、2: 表示非常流程
  145. // console.log('performance', performance);
  146. },
  147. jessibuca_kBps(kBps) {
  148. // 當前網速, 單位KB 每秒1次,
  149. // console.log('kBps', kBps);
  150. },
  151. // 方法:
  152. methods_play(url) {
  153. // 播放
  154. if (this.jessibuca.hasLoaded()) {
  155. this.jessibuca.play(url);
  156. } else {
  157. console.error("視頻數據未加載完畢,請稍后操作");
  158. }
  159. },
  160. methods_mute() {
  161. // 靜音
  162. this.jessibuca.mute();
  163. },
  164. methods_cancelMute() {
  165. // 取消靜音
  166. this.jessibuca.cancelMute();
  167. },
  168. methods_pause() {
  169. // 暫停
  170. this.jessibuca.pause();
  171. },
  172. methods_setVolume(volume) {
  173. // 設置音量
  174. this.jessibuca.setVolume(volume);
  175. },
  176. methods_setRotate(rotate) {
  177. // 設置旋轉角度 0\180\270
  178. this.jessibuca.setRotate(rotate);
  179. },
  180. methods_destroy() {
  181. // 關閉視頻,釋放底層資源
  182. if (this.jessibuca) {
  183. this.jessibuca.destroy();
  184. }
  185. },
  186. methods_fullscreen(flag) {
  187. // 全屏(取消全屏)播放視頻
  188. this.jessibuca.setFullscreen(flag);
  189. },
  190. methods_screenShot() {
  191. // 截圖
  192. // 1. screenshot(filename, format, quality)
  193. // 2. {string} filename、 {string} format、{number} quality
  194. // 3.filename: 保存的文件名, 默認 時間戳、format : 截圖的格式,可選png或jpeg或者webp ,默認 png、quality: 可選參數,當格式是jpeg或者webp時,壓縮質量,取值0 ~ 1 ,默認 0.92
  195. this.jessibuca.screenshot();
  196. },
  197. methods_setBufferTime(time) {
  198. // 設置最大緩沖時長,單位秒,播放器會自動消除延遲。
  199. // {number} time
  200. this.jessibuca.setBufferTime(Number(time));
  201. },
  202. methods_setScaleMode(mode) {
  203. // 設置播放器填充
  204. // 1. 0 視頻畫面完全填充canvas區域,畫面會被拉伸 等同于參數 isResize 為false
  205. // 2. 1 視頻畫面做等比縮放后,高或寬對齊canvas區域,畫面不被拉伸,但有黑邊 等同于參數 isResize 為true
  206. // 3. 2 視頻畫面做等比縮放后,完全填充canvas區域,畫面不被拉伸,沒有黑邊,但畫面顯示不全 等同于參數 isFullSize 為true
  207. this.jessibuca.setScaleMode(Number(mode));
  208. },
  209. restartPlay() {
  210. // 重新加載
  211. this.methods_destroy();
  212. this.methods_play(this.videoUrl);
  213. }
  214. },
  215. mounted() {
  216. this.init();
  217. window.onerror = msg => (this.err = msg);
  218. },
  219. beforeDestroy() {
  220. if (this.jessibuca) this.jessibuca.destroy();
  221. }
  222. };
  223. </script>
  224. <style>
  225. @import url("./JessibucaPlayer.css");
  226. </style>

 4.最后再自己用到的文件里面 引入組件即可

 如有想要文件的請私聊

二、easyplayer插件播放m3u8流

教程:

1.首先npm安裝EasyPlayer、copy-webpack-plugin
ps:copy-webpack-plugin版本一定一定一定不能大于6.0,否則會報錯。


  1. npm install @easydarwin/easyplayer --save
  2. npm install copy-webpack-plugin@5.1.2 --save-dev

2.最重要的地方 一定要把這個地方弄好 那就是在vue.config.js里面


  1. const CopyWebpackPlugin = require('copy-webpack-plugin')
  2. configureWebpack: {
  3. plugins:[
  4. new CopyWebpackPlugin([
  5. {
  6. from: 'node_modules/@easydarwin/easyplayer/dist/component/EasyPlayer.swf',
  7. to: './libs/EasyPlayer/'
  8. },
  9. {
  10. from: 'node_modules/@easydarwin/easyplayer/dist/component/crossdomain.xml',
  11. to: './libs/EasyPlayer/'
  12. },
  13. {
  14. from: 'node_modules/@easydarwin/easyplayer/dist/component/EasyPlayer-lib.min.js',
  15. to: './libs/EasyPlayer/'
  16. }
  17. ])
  18. ]
  19. }

3.還需要在public/index.html 引入EasyPlayer-lib.min.js,可以直接在node_modules里找到@easydarwin下的dist/compent/EasyPlayer-lib.min.js復制到pubilc目錄下,還有需要EasyPlayer.wasm同樣放到public目錄下

 4.引入組件使用

 最后效果



藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請加微信ban_lanlan,報下信息,藍小助會請您入群。歡迎您加入噢~~
希望得到建議咨詢、商務合作,也請與我們聯系01063334945。 

分享此文一切功德,皆悉回向給文章原作者及眾讀者. 免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。 

藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服務、UI設計公司、界面設計公司、UI設計服務公司、數據可視化設計公司、UI交互設計公司、高端網站設計公司、UI咨詢、用戶體驗公司、軟件界面設計公司。

總結vue2.0與vue3.0的區別,讓你快速上手

前端達人

1:vue3.0和2.0的區別

2.0數據雙向綁定方面

Vue2.0使用Object.defineProperty

原理:通過使用 Object.defineProperty 來劫持對象屬性的 geter 和 seter 操作,當數據發生改變發出通知

// 數據
let data = {
    title: '',
    // 備份數據
    _data: {}
}
// 定義特性
Object.defineProperty(data, 'title', {
    // 定義特性屬性或者特性方法
    // 取值方法
    get() {
        // console.log('get')
        // 注意:不能通過自身屬性取值
        // return this.title
        // 返回備份的數據
        return this._data.title;
    },
    // 賦值方法
    set(value) {
        // this指向對象
        // 注意:不能為自身屬性賦值
        // this.title = value
        // 我們可以向備份數據中存儲
        this._data.title = value;
        // console.log('set')
        // 更新視圖
        updateView(this._data)
    }
})
// 視圖模板
let tpl = document.getElementById('app').innerHTML
// 實現更新視圖的方法
function updateView(data) {
    // 處理模板
    let html = tpl.replace(/{{(w+)}}/g, (match, $1) => {
        // 從data中獲取數據
        return data[$1] || ''
    })
    // 更新視圖
    document.getElementById('app').innerHTML = html;
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

Vue3.0數據綁定

使用ES6的新特性porxy

原理:通過ES6的新特性proxy來劫持數據,當數據改變時發出通知

 <!DOCTYPE html>
  <html lang="en">
  <head>
      <meta charset="UTF-8">
      <meta name="yingaxiang" content="width=device-width, initial-scale=1.0">
      <title>vue3.0數據雙向綁定</title>
  </head>
  <body>
      <div>
         <input type="text" id="input">
         <span id="text"></span>
     </div>
 </body>
 </html>
 <script>
     var obj = {};
     var obj1 = new Proxy(obj, {
         // target就是第一個參數obj, receive就是返回的obj(返回的proxy對象)
         get: function (target, key, receive) {
             // 返回該屬性值
             return target[key];
         },
         set: function (target, key, newVal, receive) {
             // 執行賦值操作
             target[key] = newVal;
             document.getElementById('text').innerHTML = target[key];
         }
     })
     document.addEventListener('keyup', function (e) {
         obj1[0] = e.target.value;
     });
 </script> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

總結:

Vue2.x版本中的雙向綁定不能檢測到下標的變化
proxy可以劫持整個對象,并返回一個新對象

2: 創建項目

未創建過vue腳手架得同學 或者從線上拉項目下來得同學 可以首先 查一下 當前版本

1:查看當前版本,如果是2開頭說明當前使用的是vue-cli2,3開頭的話就是vue-cli4

vue --version 
  • 1

2:如果無法識別vue命令說明沒有安裝vue-cli,使用以下說明進行安裝
安裝3.0版本: 目前新項目搭建腳手架默認安裝得是3.0版本

npm install -g vue-cli 
  • 1

如果是舊項目2.0版本到3.0切換得同學,即卸載當前版本,安裝另外的版本
從2.0升級到3.0:

npm uninstall -g vue-cli

npm install -g @vue/cli 
  • 1
  • 2
  • 3

如果想從新版本降到舊版本得同學 看這里??!

從3.0降到2.0:

npm uninstall -g @vue/cli
npm install -g vue-cli 
  • 1
  • 2

項目初始化

初始化,vue init <模板名稱(webpack比較常用)> [項目名稱]

vue init webpack cli2-test 
  • 1

2.0項目初始化參數介紹

//項目名稱

Project name ...

//作者的信息,會默認從git中讀取信息

Project description ...

Author ...

//vue build的選項 1.runtime-compiler 2.runtime-only (一般選第一個就好)

vue build ...

//是否安裝vue-router,一般選用YES,省去手動創建路由

Install vue-router? ..

//是否使用ESLint檢測代碼規范,規范可根據選項選擇不同的規范庫或者自己添加規范

use ESLint to link your code

//是否寫單元測試 (一般不使用)

Set up unit tests

//是否使用Nightwatch來進行e2e測試 (2代表to e to e 點對點)

Setup e2e test with Nightwatch?

//使用npm或者yarn包管理工具

use npm

use yarn 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

3.0初始化,vue create [項目名稱]

vue create cli3-test

?項目初始化參數介紹

//選擇一個配置方式
 please pick a perset  (一般選最后一個Manually select features(手動選擇特性) )
 //選擇對于你的工程所需要的特性 (用空格選擇)
 check the features needed for your project
( ) Babel //轉碼器,可以將ES6代碼轉為ES5代碼,從而在現有環境執行。 
( ) TypeScript// TypeScript是一個JavaScript(后綴.js)的超集(后綴.ts)包含并擴展了 JavaScript 的語法,需要被編譯輸出為 JavaScript在瀏覽器運行,目前較少人再用
( ) Progressive Web App (PWA) Support// 漸進式Web應用程序
( ) Router // vue-router(vue路由)
( ) Vuex // vuex(vue的狀態管理模式)
( ) CSS Pre-processors // CSS 預處理器(如:less、sass)
( ) Linter / Formatter // 代碼風格檢查和格式化(如:ESlint)
( ) Unit Testing // 單元測試(unit tests)
( ) E2E Testing // e2e(end to end) 測試
 //對應的配置文件單獨生成還是放在package.json里
 where do you prefer placing config for babel
 //要不要把剛才自己選擇的配置保存下來
 save this as a preset for future projects? 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

3:項目的目錄

Vue2.0版本目錄

[這里是圖片001]

Vue3.x 版本目錄

[這里是圖片002]

總結:

  • vue-cli2.0與3.0在目錄結構方面,有明顯的不同
  • vue-cli3.0移除了配置文件目錄,config 和 build 文件夾
  • 同時移除了 static 靜態文件夾,新增了 public 文件夾,打開層級目錄還會發現, index.html 移動到 public 中
  • 3.0 config文件已經被移除,但是多了.env.production和env.development文件,除了文件位置,實際配置起來和2.0沒什么不同
  • 沒了config文件,跨域需要配置域名時,從config/index.js 挪到了vue.config.js中,配置方法不變
  • 移除了 static 文件夾,新增 public 文件夾,并且 index.html 移動到 public 中
    在 src 文件夾中新增了 views 文件夾,用于分類 視圖組件 和 公共組件

4: 3.0版本中項目環境變量配置文件沒有了(dev.env.js / prod.env.js)、

我們可以通過在項目根目錄下手動創建不同環境的配置文件,具體的環境變量名稱由package.json中運行參數決定,下面舉個例子添加development、production和uat版本的環境變量:

//  .env.delelopment
NODE_ENV=development
VUE_APP_MODE=development
BASE_URL=/develop
// .env.production
NODE_ENV=production
VUE_APP_MODE=production
BASE_URL=/api

// .env.uat
NODE_ENV=production
VUE_APP_MODE=uat
BASE_URL=/uat

不同得環境發不同的包 同學要配置得可以參考

// package.json
----
"scripts": {
   "serve": "vue-cli-service serve",
   "build:uat": "vue-cli-service build --mode uat", // 通過 --mode來運行不同的環境,自動識別到.env.uat配置文件
   "build:production": "vue-cli-service build --mode production",
   "lint": "vue-cli-service lint"
 }, 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

3.0版本中不同環境的webpack配置文件也沒有了(webpack.base.conf.js / webpack.dev.conf.js / webpack.prod.conf.js)
同樣,我們也可以再根目錄中創建vue.config.js文件來進行webpack和vue的一些配置

const path = require('path')

module.exports = {
 publicPath: './', // 基本路徑,打包時加上.
 outputDir: process.env.outputDir, // 輸出文件目錄
 lintOnSave: false, // eslint-loader 是否在保存的時候檢查
 // see https://github.com/vuejs/vue-cli/blob/dev/docs/webpack.md
 // webpack配置
 chainWebpack: (config) => {
   config.resolve.symlinks(true)
 },
 configureWebpack: (config) => {
   if (process.env.VUE_APP_MODE === 'production') {
     // 為生產環境修改配置...
     config.mode = 'production'
   } else {
       // 為開發環境修改配置...
       config.mode = 'development'
   }
   Object.assign(config, {
     // 開發生產共同配置
     resolve: {
       alias: {
         '@': path.resolve(__dirname, './src'),
         '@c': path.resolve(__dirname, './src/components'),
         '@p': path.resolve(__dirname, './src/views')
       } // 別名配置
     }
   })
 },
 productionSourceMap: false, // 生產環境是否生成 sourceMap 文件
 // css相關配置
 css: {
   // extract: true, // 是否使用css分離插件 ExtractTextPlugin
   sourceMap: false, // 開啟 CSS source maps?
   loaderOptions: {
     css: {}, // 這里的選項會傳遞給 css-loader
     less: {
       modifyVars: {
         // less vars,customize ant design theme

         // 'primary-color': '#F5222D',
         // 'link-color': '#F5222D',
         // 'border-radius-base': '4px'
       },
       // DO NOT REMOVE THIS LINE
       javascriptEnabled: true
     },
     postcss: {
       plugins: [
         // 把px單位換算成rem單位
         require('postcss-pxtorem')({
           rootValue: 75, // 換算的基數(設計圖750的根字體為32)
           selectorBlackList: ['.van-'], // 要忽略的選擇器并保留為px。
           propList: ['*'], // 可以從px更改為rem的屬性。
           minPixelValue: 2 // 設置要替換的最小像素值。
         }),
         require('autoprefixer')
       ]
       // plugins: [
       //   require('autoprefixer')
       // ]
     } // 這里的選項會傳遞給 postcss-loader
   }, // css預設器配置項 詳見https://cli.vuejs.org/zh/config/#css-loaderoptions
   // modules: false, // 啟用 CSS modules for all css / pre-processor files.
   requireModuleExtension: true
 },
 parallel: require('os').cpus().length > 1, // 是否為 Babel 或 TypeScript 使用 thread-loader。該選項在系統的 CPU 有多于一個內核時自動啟用,僅作用于生產構建。
 pwa: {}, // PWA 插件相關配置 see https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-pwa
 // webpack-dev-server 相關配置
 devServer: {
   open: false, // 自動打開瀏覽器
   host: '0.0.0.0', // 允許外部ip訪問
   port: 8000, // 端口
   https: false, // 啟用https
   overlay: {
     warnings: true,
     errors: true
   }, // 錯誤、警告在頁面彈出
   // proxy: 'http://localhost:4000' // 配置跨域處理,只有一個代理
   proxy: {
       '/api': {
           target: '<url>',
           ws: true,
           changeOrigin: true
       },
       '/foo': {
           target: '<other_url>'
       }
   },  // 配置多個代理
 },
 // 第三方插件配置
 pluginOptions: {} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93

5:steup()函數 參考另一篇文章

https://blog.csdn.net/qq_41328247/article/details/109286022

6:2.0與3.0生命周期函數比較:

2.0 周期名稱

3.0 周期名稱

說明

beforeCreate

setup

組件創建之前

created

setup

組件創建完成

beforeMount

onBeforeMount

組件掛載之前

mounted

onMounted

組件掛載完成

beforeUpdate

onBeforeUpdate

數據更新,虛擬 DOM 打補丁之前

updated

onUpdated

數據更新,虛擬 DOM 渲染完成

beforeDestroy

onBeforeUnmount

組件銷毀之前

destroyed

onUnmounted

組件銷毀后

<template>

<router-link to="/">點這里去首頁</router-link>

<hr>

<div class="home">

這里是一個計數器 >>> <span class="red">{{count}}</span> <br>

<button @click="countAdd">點擊加數字</button>

</div>

</template>

<script>

// 你需要使用到什么生命周期,就引出來什么生命周期

import {

onBeforeMount,

onMounted,

onBeforeUpdate,

onUpdated,

onBeforeUnmount,

onUnmounted,

ref

} from 'vue'

export default {

// setup 函數,就相當于 vue 2.0 中的 created

setup () {

const count = ref(0)

// 其他的生命周期都寫在這里

onBeforeMount (() => {

count.value++

console.log('onBeforeMount', count.value)

})

onMounted (() => {

count.value++

console.log('onMounted', count.value)

})

// 注意,onBeforeUpdate 和 onUpdated 里面不要修改值,會死循環的哦!

onBeforeUpdate (() => {

console.log('onBeforeUpdate', count.value)

})

onUpdated (() => {

console.log('onUpdated', count.value)

})

onBeforeUnmount (() => {

count.value++

console.log('onBeforeUnmount', count.value)

})

onUnmounted (() => {

count.value++

console.log('onUnmounted', count.value)

})

// 定義一個函數,修改 count 的值。

const countAdd = () => {

count.value++

}

return {

count,

countAdd

}

}

}

</script>

首先,在 vue 3.0 中,生命周期是從 vue 中導出的,我們需要用到哪些,就導出哪些。 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118

可能不少看官會認為多次一舉,但實則不然。vue 提供這么多的生命周期,有幾個是我們常用的?在大多數的組件中,我們用不到生命周期。即便是頁面級別的應用,可能用到最多的是 onMounted 即可。

當然,那些綁定時間的操作會用到解綁,因此會用到 onUnmounted。其它的生命周期,正常情況下是基本用不到的。所以,通過引入使用的這種設定,可以減少我們的最終編譯的項目的體積。而且,這樣的引入使用,更加的邏輯清晰。

其次,除 setup 之外,其他的生命周期函數,都是在 setup 里面直接書寫函數即可。

7.對文件的引用上

  • Vue2.x中new出的實例對象,所有的東西都在這個vue對象上,這樣其實無論你用到還是沒用到,都會跑一變。
  • vue3.0中可以用ES module imports按需引入,如:keep-alive內置組件、v-model指令,等等。

8.項目的啟動

Vue2.x 版本啟動

npm run dev

Vue3.x 版本啟動

npm run serve

9.語法方面

1.v-model語法糖廢棄,改用modelValue

<input v-model="value" />

<input modelValue="value" /> 
  • 1
  • 2
  • 3

2.棄用全局APInew Vue,使用createApp

const app =?Vue.createApp({}) 
  • 1

3.棄用Vue.prototype,在Vue3中,我們可以使用如下定義方式

const app = Vue.createApp({})
app.config.globalProperties.$http = () => {} 
  • 1
  • 2

4.全局方法現在全部在app實例上,例如:

`app.directive`,`app.use`等 
  • 1

5.現在你需要手動掛載根節點

main.js

import { createApp } from 'vue'

import App from './App.vue'

createApp(App).mount('#app') 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

6.不能再使用Vue.nextTick/this.$nextTick,Vue3中你可以用:

import { nextTick } from 'vue'
nextTick(() => {
  // something
}) 
  • 1
  • 2
  • 3
  • 4

7.Vue3允許template設置key。

8.正式棄用scopedSlots正式棄用,舊的不去新的不來。

9.監聽數組變化需要使用deep屬性,否則只能監聽到整個數組被替換。

10.棄用$children,訪問子組件可以使用$ref

11.filter被移除,我X,不能再使用|了。

12.移除事件API,$on,$once,$off不再使用。EventBus方法也不再使用。

10 新加入了 TypeScript 以及 PWA 的支持

11:更精準的變更通知

2.x 版本中,使用 Vue.set 來給對象新增一個屬性時,這個對象的所有 watcher 都會重新運行
3.x 版本中,只有依賴那個屬性的 watcher 才會重新運行。


藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請加微信ban_lanlan,報下信息,藍小助會請您入群。歡迎您加入噢~~
希望得到建議咨詢、商務合作,也請與我們聯系01063334945。 

分享此文一切功德,皆悉回向給文章原作者及眾讀者. 免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。 

藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服務、UI設計公司、界面設計公司、UI設計服務公司、數據可視化設計公司、UI交互設計公司、高端網站設計公司、UI咨詢、用戶體驗公司、軟件界面設計公司。

前端基本知識介紹

前端達人

目錄

一.前端三劍客

1.前導

2.三劍客的分工

二.VsCode的介紹與配置

1.vscode的介紹

2.vscode的下載安裝

3.vscode的使用

3.1 圖形界面操作

3.3 常用插件

三.HTML基礎標簽

HTML基礎知識

1.HTML為何物?

2.標簽介紹

3.HTML屬性

4.HTML標簽骨架

基本的HTML標簽

1.HTML標題標簽

2.換行與空格

3.HTML段落

4.字體加粗與傾斜及刪除效果

5.圖片標簽

6.超鏈接

7.列表

8.布局標簽

9.表格標簽

10.表單標簽

四.CSS基礎選擇器

CSS介紹

CSS樣式表介紹

CSS基礎語法

CSS選擇器

選擇器介紹

基礎選擇器

復合選擇器

CSS引入方式

CSS引入方式介紹

內部樣式表(嵌入式)

行內樣式表

外部樣式表

五.JS基礎

Javascript介紹

1.js的介紹

2.js的由來

3.JavaScript組成

JavaScript基本語法

1.JavaScript的引入方式

2.js注釋

3.js的輸入輸出方法

4.變量 

5.數據類型

6.數據類型轉換

7.更多JS基礎

六.JS之DOM

1.DOM簡介

什么是DOM?

DOM樹

2.獲取元素

根據ID獲取

根據類名獲取

根據標簽名獲取

通過選擇器獲取

通過選擇器獲?。ǘ鄠€)

定位body標簽

定位html標簽

3.事件基礎

事件基礎介紹

代碼實現

其它的鼠標事件

4.操作元素

操作元素介紹

改變元素的內容

操作元素屬性

操作表單元素

樣式屬性操作

更多js操作


一.前端三劍客

1.前導

(1)HTML,CSS,JS都是單獨的語言;

(2)HTML,CSS,JS構成前端技術基礎;

2.三劍客的分工

(1)HTML:負責網頁的架構;

(2)CSS:負責網頁的樣式,美化;

(3)JavaScript(JS):負責網頁的行為;

二.VsCode的介紹與配置

1.vscode的介紹

vscode 全稱為 Visual Studio Code ,是?款免費開源的現代化輕量級代碼編輯器,?持?乎所有主流的開發語?的語法?亮、智能代碼補全、?定義快捷鍵、括號匹配和顏?區分、代碼?段、代碼對? Diff、GIT命令 等特性,?持插件擴展,并針對??開發和云端應?開發做了優化。

2.vscode的下載安裝

(110條消息) Python爬蟲編程11——JS反爬_彩色的泡沫的博客-CSDN博客https://blog.csdn.net/qq_52914337/article/details/123771663?spm=1001.2014.3001.5501

3.vscode的使用

3.1 圖形界面操作

3.3 常用插件

我們通常需要代碼提示我們輔助編寫,這個時候就涉及到VSCODE提供的一系列的插件插件安裝在 Extension 中,點擊即可看到一個搜索按鈕,可以輸入關鍵字搜索自己想要的插件。如圖:

前端開發推薦安裝的幾個插件:

1. jshint : js 代碼規范檢查。
2. Beautify :?鍵美化代碼的插件。
3. Javascript(ES6) code snippets : ES6 語法提示。
4. Auto Rename Tag :?動重命名標簽。標簽都是成對出現的,開始標簽修改了,結束標簽
也會跟著修改。
5. Auto Close Tag :?動閉合標簽。針對?些?標準的標簽,這個插件還是很有?的。
6. vscode-icons :可選。提供了很多類型的?件夾 icon ,不同類型的?件夾使?不同的
icon ,會讓?件查找更直觀。
7. open in browser :可選。右鍵可以選擇在默認瀏覽器中打開當前??。

三.HTML基礎標簽

HTML基礎知識

1.HTML為何物?

HTML是超文本標記語言(Hyper Text Markup Language)是用來描述網頁的一種語言。

注意:HTML不是一種編程語言,而是一種標記語言。

簡單來說,HTML文件也可以直接稱為網頁,瀏覽器的作用就是讀取HTML文件,并且以網頁的形式去展示它們。

2.標簽介紹

HTML標簽是由尖括號包圍起來的關鍵詞,如<html></html>。

單標簽與雙標簽

(1)雙標簽書寫規則:<雙標簽名稱>內容</雙標簽名稱>,例如<html>內容</html>;

(2)單標簽書寫規則:<單標簽名稱/>,例如<br/>;

3.HTML屬性

HTML屬性指的是標簽屬性,HTML標簽可以擁有屬性,給相關的HTML元素提供更多的信息。

注意:

(1)一個HTML標簽可有多個屬性;

(2)屬性寫在HTML元素的開始標簽;

(3)屬性總是以名稱/鍵值對的形式出現,比如:class="method";

4.HTML標簽骨架

 
  1. <!DOCTYPE html>
  2. <html lang="en">
  3.    <head>
  4.        <meta charset="UTF-8">
  5.        <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6.        <meta name="viewport" content="width=device-width, initialscale=1.0">
  7.        <title>Document</title>
  8.    </head>
  9.    <body>
  10.    </body>
  11. </html>
<!DOCTYPE html> :向瀏覽器聲明當前的?檔類型是 html
<html></html> :是??當中最?的標簽,我們稱之為根標簽
<head></head> :為??的頭部,它??的內容主要?來定義??標簽及給瀏覽器查看的
?些信息
<meta charset="UTF-8">  定義??的編碼為UTF- 8
<title></title> :為??標題標簽,它?的內容會顯示在瀏覽器的標簽?上
<body></body> :為??主體標簽,它??的內容都會顯示在瀏覽器的??窗?區域

基本的HTML標簽

1.HTML標題標簽

HTML的文章標題標簽,如:<h1></h1>~<h6></h6>分六個級別,效果一次減少,并且每個標題都是獨占一行空間。

如:

 
  1. <h1>?號標題</h1>
  2. <h2>?號標題</h2>
  3. <h3>三號標題</h3>
  4. <h4>四號標題</h4>
  5. <h5>五號標題</h5>
  6. <h6>六號標題</h6>

注意:沒有<h7></h7>標簽;

2.換行與空格

2.1空格問題

 ;表示一個空格;

如:

hello&nbsp;world

2.2換行問題

<br/>表示換行;

如:

 
  1. hello
  2. <br/>
  3. world

擴展:對于HTML語言,沒有嚴格的語義,即<br>與<br/>或者<br    >瀏覽器都可以識別出來。

 html1.0~5.0  xhtml(嚴格) 五大瀏覽器聯合更新自己的版本HTML5(不嚴格)

3.HTML段落

3.1段落標簽介紹

HTML段落是通過<p></p>標簽進行定義的。

如:

 
  1. <h2>今?學習內容:</h2>
  2. <p>學了標題標簽</p>

作用:(1)雖然p標簽的文字顯示外觀來看,和普通文字沒有區別,但是它獨占一行;

           (2)標簽語義化,便于定位;

3.2標簽語義化

在合適的地方顯示合理的標簽,搜索引擎也偏好于標簽語義化做的更好的頁面。

4.字體加粗與傾斜及刪除效果

4.1加粗標簽

(1)<b></b>為加粗標簽;

(2)<strong></strong>為加粗標簽;

如:

 
  1. 普通?字
  2. <b>我是加粗?字1</b>
  3. <strong>我是加粗?字2</strong>

區別:b標簽為簡單加粗;strong為加粗效果+特別強調效果;

4.2傾斜

(1)<i></i> 為傾斜標簽;

(2)<em></em>也可實現傾斜;

如:

 
  1. 普通?字
  2. <i>我是i</i>
  3. <em>我是em</em>

區別:em標簽的語義更強一些。i為傾斜了,em為又傾斜了。

4.3刪除

<s></s> 刪除效果;

<del></del> 刪除效果;

如:

 
  1. 原價:<s>998</s>
  2. 現值:9.98
  3. <br>
  4. 原價:<del>999</del>
  5. 現價:9.98

注意:這兩個標簽沒有任何語義區別,而w3c則說明s標簽要被del標簽替代;

5.圖片標簽

<img scr="" alt="" width="" height="" title="">

(1)src:表示資源,圖?加載的名字
(2)width(寬),height(?):設置圖?的??。
(3)title:?標懸停在圖?上的提示?字
(4)alt:
                圖?沒有被正常加載時顯示
                ??閱讀器讀取此內容

如:

<img src="Logo2.png" alt="加載中" width="500" height="500" title="?標懸停在圖?上的提示?字">

6.超鏈接

6.1超鏈接使用

超鏈接:點擊頁面發生跳轉;

使用標簽為:<a href=""></a>

其中href為:跳轉的網址;

如:

<a href="https://www.baidu.com">點擊我可以打開百度</a>

target=”_blank":在其它窗口打開新連接;

<a href="https://www.baidu.com" target="_blank">點擊我可以打開百度,并且打開新 的窗?</a>

6.2空鏈接

空鏈接:在href中指定為#號即可;

作用:(1)暫時不知道點擊之后跳轉到哪里,使用空鏈接占位;

           (2)刷新界面;

<a href="#"></a>

7.列表

列表標簽可分為:無序列表和有序列表。

7.1無序列表

使用標簽:<ul><li></li><li></li><li></li></ul>

注意:

(1)ul標簽可以嵌套若干個li標簽;

(2)每一個li標簽代表著每一條數據;

(3)每個li標簽之間沒有順序;

如:

 
  1. <ul>
  2.    <li>python</li>
  3.    <li>java</li>
  4.    <li>go</li>
  5. </ul>

7.2有序列表

使用標簽:<ol><li></li><li></li><li></li></ol>

注意:

(1)有序;

(2)且是ol開始的;

如:

 
  1. <ol>
  2.    <li>基礎班級</li>
  3.    <li>測試</li>
  4.    <li>python</li>
  5. </ol>

8.布局標簽

8.1布局標簽的介紹

布局標簽沒有任何的語義,也沒有所謂的應用場景。

作用:劃分頁面區域,輔助頁面布局;

布局標簽為:

div標簽:<div></div> 大盒子,獨占一行;

span標簽:<span></span>小盒子,一行可以放多個;

 
  1. <div>我是div</div>
  2. <div>我是div</div>
  3. <div>我是div</div>
  4. <div>我是div</div>
  5. <span>我是span</span>
  6. <span>我是span</span>
  7. <span>我是span</span>
  8. <span>我是span</span>

9.表格標簽

9.1表格標簽介紹

作用:展示數據非常整齊;

基本語法:

 
  1. <table>
  2.    <tr>
  3.        <td></td>
  4.    </tr>
  5. </table>

(1)table標簽:定義表格標簽;

(2)tr標簽:定義表格中的行;

                th標簽:表格單元格;

                td標簽:定義表格中的單元格,必須嵌套其中;

9.2表格標簽的其他屬性

(1)align:表格對齊方式。如:left,center,right;

(2)border:表格邊框。如:1;

(3)cellpadding:單元邊沿與其內容之間的空白,默認為1像素;

(4)cellspacing:單元格與單元格之間的空白,默認為2像素;

(5)width:設置表格寬度;

注意:需要寫在table標簽里;

9.3表格結構標簽

表格結構標簽:表格頭部和表格主體兩大部分;

        (1)表格頭部區域:<thead>標簽;

        (2)表格主體區域:<tbody>標簽;

作用:結構就更加清晰,讓表格有更好的語義;

9.4合并單元格

(1)合并單元格方式

        跨行合并:rowspan="合并單元格的個數";

        跨列合并:colspan="合并單元格的個數";

(2)目標單元格

        跨行:最上冊單元格為目標單元格,寫合并代碼;

        跨列:最左側單元格為目標單元格,寫合并代碼;

(3)合并單元格步驟

        1.先確定是跨行還是跨列合并;

        2.找到目標單元格;

        3.刪除多余單元格;

10.表單標簽

10.1表單標簽介紹

表單標簽我們可以直接稱為 form 標簽,標簽書寫如下:

(1)表單標簽:<form action=""></form>。form表單標簽里面就是所有用戶填寫的表單數據;

(2)屬性 action:把表單數據交給指定后臺程序去處理;

(3)屬性 method:傳遞數據時方式方法。

                1.默認為post請求(隱式提交數據);

                2.get明文傳送數據;

如:

 
  1. <form action="***.py" method="POST">
  2. </form>

10.2輸入框與單選多選框

輸入框標簽(input標簽):<input type="text">

(1)type:屬性指定輸入框內容;

(2)type="text":則是最普通的文本輸入框。為單行;

(3)type="password":則為密碼輸入框。為單行;

                placeholder:給用戶提示(提升用戶體驗感的屬性),并且在為本域中都可以使用;

(4)type="radio":單選框;

(5)type="checkbox":為多選框;

如:

 
  1. <!-- 填寫用戶名及密碼 -->
  2. <span>用戶名:</span>
  3. <input type="text" placeholder="請輸入用戶名">
  4. <br>
  5. <span>密碼:</span>&nbsp;&nbsp;&nbsp;
  6. <input type="password" placeholder="請輸入密碼">
  7. <br>
  8. <!-- 選擇信息:選擇 性別 愛好 -->
  9. <!-- 單選按鈕 -->
  10. <!-- 一組按鈕:他們倆都是來控制性別的,添加name屬性 -->
  11. <span>性別:</span>
  12. <input type="radio" name="gender">
  13. <span></span>
  14. <input type="radio" name="gender">
  15. <span></span>
  16. <br>
  17. <!-- 多選按鈕 -->
  18. <span>興趣愛好:</span>
  19. <!-- <input type="checkbox"> 睡覺
  20. <input type="checkbox"> 打游戲
  21. <input type="checkbox"> 女
  22. <input type="checkbox"> 羽毛球 -->
  23. <!-- 優化:點擊文字也可以選中多選框 -->
  24. <input type="checkbox" id="sleep">
  25. <label for="sleep">睡覺</label>
  26. <input type="checkbox" id="playgame">
  27. <label for="playgame">打游戲</label>
  28. <input type="checkbox" id="liangnv">
  29. <label for="liangnv"></label>
  30. <input type="checkbox" id="yumaoqiu">
  31. <label for="yumaoqiu">羽毛球</label>
  32. <br>

10.3下拉框

使用標簽:select為下拉框的標簽,嵌套若干個option標簽。其中每一個option為下拉框中的一個選項。

selected="selected"。表示默認選中狀態;

 
  1. <select name="" id="">
  2.    <option value=""></option>
  3. </select> 123

如:

 
  1. <select name="" id="">
  2.    <option value="">北京</option>
  3.    <option value="">上海</option>
  4.    <option value="">?州</option>
  5.    <option value="" selected="selected">深圳</option>
  6. </select> <br>

10.4文本域

使用標簽:<textarea name="", cols="30" rows="10"></textarea>

(1)cols:列;

(2)rows:行;

 
  1. 建議:
  2. <textarea name="" id="" cols="30" rows="10"></textarea>
  3. <br>

10.5按鈕標簽

(1)普通按鈕:

                標簽:input指定type="button";

                通過value屬性,指定按鈕的文字;

如:

 
  1. 普通按鈕:
  2. <input type="button" value="按鈕">
  3. <br>

(2)重置按鈕:點擊重置按鈕就會將數據恢復到默認狀態;

                標簽:input指定type="reset";

                注意:重置按鈕自動會有重置的文字;

                如果指定為value屬性,則顯示什么;

如:

 
  1. 重置按鈕:
  2. <input type="reset" value="重置按鈕">
  3. <br>

(3)提交按鈕:點擊提交按鈕可以讓表單提交給指定后臺處理;

                標簽:input指定type="submit";

                注意:提交按鈕自動會有提交的文字;

如:

 
  1. 提交按鈕:
  2. <input type="submit" value="我是提交">

          

藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請加微信ban_lanlan,報下信息,藍小助會請您入群。歡迎您加入噢~~
希望得到建議咨詢、商務合作,也請與我們聯系01063334945。 

分享此文一切功德,皆悉回向給文章原作者及眾讀者. 免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。 

藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務UI設計公司、界面設計公司、UI設計服務公司、數據可視化設計公司、UI交互設計公司、高端網站設計公司、UI咨詢、用戶體驗公司、軟件界面設計公司。

【前端】vue模板語法知識了解一下,是不是只知道用element-ui組件?

前端達人

寫在前面

上一篇總結了在實操過程中如果遇到了nodejs版本的問題,我們該如何去解決的,還有就是總結了vue2和vue3生命周期的區別,如果感興趣的可以去看看上一篇的內容vue生命周期基礎知識了解一下

那知道了vue的生命周期知識點,接下就開始vue模板語法吧,在Vue中,Vue模板對應的就是Vue中的View(視圖)部分,也是Vue重中之一,而在Vue中要了解Vue模板我們就需要從兩個方面來著手,其一是Vue的模板語法,其二就是模板渲染。模板語法較簡單一點,但對于模板的渲染(模板編譯)就會更為復雜一些,如果需要了解模板渲染就需要對Vue的渲染函數,響應式原理之類的要有所了解。

Vue模板語法

<!-- App.vue --> <template> <div id="app"> {{ message }} </div> </template> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

上面的代碼演示的僅僅Vue模板中的一種方式,也是最簡單和最常見的一種模板方式。
在Vue中,模板語法是邏輯和視圖之間的溝通橋梁,使用模板語法編寫的HTML會響應Vue實例中的各種變化,簡單地說,Vue實例中的邏輯可以隨心所欲的渲染在頁面上。

Vue模板中插值常見的使用方法主要有:文本、原始HTML、屬性、JavaScript表達式、指令和修飾符**等。

文本

使用了v-once指令的話,那么該插值就是一次性地插值。也就是說,當數據改變時,插值處的內容不會更新。其使用如下所示:

<!-- App.vue --> <template> <div id="app"> <span v-once>{{ message }}</span> </div> </template> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

原始HTML

不能使用v-html來復合局部模板,因為Vue不是基于字符串的模板引擎。另外動態渲染任意的HTML會有一定的危險,因為它很容易導致XSS攻擊。
插值語法中(也就是{{}})會將數據解釋為普通文本,而非HTML代碼,為了輸出真正的HTML,需要使用v-html指令,比如下面這個示例:

<!-- App.vue --> <template> <div id="app"> <img alt="Vue logo" src="./assets/logo.png"> <div>{{rawHTML}}</div> <div v-html="rawHTML"></div> </div> </template> <script> export default { name: 'app', data () { return { rawHTML: '<span style="color:red;">原始HTML</span>' } } } </script> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

屬性

在布爾特性的情況下,它們的存在即暗示為true, v-bind 工作起來略有不同,比如:

<button v-bind:disabled="isButDisabled">Button</button> 
  • 1

開源Vue模板和主題框架集合

現在有很多項目vue項目都有很好用的vue模板,這里就總結一些常用的末班集合。

BootstrapVue

BootstrapVue 擁有85個以上的組件,45個以上的可用插件,多個指令和670+個圖標, 它提供了可用于Vue.js v2.6的Bootstrap v4.5組件和網格系統的最全面的實現之一 ,并具有廣泛的功能和自動 WAI-ARIA 可訪問性標記。

采用 BootstrapVue 構建響應式、移動優先、ARIA項目(Accessible Rich Internet Application,可訪問的富媒體應用,即無障礙友好應用),基于 Vue.js 和世界全球最受歡迎的 CSS 前端框架 — Bootstrap v4
在這里插入圖片描述
GitHub地址:BootstrapVue直接進入
在這里插入圖片描述

element-ui

element-ui應該常用了,使用 Element需要先引入整個 Element-ui
在 main.js 中寫入以下內容:

import Vue from 'vue'; import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; import App from './App.vue'; Vue.use(ElementUI); new Vue({ el: '#app',
  render: h => h(App) }); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在這里插入圖片描述點擊跳轉跳轉地址:Element-ui地址

還有一些開源的項目比如:

  • 基于Vue2.0和bulma0.2的后臺管理框架 - vue-admin
  • 人人開源 / renren-fast-vue

renren-fast-vue基于vue、element-ui構建開發,實現renren-fast后臺管理前端功能,提供一套更優的前端解決方案

前后端分離,通過token進行數據交互,可獨立部署* 主題定制,通過scss變量統一一站式定制* 動態菜單,通過菜單管理統一管理訪問路由* 數據切換,通過mock配置對接口數據/mock模擬數據進行切換* 發布時,可動態配置CDN靜態資源/切換新舊版本.

  • 若依 / RuoYi-Vue
  • VueJS Expo


藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請加微信ban_lanlan,報下信息,藍小助會請您入群。歡迎您加入噢~~
希望得到建議咨詢、商務合作,也請與我們聯系01063334945。 

分享此文一切功德,皆悉回向給文章原作者及眾讀者. 免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。 

藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務UI設計公司、界面設計公司、UI設計服務公司、數據可視化設計公司、UI交互設計公司、高端網站設計公司、UI咨詢、用戶體驗公司、軟件界面設計公司。

使用react 開發一個左側三級菜單

前端達人

以下是一個使用React開發的左側三級菜單的基本示例:


import React, { useState } from 'react';

const Menu = () => {
  const [menuItems, setMenuItems] = useState([
    {
      id: 1,
      name: 'Menu Item 1',
      subMenuItems: [
        { id: 1, name: 'Sub-menu Item 1' },
        { id: 2, name: 'Sub-menu Item 2' }
      ]
    },
    {
      id: 2,
      name: 'Menu Item 2',
      subMenuItems: [
        { id: 3, name: 'Sub-menu Item 3' },
        { id: 4, name: 'Sub-menu Item 4' }
      ]
    }
  ]);

  const [selectedMenuItem, setSelectedMenuItem] = useState(null);
  const [selectedSubMenu, setSelectedSubMenu] = useState(null);

  const handleMenuItemClick = (menuItem) => {
    setSelectedMenuItem(menuItem.id);
    setSelectedSubMenu(null);
  };

  const handleSubMenuClick = (subMenuItem) => {
    setSelectedSubMenu(subMenuItem.id);
  };

  return (
    <div className="menu">
      {menuItems.map((menuItem) => (
        <div key={menuItem.id}>
          <button onClick={() => handleMenuItemClick(menuItem)}>
            {menuItem.name}
          </button>
          {selectedMenuItem === menuItem.id && (
            <ul>
              {menuItem.subMenuItems.map((subMenuItem) => (
                <li key={subMenuItem.id}>
                  <button onClick={() => handleSubMenuClick(subMenuItem)}>
                    {subMenuItem.name}
                  </button>
                  {selectedSubMenu === subMenuItem.id && (
                    <ul>
                      <li>Sub-menu item details</li>
                    </ul>
                  )}
                </li>
              ))}
            </ul>
          )}
        </div>
      ))}
    </div>
  );
};

export default Menu;







藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請加微信ban_lanlan,報下信息,藍小助會請您入群。歡迎您加入噢~~

希望得到建議咨詢、商務合作,也請與我們聯系01063334945。 



分享此文一切功德,皆悉回向給文章原作者及眾讀者. 免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。 



藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務、UI設計公司、界面設計公司、UI設計服務公司、數據可視化設計公司、UI交互設計公司、高端網站設計公司、UI咨詢、用戶體驗公司、軟件界面設計公司。

使用layui 寫一個左側導航菜單 至三級目錄

前端達人

HTML代碼:

<div class="layui-side layui-bg-black">
  <div class="layui-side-scroll">
    <ul class="layui-nav layui-nav-tree" lay-filter="test">
      <li class="layui-nav-item">
        <a href="javascript:;">菜單1</a>
        <dl class="layui-nav-child">
          <dd><a href="javascript:;">子菜單1-1</a></dd>
          <dd><a href="javascript:;">子菜單1-2</a></dd>
          <dd><a href="javascript:;">子菜單1-3</a></dd>
        </dl>
      </li>
      <li class="layui-nav-item">
        <a href="javascript:;">菜單2</a>
        <dl class="layui-nav-child">
          <dd><a href="javascript:;">子菜單2-1</a></dd>
          <dd><a href="javascript:;">子菜單2-2</a></dd>
          <dd>
            <a href="javascript:;">子菜單2-3</a>
            <dl class="layui-nav-child">
              <dd><a href="javascript:;">子菜單2-3-1</a></dd>
              <dd><a href="javascript:;">子菜單2-3-2</a></dd>
              <dd><a href="javascript:;">子菜單2-3-3</a></dd>
            </dl>
          </dd>
        </dl>
      </li>
    </ul>
  </div>
</div>

JavaScript代碼:


//JavaScript代碼需要引入layui.js文件
layui.use('element', function(){
  var element = layui.element;
});
藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請加微信ban_lanlan,報下信息,藍小助會請您入群。歡迎您加入噢~~ 希望得到建議咨詢、商務合作,也請與我們聯系01063334945。  分享此文一切功德,皆悉回向給文章原作者及眾讀者. 免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。  藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務UI設計公司、界面設計公司、UI設計服務公司、數據可視化設計公司、UI交互設計公司、高端網站設計公司、UI咨詢、用戶體驗公司、軟件界面設計公司。 

日歷

鏈接

個人資料

藍藍設計的小編 http://m.skdbbs.com

存檔

92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线
96国产粉嫩美女| 女同性一区二区三区人了人一| 国产日韩一区二区三免费高清| 久久久久久久久爱| 狠狠狠色丁香婷婷综合久久五月| 性爽视频在线| 永久免费精品影视网站| 久久激情一区| av中文字幕在线播放| 亚洲欧美激情四射在线日| 欧美综合久久久| 欧美成人二区| 成人高清在线观看| 青青青伊人色综合久久| 久久伊人精品天天| 国产精品卡一卡二卡三| 久久视频在线观看| 欧美最猛性xxxxx(亚洲精品)| 国产成人一二片| 麻豆一区二区99久久久久| 丁香花在线电影小说观看| 日本三级视频在线播放| 在线观看av的网站| 日韩欧美一区二区不卡| 久久久久国色av免费观看性色| 国产精品另类一区| 欧美人体视频| 精品呦交小u女在线| 日韩成人av电影| 亚洲欧洲在线观看av| 91在线码无精品| 久久er99热精品一区二区三区| 毛片免费看不卡网站| 狠狠入ady亚洲精品经典电影| 麻豆精品视频| 精品乱码亚洲一区二区不卡| 粉嫩的18在线观看极品精品| 久久久久在线| 久久夜色精品国产欧美乱| julia中文字幕一区二区99在线| 国产三级一区二区三区| 亚洲承认在线| 亚洲日韩中文字幕在线播放| 成人做爰www免费看视频网站| 欧美一a一片一级一片| 欧美激情一级片一区二区| 羞羞电影在线观看www| 黑人巨大精品欧美一区二区一视频| 在线观看欧美日韩| 99久精品国产| 久久狠狠久久| 欧洲国产精品| www国产亚洲精品| 欧美日韩一区三区四区| 黑人精品欧美一区二区蜜桃| 日韩精品久久久| 亚洲欧美在线磁力| 天堂社区 天堂综合网 天堂资源最新版| 日韩深夜视频| 91国产丝袜在线播放| 久久男人的天堂| 日日噜噜噜夜夜爽亚洲精品| ririsao久久精品一区| 久久亚洲春色中文字幕| 亚洲成人av一区二区三区| 国产精品久久久久天堂| 色欧美激情视频在线| 黄色在线论坛| 日韩在线中文字| 久久久久久久久蜜桃| 日韩一区有码在线| 亚洲一区二区不卡免费| 久久天天躁狠狠躁夜夜爽蜜月| 另类专区欧美蜜桃臀第一页| 欧美日韩一本到| 欧美天堂视频| 亚洲一区二区三区乱码aⅴ蜜桃女| 精品日韩99亚洲| 精品乱码一区二区三区四区| 第一区第二区在线| 精品成人私密视频| 不卡av电影在线播放| 另类视频一区二区三区| 中文字幕在线看视频国产欧美在线看完整| 国产99久久久国产精品| 精品精品视频| 91综合精品国产丝袜长腿久久| 日本久久久久| 久久香蕉综合色| 这里视频有精品| 国产亚洲欧美日韩在线一区| 亚洲欧美影院| 亚洲精品成人a在线观看| 午夜影院欧美| 97视频免费观看| 奇米精品一区二区三区四区| 久久免费午夜影院| 日产中文字幕在线精品一区| 奶水喷射视频一区| 欧美综合第一页| 欧美一区二区视频免费观看| av中文一区二区三区| 国产精品国产三级国产普通话99| 北条麻妃一区二区三区在线观看| 成人免费观看男女羞羞视频| 国产亚洲婷婷免费| 亚洲黄色av| 5566中文字幕一区二区电影| 日韩精品无码一区二区三区| 一区二区亚洲| 国产精品美女呻吟| 91精品国产自产在线| 亚洲精品中文字幕有码专区| 97超级碰在线看视频免费在线看| 国产精品视频免费在线观看| 国产精品偷伦视频免费观看国产| 日韩欧美字幕| 88国产精品欧美一区二区三区| 大胆亚洲人体视频| 久久一区二区三区喷水| 久久久久久亚洲精品| 精品国产网站在线观看| 天天综合亚洲| 日韩国产一区二| 一区二区网站| 欧美刺激性大交免费视频| 国产99re66在线视频| 国产福利精品一区二区| 三区四区不卡| 欧美一级视频在线观看| 性8sex亚洲区入口| 欧美三级中文字幕在线观看| 成年人在线视频| 亚洲激情自拍视频| 日本大香伊一区二区三区| 亚洲免费久久| 色婷婷综合久久久中文一区二区| 日韩成人网免费视频| 亚洲在线成人精品| 国产精品扒开腿做爽爽爽视频| 51xtv成人影院| 国模私拍国内精品国内av| 国产精品免费网站在线观看| 日韩欧美国产综合在线一区二区三区| а√天堂8资源在线官网| 在线观看免费亚洲| 日韩免费性生活视频播放| 自拍偷拍亚洲一区| 福利视频网站一区二区三区| 四虎久久免费| 欧美日一区二区三区| 久久蜜桃香蕉精品一区二区三区| 成人h片在线播放免费网站| 风流少妇一区二区| 欧美国产精品专区| 欧美专区在线观看| 成人aa视频在线观看| www国产亚洲精品久久网站| 亚州欧美日韩中文视频| a级国产乱理论片在线观看99| 亚洲婷婷免费| 亚洲成在人线av| 亚洲国产成人porn| 欧美人动性xxxxz0oz|