Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 中文字幕在线免费,97精品国产91久久久久久久,www.日本精品

          整合營銷服務商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          16.HTML 表單提交

          現(xiàn)代web開發(fā)中,表單是用戶與網(wǎng)站互動的重要方式之一。HTML5為表單提交提供了強大的功能和豐富的輸入類型,讓收集和驗證用戶輸入數(shù)據(jù)變得更加容易和安全。本文將詳細介紹HTML5表單的各個方面,包括基本結構、輸入類型、驗證方法和提交過程。

          基本結構

          HTML表單由<form>標簽定義,它可以包含輸入字段、標簽、按鈕等元素。一個基本的表單結構如下所示:

          <form action="/submit_form" method="post">
            <label for="name">姓名:</label>
            <input type="text" id="name" name="name" required>
            
            <label for="email">電子郵箱:</label>
            <input type="email" id="email" name="email" required>
            
            <input type="submit" value="提交">
          </form>
          

          在這個例子中,表單有兩個輸入字段:姓名和電子郵箱。每個輸入字段都有一個<label>標簽,這不僅有助于用戶理解輸入的內(nèi)容,也有助于屏幕閱讀器等輔助技術。<form>標簽的action屬性定義了數(shù)據(jù)提交到服務器的URL,method屬性定義了提交數(shù)據(jù)的HTTP方法(通常是post或get)。

          輸入類型

          HTML5提供了多種輸入類型,以支持不同的數(shù)據(jù)格式和設備。

          文本輸入

          <!-- 單行文本 -->
          <input type="text" name="username" placeholder="請輸入用戶名" required>
          
          <!-- 密碼 -->
          <input type="password" name="password" required minlength="8">
          
          <!-- 郵箱 -->
          <input type="email" name="email" required placeholder="example@domain.com">
          
          <!-- 搜索框 -->
          <input type="search" name="search" placeholder="搜索...">
          

          數(shù)值輸入

          <!-- 數(shù)值 -->
          <input type="number" name="age" min="18" max="100" step="1" required>
          
          <!-- 滑動條 -->
          <input type="range" name="volume" min="0" max="100" step="1">
          
          <!-- 電話號碼 -->
          <input type="tel" name="phone" pattern="^\+?\d{0,13}" placeholder="+8613800000000">
          

          日期和時間輸入

          <!-- 日期 -->
          <input type="date" name="birthdate" required>
          
          <!-- 時間 -->
          <input type="time" name="appointmenttime">
          
          <!-- 日期和時間 -->
          <input type="datetime-local" name="appointmentdatetime">
          

          選擇輸入

          <!-- 復選框 -->
          <label><input type="checkbox" name="interest" value="coding"> 編程</label>
          <label><input type="checkbox" name="interest" value="music"> 音樂</label>
          
          <!-- 單選按鈕 -->
          <label><input type="radio" name="gender" value="male" required> 男性</label>
          <label><input type="radio" name="gender" value="female"> 女性</label>
          
          <!-- 下拉選擇 -->
          <select name="country" required>
            <option value="china">中國</option>
            <option value="usa">美國</option>
          </select>
          

          特殊輸入

          <!-- 顏色選擇器 -->
          <input type="color" name="favcolor" value="#ff0000">
          
          <!-- 文件上傳 -->
          <input type="file" name="resume" accept=".pdf,.docx" multiple>
          

          驗證方法

          HTML5表單提供了內(nèi)置的驗證功能,可以在數(shù)據(jù)提交到服務器之前進行檢查。

          必填字段

          <input type="text" name="username" required>
          

          正則表達式

          <input type="text" name="zipcode" pattern="\d{5}(-\d{4})?" title="請輸入5位數(shù)的郵政編碼">
          

          數(shù)值范圍

          <input type="number" name="age" min="18" max="99">
          

          長度限制

          <input type="text" name="username" minlength="4" maxlength="8">
          

          表單提交

          當用戶填寫完表單并點擊提交按鈕時,瀏覽器會自動檢查所有輸入字段的有效性。如果所有字段都滿足要求,表單數(shù)據(jù)將被發(fā)送到服務器。否則,瀏覽器會顯示錯誤信息,并阻止表單提交。

          <input type="submit" value="提交">
          

          可以使用JavaScript來自定義驗證或處理提交事件:

          document.querySelector('form').addEventListener('submit', function(event) {
            // 檢查表單數(shù)據(jù)
            if (!this.checkValidity()) {
              event.preventDefault(); // 阻止表單提交
              // 自定義錯誤處理
            }
            // 可以在這里添加額外的邏輯,比如發(fā)送數(shù)據(jù)到服務器的Ajax請求
          });
          

          完整例子

          <!DOCTYPE html>
          <html lang="en">
          <head>
          <meta charset="UTF-8">
          <title>表單提交并顯示JSON</title>
          </head>
          <body>
          
          <!-- 表單定義 -->
          <form id="myForm">
            <label for="name">姓名:</label>
            <input type="text" id="name" name="name">
            <br>
          
            <label for="email">電子郵件:</label>
            <input type="email" id="email" name="email">
            <br>
          
            <input type="button" value="提交" onclick="submitForm()">
          </form>
          
          <script>
          // JavaScript函數(shù),處理表單提交
          function submitForm() {
            // 獲取表單元素
            var form = document.getElementById('myForm');
            
            // 創(chuàng)建一個FormData對象
            var formData = new FormData(form);
            
            // 創(chuàng)建一個空對象來存儲表單數(shù)據(jù)
            var formObject = {};
            
            // 將FormData轉換為普通對象
            formData.forEach(function(value, key){
              formObject[key] = value;
            });
            
            // 將對象轉換為JSON字符串
            var jsonString = JSON.stringify(formObject);
            
            // 彈出包含JSON字符串的對話框
            alert(jsonString);
            
            // 阻止表單的默認提交行為
            return false;
          }
          </script>
          
          </body>
          </html>
          

          在這個例子中:

          1. 我們定義了一個包含姓名和電子郵件輸入字段的表單,以及一個按鈕,當點擊按鈕時會調(diào)用submitForm函數(shù)。
          2. 在submitForm函數(shù)中,我們首先獲取表單元素并創(chuàng)建一個FormData對象。然后,我們遍歷FormData對象,將表單數(shù)據(jù)復制到一個普通的JavaScript對象formObject中。
          3. 接著,我們使用JSON.stringify方法將formObject轉換成JSON字符串。
          4. 最后,我們使用alert函數(shù)彈出一個包含JSON字符串的對話框。

          注意,這個例子中我們使用了type="button"而不是type="submit",因為我們不希望表單有默認的提交行為。我們的JavaScript函數(shù)submitForm會處理所有的邏輯,并且通過返回false來阻止默認的表單提交。如果你想要使用type="submit",你需要在<form>標簽上添加一個onsubmit="return submitForm()"屬性來代替按鈕上的onclick事件。

          結論

          HTML5的表單功能為開發(fā)者提供了強大的工具,以便創(chuàng)建功能豐富、用戶友好且安全的網(wǎng)站。通過使用HTML5的輸入類型和驗證方法,可以確保用戶輸入的數(shù)據(jù)是有效的,同時提高用戶體驗。隨著技術的不斷進步,HTML5表單和相關API將繼續(xù)發(fā)展,為前端工程師提供更多的可能性。

          TML,即超文本標記語言(HyperText Markup Language),是構建網(wǎng)頁和網(wǎng)絡應用的基石。自從它的誕生以來,HTML經(jīng)歷了多次迭代,每個版本都對Web開發(fā)的可能性進行了擴展。以下是HTML發(fā)展歷程的概述,包括每個主要版本的變化和未來趨勢。

          HTML的起源

          HTML的歷史可以追溯到1989年,當時**蒂姆·伯納斯-李(Tim Berners-Lee)**在CERN(歐洲核子研究組織)提出了一個創(chuàng)新的想法,即創(chuàng)建一個互聯(lián)的信息系統(tǒng),這個系統(tǒng)后來演變成了萬維網(wǎng)(World Wide Web)。HTML是這個系統(tǒng)的核心組成部分,它允許文檔通過超鏈接互相引用,形成一個信息網(wǎng)絡。

          HTML 2.0

          • 發(fā)布時間:1995年
          • 主要變化:
            • HTML 2.0是第一個被IETF HTML工作組正式標準化的HTML版本。
            • 它包括了一套基礎的標記,如標題、段落、列表、鏈接和圖片等。
            • 引入了表單,允許用戶輸入數(shù)據(jù)和提交到服務器。

          HTML 3.2

          • 發(fā)布時間:1997年
          • 主要變化: HTML 3.2由W3C(萬維網(wǎng)聯(lián)盟)標準化,這標志著W3C在HTML標準化過程中的主導地位。 引入了表格、應用程序、Java小程序和文本流等新特性。 改進了文檔結構和表現(xiàn)元素,這是向CSS過渡的初步嘗試。

          HTML 4.01

          • 發(fā)布時間:1999年
          • 主要變化: 強調(diào)了結構與表現(xiàn)的分離,推動了CSS的使用。 引入了框架集,允許在一個單獨的瀏覽器窗口中顯示多個頁面。 支持腳本語言,如JavaScript,為動態(tài)內(nèi)容和交互性鋪平了道路。 提升了對國際化和無障礙訪問的支持。

          XHTML 1.0

          • 發(fā)布時間:2000年
          • 主要變化: XHTML是HTML的一個重要分支,它將HTML與XML結合起來,要求更嚴格的代碼編寫規(guī)范。 與HTML 4.01具有相同的元素和屬性,但需要遵守XML的自閉合標簽和大小寫敏感規(guī)則。

          HTML5

          • 發(fā)布時間:2014年
          • 主要變化:
            • HTML5引入了多種新的語義元素,如<article>、<section>、<nav>、<header>、<footer>等,使得文檔結構更加清晰。
            • 支持音頻和視頻元素<audio>和<video>,減少了對插件的依賴。
            • 引入了Canvas API和SVG,為網(wǎng)頁圖形提供了豐富的繪圖能力。
            • 提供了本地存儲、離線應用支持、地理位置API等豐富的Web應用功能。

          HTML的未來趨勢

          隨著Web技術的不斷發(fā)展,HTML也在不斷進化。未來的HTML可能會包括:

          • 更豐富的語義元素: 以提供更多的上下文信息,幫助搜索引擎和輔助技術更好地理解內(nèi)容。
          • Web組件: 標準化的自定義元素和陰影DOM,使得創(chuàng)建封裝的、可重用的組件成為可能。
          • 性能優(yōu)化: 如懶加載屬性,允許瀏覽器更智能地加載資源,提升頁面加載速度。
          • 更強的API支持: 隨著PWA(漸進式Web應用)的興起,HTML可能會增加更多與設備硬件交互的API,如藍牙、NFC等。
          • 增強的安全性: 隨著網(wǎng)絡安全威脅的增加,HTML可能會集成更多的安全特性來保護用戶數(shù)據(jù)。

          HTML的歷史是Web技術發(fā)展的縮影。從簡單的文檔標記到復雜的Web應用平臺,HTML已經(jīng)成為現(xiàn)代互聯(lián)網(wǎng)不可或缺的一部分。隨著技術的進步,我們可以期待HTML將繼續(xù)演進,以滿足未來網(wǎng)絡世界的需求。

          么是Canvas

          <canvas> 是HTML中的一個元素,它可被用來通過 JavaScript(Canvas API 或 WebGL API)繪制圖形及圖形動畫。

          Canvas API 提供了一個通過 JavaScriptHTML<canvas> 元素來繪制圖形的方式。它可以用于動畫、游戲畫面、數(shù)據(jù)可視化、圖片編輯以及實時視頻處理等方面。

          <canvas>標簽本身沒有繪圖能力,它僅僅是圖形的容器。在HTML,一般通過Javascript語言來完成實際的操作。

          創(chuàng)建HTML頁面并添加繪圖容器

          本文通過Javascript操作Canvas制作一個簡單的顯示當前時間的動畫時鐘,了解和學習簡單的canvas用法,僅以拋磚引玉。

          首先創(chuàng)建一個HTML文件,為了方便管理,使用一個div標簽包裹兩個canvas標簽,并加上一些簡單的css樣式。

          <!doctype html>
          <html lang="zh-cn">
          <head><title>Canvas繪制動畫時鐘</title>
          <style>
          html,body{margin:0;padding:0}
          #clockWrap {
          	position: relative;
          }
          canvas {
          	position: absolute;
          }
          #clock-ui {
          	z-index: 2;
          }
          #clock-plate {
          	z-index: 1;
          }
          </style>
          </head>
          <body>
            <div id="clockWrap">
            <canvas id="clock-plate"></canvas>
            <canvas id="clock-ui"></canvas>
          </div>
          <script></script>
          </body></html>

          本示例中使用了兩個canvas標簽(為什么使用兩個,一個不是更簡單嗎?),一個用于繪制鐘面,一個根據(jù)當前時間實時顯示和更新時針、分針和秒針的動態(tài)指向。好了,話不多說,開干。

          繪制鐘面刻度

          一個簡單的時鐘,可以分為鐘面上的刻度和指針。其中刻度和12個數(shù)字是固定的,我們可以將它們繪制在當作背景的canvas上(示例中id為clock-plate的canvas)。

          (1)要使用canvas,首先必須通過容器獲取渲染上下文:

          var $=function(id){return document.querySelector(id);}//這個函數(shù)只是為了方便獲取dom元素
          const canvasbg=$("#clock-plate"),
                canvas=$("#clock-ui"),
                ctx = canvasbg.getContext("2d"),//背景容器上下文
                ctxUI = canvas.getContext("2d");//指針容器上下文,后面代碼要用
          //定義畫布寬度和高度,時鐘圓直徑,并設置畫布大小
          const oW=1000,oH=800,cW=400,r=cW/2,oX=oW/2,oY=oH/2;
          canvas.width=oW;
          canvas.height=oH;
          canvasbg.width=oW;
          canvasbg.height=oH;

          (2)畫鐘的邊框,為了好看,這里畫兩個圈:

           //畫出時鐘外圓框
            ctx.lineWidth = 12;
          	ctx.beginPath();
          	ctx.arc(oX, oY, r+14, 0, 2 * Math.PI);
          	ctx.stroke();
          	ctx.closePath();
          	ctx.lineWidth = 8;
          	//畫出時鐘內(nèi)圓框(刻度圈)
          	ctx.beginPath();
          	ctx.arc(oX, oY, r, 0, 2 * Math.PI);
          	ctx.stroke();
          	ctx.closePath();
          	ctx.beginPath();

          邊框效果圖

          (3)繪制刻度線和數(shù)字,可以利用三角函數(shù)計算出每個刻度的坐標:

          利用三角函數(shù)計算刻度線的坐標位置

          鐘面上有12個大格,從正上方12開始,它們的度數(shù)分別是270,300,330,0,30,60,90,120,150,180,210,240。然后利用JS的Math.sin和Math.cos分別計算出各大格的坐標。注意:js中Math.sin()和Math.cos()的參數(shù)不是角度數(shù)弧度。可以使用Math.PI/180*角度來轉化,比如將30度轉換成弧度=Math.PI/180*30

          //繪制鐘表中心點
          	ctx.beginPath();
          	ctx.arc(oX, oY, 8, 0, 2 * Math.PI);//圓心
          	ctx.fill();
          	ctx.closePath();
          	//設置刻度線粗細度
          	ctx.lineWidth = 3;
          	//設置鐘面12個數(shù)字的字體、大小和對齊方式
          	ctx.font = "30px serif";
          	ctx.textAlign="center";
          	ctx.textBaseline="middle";
          	var kdx,kdy;
          	//繪制12個大刻度和12個數(shù)字
          	//為方便計算,先定義了0-11這12個刻度對應的度數(shù),也可以直接定義對應的弧度。
          	const hd=Math.PI/180,degr=[270,300,330,0,30,60,90,120,150,180,210,240];
          	for(var i=0;i<12;i++){
          		kdx=oX+Math.cos(hd*degr[i])*(r-3);
          		kdy=oY+Math.sin(hd*degr[i])*(r-3);
          		ctx.beginPath();
          		ctx.arc(kdx, kdy, 6, 0, 2 * Math.PI);//畫圓形大刻度
          		ctx.fill();
              //繪制刻度對應的數(shù)字
          		ctx.strokeText(i==0? 12 : i,oX+Math.cos(hd*degr[i])*(r-24),oY+Math.sin(hd*degr[i])*(r-24));
          		ctx.closePath();
          	}
          	
          	//繪制小刻度
          	ctx.lineWidth = 2;
          	for(var i=0;i<60;i++){
          		if(i % 5 == 0) continue;//跳過與刻度重疊的刻度
          		x0=Math.cos(hd*i*6);
          		y0=Math.sin(hd*i*6);
          		ctx.beginPath();
          		ctx.moveTo(oX+x0*(r-10), oY+y0*(r-10)); 
          		ctx.lineTo(oX+x0*r, oY+y0*r); //畫短刻度線
          		ctx.stroke(); 
          		ctx.closePath();
          	}

          效果如圖:

          鐘面效果圖

          (4)根據(jù)當前時間繪制指針

          習慣上,時針粗短,分針略粗而長,秒針細長。為加大區(qū)別,示例中秒針細長并且繪制成紅色。

          function drawHp(i){//繪制時針
          	const x0=Math.cos(hd*i*30),y0=Math.sin(hd*i*30);
          	drawPointer(oX,oY,oX+x0*(r-90),oY+y0*(r-90),10,"#000000");
          }
          function drawMp(i){//繪制分針
          	const x0=Math.cos(hd*i*6),y0=Math.sin(hd*i*6);
          	drawPointer(oX,oY,oX+x0*(r-60),oY+y0*(r-60),5,"#000000");
          }
          function drawSp(i){//繪制秒針
          	const x0=Math.cos(hd*i*6),y0=Math.sin(hd*i*6);
          	drawPointer(oX,oY,oX+x0*(r-20),oY+y0*(r-20),2,"#FF0000");
          }
          //抽取出繪制三種指針時共同的部分,注意指針繪制在渲染上下文ctxUI中
          function drawPointer(ox,oy,tx,ty,width,color){
          	ctxUI.strokeStyle = color;
          	ctxUI.lineCap = "round";
          	ctxUI.lineWidth = width;
          	ctxUI.beginPath();
          	ctxUI.moveTo(ox, oy);
          	ctxUI.lineTo(tx,ty);
          	ctxUI.stroke();
          	ctxUI.closePath();
          }

          現(xiàn)在已經(jīng)有了繪制三種指針的方法,參數(shù)是當前時間的時、分和秒,將根據(jù)它們的值確定指針的坐標。不過,因為使用的是默認的convas坐標體系,0值實際指向3的位置,需要小小的修正一下。

          window.requestAnimationFrame(function fn(){
          		var d = new Date();
          		ctxUI.clearRect(0,0,oW,oH);
          		//度數(shù)從0開始,而0在3刻度(15分/秒位置),修正為全值減15,如果小于0則修正回來
              var hour=d.getHours(),minute=d.getMinutes()-15,second=d.getSeconds()-15;
          		hour=hour>11? hour-15 : hour-3;
          		drawHp(hour>=0? hour : 12+hour);
          		drawMp(minute>=0? minute : 60+minute);
          		drawSp(second>=0? second : 60+second);
          		window.requestAnimationFrame(fn);
          });

          接下來,調(diào)用window.requestAnimationFrame,在其中繪制并更新指標的位置。看看效果如何:

          指針繪制情況與實際時間相符

          貌似效果有了,截圖時電腦上的時間是10時17分,指針繪制上,時針指向10時,分針指向17。嗯,感覺有點別扭?對了,時針和分針怎么是端端正正地指向它們的整時整分刻度上呢?實際鐘表上時針和分針是展示動態(tài)進度的,此時時針應該越過10時的位置才對。沒關系,我們在繪制時針和分針時別點東西,讓它的角度值加上分針和秒針的值試試。

          //修改后的繪制三種指針的方法
          function drawHp(i,f,m){//繪制時針,參數(shù):時,分,秒
          	const x0=Math.cos(hd*(i+(f/60)+(m/600))*30),y0=Math.sin(hd*(i+(f/60)+(m/600))*30);
          	drawPointer(oX,oY,oX+x0*(r-90),oY+y0*(r-90),10,"#000000");
          }
          function drawMp(i,f){//繪制分針,參數(shù),分,秒
          	const x0=Math.cos(hd*(i+(f/60))*6),y0=Math.sin(hd*(i+(f/60))*6);
          	drawPointer(oX,oY,oX+x0*(r-60),oY+y0*(r-60),5,"#000000");
          }
          function drawSp(i){//繪制秒針
          	const x0=Math.cos(hd*i*6),y0=Math.sin(hd*i*6);
          	drawPointer(oX,oY,oX+x0*(r-20),oY+y0*(r-20),2,"#FF0000");
          }

          再來看看效果,嗯,立竿見影呀:

          指針指向更合理了

          到此為止,canvas繪制一個簡易時鐘就完成了。下面繼續(xù)優(yōu)化一下。剛才使用requestAnimationFrame方法即時更新繪制情況。這個方法與刷新率有關,看看mdn上面怎么說的:

          window.requestAnimationFrame() 方法會告訴瀏覽器你希望執(zhí)行一個動畫。它要求瀏覽器在下一次重繪之前,調(diào)用用戶提供的回調(diào)函數(shù)。

          對回調(diào)函數(shù)的調(diào)用頻率通常與顯示器的刷新率相匹配。雖然 75hz、120hz 和 144hz 也被廣泛使用,但是最常見的刷新率還是 60hz(每秒 60 個周期/幀)。為了提高性能和電池壽命,大多數(shù)瀏覽器都會暫停在后臺選項卡或者隱藏的 <iframe> 中運行的 requestAnimationFrame()。

          本示例中,更新指針的位置并不需要很高的刷新頻率,可以通過節(jié)流進行一下優(yōu)化:

          var fps = 5, fpsInterval = 1000 / fps,lastTime = new Date().getTime(); //記錄上次執(zhí)行的時間
          function runStep() {
              requestAnimationFrame(runStep);
              var d=new Date(),now = d.getTime()
              var elapsed = now - lastTime;
              if (elapsed > fpsInterval) {
          				ctxUI.clearRect(0,0,oW,oH);
                  lastTime = now - (elapsed % fpsInterval); 
          			//度數(shù)從0開始,而0在3刻度(15分/秒位置),修正為全值-15,如果小于0則用60減回
                  var hour=d.getHours(),minute=d.getMinutes()-15,second=d.getSeconds()-15;//console.log(d.getSeconds(),second);
                  hour=hour>11? hour-15 : hour-3;
                  drawHp(hour>=0? hour : 12+hour,minute+15,second+15);
                  drawMp(minute>=0? minute : 60+minute,second+15);
                  drawSp(second>=0? second : 60+second);
              }
          }
          runStep();

          當然,實現(xiàn)時鐘的方法是很多,比如可以使用畫布的旋轉(rotate方法)來實現(xiàn)指針的動態(tài)轉動等等。

          完整HTML+JS源碼:


          主站蜘蛛池模板: 国产99久久精品一区二区| 国产福利一区二区在线视频| 国产精品日韩欧美一区二区三区| 国产精品无码一区二区在线观| 一区二区三区精品视频| 精品国产a∨无码一区二区三区 | 丰满爆乳一区二区三区| 亚洲AV无码一区二区三区牛牛 | 日韩成人无码一区二区三区| 国产日韩一区二区三免费高清 | 精品成人一区二区三区四区| 久久精品免费一区二区喷潮| 久久精品午夜一区二区福利| 亚洲成AV人片一区二区密柚| 国产午夜精品一区二区三区小说 | 国产传媒一区二区三区呀| 亚洲综合av一区二区三区| 亚洲综合一区二区国产精品| 国产免费一区二区三区在线观看| 内射少妇一区27P| 国产亚洲综合一区二区三区 | 国产成人av一区二区三区在线观看| 亚洲AV无码一区二区三区在线| 色偷偷一区二区无码视频| 国产AV一区二区三区传媒| 国产无线乱码一区二三区| 国产自产V一区二区三区C| 伊人激情AV一区二区三区| 国产成人久久精品一区二区三区| 久夜色精品国产一区二区三区| 人妻内射一区二区在线视频| 一区二区三区免费电影| 又硬又粗又大一区二区三区视频| 亚洲色无码一区二区三区 | 亚洲av不卡一区二区三区| 亚洲日本精品一区二区| 国产成人精品日本亚洲专一区 | 国产乱码精品一区二区三区中文| 国产成人无码一区二区三区| 中文字幕无码不卡一区二区三区 | 精品无码国产AV一区二区三区 |