精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

操作實例:閱讀器應(yīng)用(JavaScript和HTML)

開發(fā)
隨著平板電腦變得越來越普及,融合了閱讀體驗的應(yīng)用很快就會變得流行起來。 下面我們重點介紹了可用來創(chuàng)建優(yōu)秀閱讀器應(yīng)用的新 CSS 和 HTML5 功能。 閱讀本文后,你將對在這些應(yīng)用中使用的主要布局功能有一個全面的了解,而且還可以獲得一個基本的閱讀器應(yīng)用引導(dǎo)你入門。現(xiàn)在,我們了解一下在 Windows 中營造卓越閱讀器體驗的詳細(xì)信息。

隨著平板電腦變得越來越普及,融合了閱讀體驗的應(yīng)用很快就會變得流行起來。 下面我們重點介紹了可用來創(chuàng)建優(yōu)秀閱讀器應(yīng)用的新 CSS 和 HTML5 功能。 閱讀本文后,你將對在這些應(yīng)用中使用的主要布局功能有一個全面的了解,而且還可以獲得一個基本的閱讀器應(yīng)用引導(dǎo)你入門。現(xiàn)在,我們了解一下在 Windows 中營造卓越閱讀器體驗的詳細(xì)信息。

簡介

Windows 8 為開發(fā)人員和設(shè)計者提供了一系列最新的 HTML5 和 CSS3 功能,用于創(chuàng)建新穎獨特的閱讀體驗。具體而言,由于諸如 CSS 區(qū)域和 CSS 網(wǎng)格等新技術(shù),你可以創(chuàng)建數(shù)字出版物,讓這些出版物結(jié)合 HTML 的優(yōu)勢—流體布局、基于標(biāo)記的樣式、可訪問的內(nèi)容、交互性—與到目前為止僅在印刷領(lǐng)域中可用的創(chuàng)新布局。

傳統(tǒng)網(wǎng)頁內(nèi)容的呈現(xiàn)形式為單列豎排。段落堆放在段落和其他圖像之上,偶爾插入的浮動元素可呈現(xiàn)出一些視覺多樣化。“頁面”僅通過將內(nèi)容分段為不同的 HTML 文檔來創(chuàng)建;不存在任何基于標(biāo)記的方式來獲取一連串的內(nèi)容并將內(nèi)容分段為單個的文本屏幕。缺少用于創(chuàng)建列和適應(yīng)屏幕大小的強(qiáng)大控件表示許多頁面僅針對特定 分辨率(如 1024 × 768)進(jìn)行優(yōu)化。在高分辨率、寬屏幕監(jiān)視器上呈現(xiàn)為小分辨率優(yōu)化的文本時,你會看到糟糕體驗的一個好示例。 以下圖像顯示了縱橫比為 4:3 的監(jiān)視器上的單列布局。

在 4:3 監(jiān)視器上呈現(xiàn)的單列文本。

以下圖像顯示了寬屏幕監(jiān)視器上具有空白區(qū)域的相同布局。

寬屏幕監(jiān)視器上呈現(xiàn)的單列文本。

相比之下,設(shè)計用于充分利用頁面可用空間的頁面可能會以多列文本為特征,從而在填充屏幕的同時確保文本的各行不會太長,易于閱讀。 通過一些小的優(yōu)化措施,標(biāo)題可以增加其大小以更加搶眼,并且當(dāng)文本環(huán)繞在圖像周圍時可以為圖像提供更加顯眼的位置。

以下圖像顯示了用于寬屏幕監(jiān)視器的改進(jìn)閱讀器布局。

寬屏幕監(jiān)視器的布局

印刷設(shè)計者長久以來都可以輕松設(shè)計這樣的布局,因為他們只需要應(yīng)付預(yù)先已知的固定頁面大小。適應(yīng)性布局的設(shè)計者必須使用諸如 CSS 網(wǎng)格和媒體查詢等工具來創(chuàng)建頁面,這些頁面智能地適應(yīng)不同的屏幕大小。

本文章與動態(tài) CSS 區(qū)域模板示例一起介紹如何創(chuàng)建適應(yīng)各種屏幕大小的美觀布局來進(jìn)行閱讀。在查看新的 CSS 閱讀功能中,我們仔細(xì)查看了幾個新功能,你可以使用這些功能以創(chuàng)新性的新方式呈現(xiàn)文本和圖像。在匯聚多個功能以創(chuàng)建良好的閱讀體驗中,我們通過說明如何組合這些功能來構(gòu)建適應(yīng)性閱讀體驗來繼續(xù),該體驗結(jié)合了優(yōu)秀設(shè)計與流體和美觀布局。

查看新 CSS 閱讀功能

我們了解一下你可能會在閱讀器應(yīng)用中使用的新 CSS 功能:多列、斷字、網(wǎng)格、區(qū)域以及排除項。

多列

通過 CSS 多列,設(shè)計人員可以將元素 — 例如,div 元素或頁面的 body— 的內(nèi)聯(lián)內(nèi)容(如文本)設(shè)置為尺寸相同且相鄰的多個連續(xù)列格式。例如,只需將 CSS 屬性 column-count: 2; 添加到 div,即可生成如下圖所示的布局。

在文本塊上使用 CSS 多列

但是,多列也確實有一些限制。所有列必須具有相同的尺寸,而且相互之間相鄰放置。而且,多列元素的內(nèi)容遵守 CSSoverflow 屬性;即它剪切、添加滾動條,或通過在原始元素旁邊創(chuàng)建其他列來溢出。 由于這些原因,CSS 區(qū)域在以下這些情形下可能是更好的文本布局選項:需要更多變的頁面布局,或元素的內(nèi)聯(lián)內(nèi)容可能溢出元素。下圖顯示了通過溢出多列元素創(chuàng)建的新列。

通過溢出多列元素創(chuàng)建的新列

Note  CSS 多列有一個“平衡”選項,可以確保所有列的長度相同,而且最后一列不會顯著短于其他列。此功能不能確保這些列具有相同的行數(shù),也不能確保這些行在各列中都是對齊的。應(yīng)當(dāng)為多列元素中的內(nèi)容設(shè)置格式,以使所有元素都是單行高度的倍數(shù),包括段落和圖像的補白。

下圖顯示了經(jīng)過平衡的多列布局(淡藍(lán)色外框)與未經(jīng)平衡的布局(紅色外框)相比較,如何設(shè)置內(nèi)容的格式。

經(jīng)過平衡和未經(jīng)平衡的多列布局

#p#

Note  此示例經(jīng)過了適當(dāng)?shù)钠胶猓驗榱袃?nèi)的元素根據(jù)列尺寸和間距進(jìn)行了匹配。

下列代碼顯示了這兩種布局的創(chuàng)建方法。

  1. <!DOCTYPEHTML> 
  2. <html> 
  3.  
  4. <head> 
  5.   <style> 
  6.  
  7.     #div1{ 
  8.         width: 180px; 
  9.         height: 300px; 
  10.         column-fill: balance; 
  11.         column-count: 2; 
  12.         float: left; 
  13.         border: solid 2px lightblue; 
  14.         margin-right: 8px; 
  15.     } 
  16.     #div2{      
  17.         width: 180px; 
  18.         height: 300px; 
  19.         column-fill: auto; 
  20.         column-count: 2; 
  21.         float: left; 
  22.         border: solid 2px red; 
  23.         margin-right: 8px; 
  24.     } 
  25.   </style> 
  26. </head> 
  27.  
  28. <body> 
  29. <div id="div1" class="div1"> 
  30.     Hi friend! Hi friend! Hi friend! Hi friend!  
  31.     Hi friend! Hi friend! Hi friend! Hi friend!  
  32.     Hi friend! Hi friend! Hi friend! Hi friend!  
  33.     Hi friend! Hi friend! Hi friend! Hi friend!  
  34.     Hi friend! Hi friend! Hi friend! Hi friend!  
  35. </div> 
  36. <div id="div2"> 
  37.     Hi friend! Hi friend! Hi friend! Hi friend!  
  38.     Hi friend! Hi friend! Hi friend! Hi friend!  
  39.     Hi friend! Hi friend! Hi friend! Hi friend!  
  40.     Hi friend! Hi friend! Hi friend! Hi friend!  
  41.     Hi friend! Hi friend! Hi friend! Hi friend!     
  42. </div> 
  43. </body> 
  44.  
  45. </html> 

斷字

多列使我們可以將內(nèi)聯(lián)內(nèi)容(如文本)布置在相對較窄的列中。但是這些列的內(nèi)容看起來可能會參差不齊,特別是在平均單詞長度占列寬度的較大比例時。尤其是,當(dāng)列與 text-align: justify 屬性結(jié)合使用時,單詞之間可能會出現(xiàn)較大的空白間隙,從而使內(nèi)容的外觀不規(guī)則且不美觀,如下所示。

沒有斷字,完全對齊的文本,但存在過多的空白

相應(yīng)地,我們現(xiàn)在提供自動斷字功能,這樣多行的排列更緊密,同時還提供強(qiáng)大的閱讀體驗,如下所示。

斷字后,完全對齊的文本,只有很小的空白

斷字在 W3C CSS 文本級別 3 規(guī)范的部分中定義。CSS 斷字提供了以下能力:

  • 指定斷字分隔符前后的最小字詞片段長度。
  • 指定連續(xù)斷字行的最大數(shù)量。
  • 避免段落和列中最后的字詞被斷字。
  • 指定自定義斷字字符。

大量語言支持在 Windows 8 和 Internet Explorer 10 中進(jìn)行斷字,且建議將斷字用于 CSS 多列和區(qū)域。

網(wǎng)格

CSS 網(wǎng)格布局的核心理念是,將頁面劃分成定義好的一組行和列,然后根據(jù)這些行和列使用 CSS 設(shè)置元素的位置和尺寸。因為行和列的尺寸可以定義為固定、靈活或按內(nèi)容調(diào)整大小,所以很容易構(gòu)建一個完全填滿整個屏幕的布局,無論屏幕尺寸如何。

例如,下圖顯示了一個閱讀器示例,它劃分為帶有多個元素的兩列和三行。在瀏覽器窗口的尺寸更改時,某些元素必須保持不變,而其他元素會增大或縮小。

文本分布在頁面內(nèi)的各區(qū)域

通過 CSS 網(wǎng)格布局,你可以通過以下列標(biāo)記開始實現(xiàn)此設(shè)計。

  1. <div id="grid"> 
  2.     <div id="logo">Reader Logo</div>  
  3.     <div id="page">Page</div>  
  4.     <div id="bookmarks">Bookmarks</div>  
  5.     <div id="content">Reader Content</div>  
  6.     <div id="controls">Controls</div>  
  7. </div> 

名為 griddiv 元素通過應(yīng)用 CSS 樣式 display: grid 設(shè)置為 grid 容器。你可以將各個行和列定義為“靈活”,它基于可用的空間增大或縮小行和列,也可以將其定義為“自動調(diào)整大小”,它調(diào)整行或列的大小以適應(yīng)放在其中的最大元素的寬度或高度。

  1. #grid { 
  2.     display: -ms-grid; 
  3.     -ms-grid-columns: auto 1fr; 
  4.     -ms-grid-rows: auto 1fr auto

定義網(wǎng)格后,你可以將各個元素放在特定的網(wǎng)格單元格中。顯示下列標(biāo)記時,你不僅可以指定將元素放置在 CSS 中特定的行和列中,而且還可以指定讓一個元素跨多個行和列放置,并指定元素在一個單元格或一系列單元格中水平或垂直對齊。

  1. #logo { -ms-grid-column: 1; -ms-grid-row: 1 }  
  2. #page { -ms-grid-column: 1; -ms-grid-row: 3 }  
  3. #bookmarks { -ms-grid-column: 1; -ms-grid-row: 2; -ms-grid-row-align: start }  
  4. #content { -ms-grid-column: 2; -ms-grid-row: 1; -ms-grid-row-span: 2 }  
  5. #controls { -ms-grid-column: 2; -ms-grid-row: 3; -ms-grid-column-align: center } 

可以指定元素具有固定尺寸,或填充它們所在單元格的可用寬度或高度。在前面的示例中,content 元素隨著屏幕增大,而其他元素(如 logo 元素)保持尺寸不變。

#p#

Note  因為新層疊樣式表級別 3 (CSS3) 仍為一個新興規(guī)范,所以在 Internet Explorer 10 中使用時,所有網(wǎng)格屬性都帶有前綴 "-ms-"。

通過將網(wǎng)格布局功能與 CSS3 媒體查詢相結(jié)合,你可以為不同的分辨率、縱橫比和屏幕方向指定完全不同的布局。例如,你可以針對不同的屏幕尺寸定義不同的行數(shù)或列數(shù),從而為垂直“縱向”布局指定較少的列,為水平“橫向”布局指定較多的列。你還可以指定行和列按不同方式調(diào)整大小。

此外,因為網(wǎng)格中元素的位置與指定它們的順序無關(guān) — 即它們的位置單純由 CSS 指定,而不是由 HTML 標(biāo)記中的順序指定— 所以很容易在不同屏幕尺寸上為元素指定不同的排列,甚至可以完全避免在某些布局上顯示某些元素。

區(qū)域

CSS 區(qū)域支持設(shè)計人員將內(nèi)容從一個包含元素流入另一個元素,這樣可以將一個頁面或多個頁面中不同區(qū)域的內(nèi)容流連接在一起。此功能使新設(shè)計和創(chuàng)新設(shè)計成為可能。 例如,下圖顯示文本跨頁面內(nèi)兩個區(qū)域流動。請注意,與 CSS 多列不同,區(qū)域允許容器有不同的尺寸,也不需要相互直接緊密相鄰。

文本跨多個頁面的多個區(qū)域流動

區(qū)域也可用于跨多個虛擬頁流動單個內(nèi)容流(例如一篇文章的文本),如下圖所示。

Content.html 通過 CSS 區(qū)域流到 Master.html

請注意,此上下文中的“頁面”不是通過打印過程創(chuàng)建的頁面(例如使用“@page”CSS 規(guī)則設(shè)置樣式的頁面),而是包含一個或多個區(qū)域的 div 元素。通過在可滾動區(qū)域(通常使用貼靠點來模擬翻頁)中放置這些 div 元素,我們可以創(chuàng)造一種分頁閱讀體驗,其中單個內(nèi)容流顯示在多個全屏頁面上,而不是顯示為單個內(nèi)容滾動區(qū)域。此外,區(qū)域可以與 CSS 網(wǎng)格和媒體查詢結(jié)合使用,以創(chuàng)建準(zhǔn)確符合特定屏幕尺寸的頁面,并生成顯示特定內(nèi)容流所需的準(zhǔn)確頁數(shù)。

下圖顯示了區(qū)域工作原理的高級概述。來自源文檔 (Content.html) 的內(nèi)容流入主模板文檔 (Master.html) 的多個區(qū)域。

Content.html 通過 CSS 區(qū)域流到 Master.html

需要注意,區(qū)域不參與文檔的 CSS 樣式層疊,因此在特定區(qū)域上放置的樣式規(guī)則(如 text-color: red)不影響區(qū)域中的內(nèi)容。但是對內(nèi)容文檔本身放置的樣式規(guī)則一定會影響內(nèi)容,盡管這些規(guī)則不影響主模板文檔中的任何元素。

同樣,主模板中區(qū)域顯示的內(nèi)容不存在于主模板的文檔對象模型 (DOM) 中;通過 Microsoft Visual Studio 中的 DOM 資源管理器查看 Master.html,例如,將顯示每個區(qū)域為空。相反,區(qū)域顯示的內(nèi)容存在于 Master.html 中的隱藏 iframe 元素中,并指向 Content.html。

排除項

CSS 排除項提供了一種使內(nèi)聯(lián)內(nèi)容環(huán)繞元素(如圖像、標(biāo)題或文本標(biāo)注)的方法。排除項與 CSS 浮動類似,但是排除項不是被推到包含塊的一側(cè)或另一側(cè),而是可以放置在包含塊的中間,并且使內(nèi)容圍繞兩側(cè)流動,如下所示。

內(nèi)聯(lián)內(nèi)容圍繞排除項流動

排除項一次可以與多個環(huán)繞元素交互。例如,排除項可以由多個區(qū)域環(huán)繞,并且使每個區(qū)域中的內(nèi)容都圍繞它。有關(guān)如何執(zhí)行此操作的詳細(xì)信息,請參閱結(jié)合使用多個功能以營造完美閱讀體驗。

請注意,在 Internet Explorer 10 中,區(qū)域只能是矩形塊。但是,多個區(qū)域可以放置為排列在一起,以創(chuàng)建非矩形的區(qū)域。

結(jié)合使用多個功能以營造完美閱讀體驗

現(xiàn)在,我們已經(jīng)了解可用來在 Windows 8 中營造完美閱讀體驗的各項技術(shù),讓我們來討論一下如何結(jié)合使用這些技術(shù)。我們通過查看動態(tài) CSS 區(qū)域模板示例來 完成這些操作。首先,我們介紹如何結(jié)合使用網(wǎng)格、媒體查詢、區(qū)域及排除項來創(chuàng)建各個頁面模板。接著,我們查看實例化這些頁面模板,直到已顯示源文檔中的所 有內(nèi)容的 JavaScript 代碼。最后,我們查看可以基于屏幕尺寸或字體大小更改來調(diào)整頁數(shù)的附加 JavaScript 代碼。

布置頁面模板

以下圖像顯示示例的第 1 頁,其中包括:

  • 一個標(biāo)題(“動態(tài)區(qū)域模板示例”)。
  • 作為兩個并行列布置的兩個區(qū)域。
  • 位于頁面中間的一個排除集(土星的圖片),這會導(dǎo)致兩個區(qū)域中周圍的內(nèi)容環(huán)繞該排除集。

#p#

結(jié)合使用網(wǎng)格、區(qū)域和排除項來創(chuàng)建獨特的頁面

下圖顯示了頁面 1 的網(wǎng)格結(jié)構(gòu)。

動態(tài)區(qū)域模板示例的頁面 1 的網(wǎng)格劃分

尤其是,頁面 1 包含單個 div 元素,此元素通過使用 display: -ms-grid 屬性變?yōu)橐粋€網(wǎng)格。其他元素(如區(qū)域和排除項)放在此單個 div 上。為此網(wǎng)格指定應(yīng)用程序區(qū)域的整個寬度和高度,如果應(yīng)用處于填充或貼靠模式,則該區(qū)域可能是整個屏幕或屏幕的一部分。

頁面 1 劃分為 4 列 5 行。每一列的大小是 1 個分?jǐn)?shù)單位 (1FR),它表示在布置固定尺寸和自動調(diào)整尺寸的軌跡(行或列)后,可用于網(wǎng)格的所有空間的其中一份。在此例中,因為沒有固定尺寸或自動調(diào)整尺寸的軌跡,所以每一列占有應(yīng)用程序區(qū)域的 25% 寬度。

與之相比,頁面 1 上 5 行中的第一行是自動調(diào)整尺寸行,而其余的行只有微小的尺寸調(diào)整。頁面標(biāo)題在第 1 行,它將占用顯示“Dynamic region Templates Sample”標(biāo)題所需的空間。應(yīng)用程序區(qū)域的其余高度被其余行占用,其中每行只有不到應(yīng)用程序區(qū)域的 25%。

網(wǎng)格內(nèi)包含兩個區(qū)域。每個區(qū)域跨兩列四行:第一個區(qū)域位于第 2 行,第 1 列(CSS 網(wǎng)格 1 索引),第二個區(qū)域位于第 2 行,第 3 列。每個區(qū)域只是一個設(shè)置了 -ms-flow-from: content 屬性的 div 元素。因為每個區(qū)域共用同一個流名稱,所以內(nèi)容流從第一個區(qū)域開始,繼續(xù)到下一個,然后前進(jìn)到不同頁面的后續(xù)區(qū)域。

網(wǎng)格還用于將排除項放置在頁面的中間。在此例中,排除項是一個 div 元素,通過 CSSflexbox 顯示屬性將一張土星圖像放置在中間。此排除項通過設(shè)置 -ms-wrap-flow: both 屬性創(chuàng)建。當(dāng)排除項放置在網(wǎng)格中間(第 3 行,第 2 列,跨兩行兩列)后,與排除項相交的任何內(nèi)聯(lián)內(nèi)容將環(huán)繞它分布。此行為與傳統(tǒng)的浮動元素不同,后者必須放置在頁面的一側(cè)。

請注意,區(qū)域和排除項的放置都是跨行和列延伸的。出現(xiàn)這種情況,是因為應(yīng)用運行的設(shè)備具有不同的屏幕分辨率,或者因為應(yīng)用已經(jīng)在全屏幕和填充模式之 間進(jìn)行切換。隨著應(yīng)用分辨率更改尺寸,屏幕上的元素也相應(yīng)增大和縮小。這明顯是區(qū)域的最優(yōu)行為,因為我們希望文本區(qū)域填滿應(yīng)用程序區(qū)域,但是不要溢出。沒 有填入?yún)^(qū)域的任何文本僅簡單移入到下一個區(qū)域。根據(jù)內(nèi)容,設(shè)計人員可能不希望圖像隨著屏幕尺寸進(jìn)行拉伸,而希望保留圖像的縱橫比或絕對尺寸。這可以通過更 改 –ms-grid-row-align–ms-grid-column-align 屬性的 stretch 默認(rèn)值來輕松實現(xiàn)。

接下來的兩個圖像顯示了 Dynamic Region Templates Sample 的頁面 2 和頁面 3 的網(wǎng)格劃分。這兩個頁面布局都是 4 × 4 的網(wǎng)格,其中每一行和每一列都等于可用空間的相等分?jǐn)?shù)尺寸。這兩個頁面的唯一實質(zhì)性差別(除了背景圖像的明顯不同)是頁面 2 具有單一區(qū)域跨越頁面中間的兩行兩列,而頁面 3 具有多個區(qū)域,在整個頁面上交錯分布。總體而言,所有這些頁面演示了單個內(nèi)容流通過 CSS 區(qū)域分布到多個頁面。

下面是頁面 2。

動態(tài)區(qū)域模板示例的頁面 2 的網(wǎng)格劃分

下面是頁面 3。

動態(tài)區(qū)域模板示例的頁面 3 的網(wǎng)格劃分

 

Note  上面所有三個頁面中顯示的內(nèi)容都完全對齊而且應(yīng)用了斷字。這些樣式屬性是在內(nèi)容(來自 content.html 文件)上設(shè)置的,而不是在任何區(qū)域本身上設(shè)置的。如前面所提到的,這是因為樣式層疊不會滲透進(jìn)入?yún)^(qū)域。

實例化頁面模板

我們已經(jīng)討論了如何使用區(qū)域、網(wǎng)格和排除項來創(chuàng)建頁面。你可以在動態(tài) CSS 區(qū)域模板示例項 目中看到這些頁面,分別為 page1.html、page2.html 和 page3.html。但是,我們還沒有檢查在激活應(yīng)用時,這些頁面是如何動態(tài)創(chuàng)建的。由于根據(jù)屏幕尺寸和字體大小,顯示內(nèi)容文檔所需的頁數(shù)會發(fā)生變化 — 較小的屏幕或較大的字體意味著每頁容納的單詞更少,因此需要更多的頁數(shù) – 必須在運行時動態(tài)實例化頁面。現(xiàn)在,我們討論如何在 Windows 應(yīng)用商店應(yīng)用中實例化預(yù)定義的模板,一次一個,直到顯示整個內(nèi)容文檔。之后,我們將討論如何根據(jù)屏幕尺寸或字體大小的運行時變化采用適合的頁數(shù)。

下面的示例顯示了 Dynamic CSS Region Templates Sample 的結(jié)構(gòu)。特別是,帶有 appContainerid 屬性的 div 元素同時包含源 iframe 元素和包含各個頁面的 pageContainerdiv 元素。iframe 指向 content.html 文檔,此文檔將在多個頁面中跨多個區(qū)域顯示。因為 iframe 具有 -ms-flow-into: content 屬性,所以不會顯示它。appContainerdiv 和各個頁面將占用分配給應(yīng)用的所有可用屏幕空間,因為它們的寬度和高度都設(shè)置為 100% 的應(yīng)用程序區(qū)域。

#p#

示例應(yīng)用的結(jié)構(gòu)

通過使用 display: -ms-box 屬性,已經(jīng)將 pageContainerdiv 配置為 flexbox,并且已經(jīng)將 body 元素設(shè)置為 overflow: scroll。因為 flexbox 的默認(rèn)行為是將其中的所有元素相鄰放置,從而達(dá)到按需要水平增長,所以用戶可以通過鼠標(biāo)或觸控輸入水平平移來滾動瀏覽頁面。

Note  設(shè)計人員通過設(shè)置 -ms-box-orient: vertical 屬性,可以輕松切換到垂直分頁模式。同時,為了使觸控滾動能正確工作,iframe 元素必須與正在滾動的頁面位于同一個父元素中。如果滾動元素是 body 元素本身,這顯然不是問題,但是在 iframe 和頁面的其他配置中,這可能會出現(xiàn)問題。

現(xiàn)在我們已了解閱讀應(yīng)用最終將如何構(gòu)建,接下來我們討論頁面在應(yīng)用中是如何放置的。下面的示例代碼來自 regionTemplatePage.js,顯示了 pageTemplates 陣列。

  1. var pageTemplates = [ 
  2.      '/html/page1.html', 
  3.      '/html/page2.html', 
  4.      '/html/page3.html', 
  5.      '/html/pageDefault.html' 
  6.  ]; 

pageTemplates 陣列指向應(yīng)用包中與將要實例化的頁面對應(yīng)的各個文件及 createPages 函數(shù)使用的引用文件。createPages 函數(shù)被源 iframeload 事件觸發(fā)的事件偵聽器函數(shù)調(diào)用。

下列代碼顯示了 createPages,從 pageTemplates 陣列選擇和實例化頁面模板的函數(shù)。

  1. unction createPages() { 
  2.  
  3.         var targetPage; 
  4.  
  5.         if (currentPage &gt; (pageTemplates.length - 1)) { 
  6.             targetPage = pageTemplates[pageTemplates.length - 1]; 
  7.         } else { 
  8.             targetPage = pageTemplates[currentPage]; 
  9.         } 
  10.                
  11.         var flexboxElement = document.getElementById('pageContainer'); 
  12.         WinJS.UI.Fragments.render(targetPage, flexboxElement).then(function () { 
  13.             msSetImmediate(function () { 
  14.                 currentPage += 1; 
  15.                 var flexboxElement = document.getElementById('pageContainer'); 
  16.                 var pages = flexboxElement.querySelectorAll('.page'); 
  17.                 var lastPage = pages[pages.length - 1]; 
  18.                 var regions = lastPage.querySelectorAll(searchClass); 
  19.                 var lastRegion = regions[regions.length - 1]; 
  20.                 if (lastRegion.msRegionOverflow === 'overflow') { 
  21.                     createPages(); 
  22.                 } 
  23.             }); 
  24.         }); 
  25.     } 

此函數(shù)執(zhí)行三個主要步驟:選擇模板、呈現(xiàn)模板并確定是否需要其他模板。在第一步中,根據(jù)當(dāng)前呈現(xiàn)的頁碼將 targetPage 變量設(shè)置為適當(dāng)?shù)捻撁婺0濉Mㄟ^按 createPages 遞增的計數(shù)器方法,將 SDK 示例設(shè)置為呈現(xiàn) pageTemplates 陣列中的每一頁一次,然后再呈現(xiàn)下一頁。如果示例已達(dá)到陣列末尾,則使用最后一頁模板,直到內(nèi)容呈現(xiàn)完畢。

確定頁面模板后,createPages 將從適用于 JavaScript 的 Windows 庫調(diào)用片段加載程序函數(shù),以便將所選模板呈現(xiàn)到 pageContainer 元素。片段加載程序?qū)@取目標(biāo)頁面文件(此示例中的 page1.html)的 body 元素中的所有內(nèi)容,并將其插入到指定的元素(在此例中為 pageContainer 元素)中。因為片段加載程序是異步調(diào)用,所以其余的 createPages 函數(shù)必須等待,直到激活 then 函數(shù)。

激活 then 之后,createPages 導(dǎo)航 DOM 以查找最后一頁上的最后區(qū)域。createPages 測試此區(qū)域,以查看是否仍有來自內(nèi)容文檔的其他內(nèi)容要呈現(xiàn)。如果未將 msRegionOverflow 屬性設(shè)置為 "overflow",則內(nèi)容文檔已完全呈現(xiàn)在最后一個區(qū)域中或最后一頁的其他區(qū)域中。如果將 msRegionOveflow 屬性設(shè)置為 "overflow",則其他內(nèi)容將保留等待呈現(xiàn)。在這種情況下,將調(diào)用 createPages 并重新開始。

Note  由于 msSetImmediate 調(diào)用,在激活 then 函數(shù)之前存在初始 createPages 調(diào)用。這意味著 createPages 不是真正的遞歸,因為一次只有一個 createPages 實例放置在調(diào)用堆棧上。

Note  顯然,createPages 使用的模板選擇機(jī)制可供設(shè)計人員調(diào)整以滿足自己的需求。例如,不用一次又一次重復(fù)使用上次使用的模板,只要還有其他內(nèi)容需要顯示,則可以改變函數(shù)以重復(fù)循環(huán)使用模板陣列。此外,createPages 使用的簡單陣列和模板選擇機(jī)制可由任意復(fù)雜邏輯取代,復(fù)雜邏輯可能基于其他因素選擇頁面模板,例如正在呈現(xiàn)的源內(nèi)容部分或主機(jī)設(shè)備的特定分辨率或方向。

最后,createPages 函數(shù)適合每一頁都與下一頁不同的閱讀器應(yīng)用。但是,某些應(yīng)用(如電子書)可能需要更多的頁面,但完全不同的頁面類型較少。對于這些應(yīng)用,尤其是源內(nèi)容很長 (例如,長篇大作的完整文本)時,建議一次加載多個頁面模板。例如,電子書閱讀應(yīng)用不使用包含單個模板的 Page1.html 文件,而使用包含多個模板的 Pages.html 文件,每個模板是簡單的兩列或三列布局。通過將這些頁面全部一起加載到內(nèi)存中,可以顯著提升整體性能。請注意,遵循此方法可能導(dǎo)致 createPages"超過"所需的頁數(shù),并使某些頁面沒有內(nèi)容。此問題可通過使用 resizePages 函數(shù)來修復(fù),此函數(shù)將在下一部分進(jìn)行詳細(xì)介紹。

#p#

調(diào)整頁面模板大小

前面我們介紹了如何使用網(wǎng)格、區(qū)域和排除項來創(chuàng)建頁面模板,以及如何在運行時實例化應(yīng)用內(nèi)的這些頁面模板。然而,能夠響應(yīng)外部事件,在運行時更改頁 數(shù)也是很重要的。即使內(nèi)容文檔保持不變,更改應(yīng)用程序區(qū)域可能導(dǎo)致應(yīng)用的視圖狀態(tài)從全屏更改為填充或貼靠模式,從而導(dǎo)致頁面縮小或增大。更改應(yīng)用程序區(qū)域 可能導(dǎo)致每個頁面裝入不同的內(nèi)容量,并且可能要求在應(yīng)用中添加或刪除頁面。

下列代碼示例顯示了 resizePages 函數(shù),此函數(shù)支持添加或刪除頁面以響應(yīng)外部事件。在動態(tài) CSS 區(qū)域模板示例中,調(diào)用 resizePages 以響應(yīng)應(yīng)用視圖狀態(tài)更改,但是也可以調(diào)用此函數(shù)響應(yīng)諸如調(diào)整字體大小等事件。

  1. function resizePages() { 
  2.        var flexboxElement = document.getElementById('pageContainer'); 
  3.        var pages = flexboxElement.querySelectorAll('.page'); 
  4.        var lastPage = pages[pages.length-1]; 
  5.         
  6.        var regions = lastPage.querySelectorAll(searchClass); 
  7.        var lastRegion = regions[regions.length-1]; 
  8.  
  9.        if (lastRegion.msRegionOverflow === 'overflow') { 
  10.            createPages(); 
  11.        } 
  12.        else { 
  13.            var firstRegion = regions[0]; 
  14.            while (firstRegion.msRegionOverflow === 'empty'
  15.            { 
  16.                flexboxElement.removeChild(lastPage); 
  17.                currentPage = currentPage - 1; 
  18.                lastPage = pages[currentPage-1]; 
  19.                regions = lastPage.querySelectorAll(searchClass); 
  20.                firstRegion = regions[0]; 
  21.            } 
  22.        } 
  23.    } 

resizePages 函數(shù)首先定位最后一頁上最后的區(qū)域。與 createPages 函數(shù)一樣,它接著測試此區(qū)域以確定是否還有更多內(nèi)容需要更多頁面來顯示。如果有要顯示的內(nèi)容,resizePages 將調(diào)用 createPages。此外,如果最后一個區(qū)域上沒有更多內(nèi)容,此函數(shù)將查找最后一頁上的第一個區(qū)域。如果 msRegionOverflow 屬性指示此區(qū)域不為空,我們知道內(nèi)容文檔是在最后一頁結(jié)束的;不會執(zhí)行進(jìn)一步的操作,因為至少在最后一頁的第一個區(qū)域中有內(nèi)容,而且沒有內(nèi)容溢出最后一個區(qū)域。此外,如果最后一頁上的第一個區(qū)域為空,則最后一頁沒有內(nèi)容,它完全是空的。resizePages 函數(shù)刪除最后一頁,并調(diào)用它本身來測試新的最后一頁。

結(jié)合使用 resizePagescreatePages,便足以在應(yīng)用中添加和刪除頁面。示例頁面模板設(shè)計可以靈活伸縮以填充各種屏幕尺寸,但是設(shè)計人員可能需要頁面能夠在不同的視圖狀態(tài)、方向或屏幕分辨率下重新調(diào)整布局結(jié)構(gòu)本身,而不是簡單地調(diào)整以填充多余的空間。動態(tài) CSS 區(qū)域模板示例顯 示了如何創(chuàng)建能夠在不同視圖狀態(tài)下重新調(diào)整布局結(jié)構(gòu)本身的頁面模板。下圖顯示了示例如何將布局結(jié)構(gòu)本身調(diào)整為垂直堆疊的頁面,其中每一頁都是貼靠模式下的 一個單獨區(qū)域。此方法涉及隱藏所有內(nèi)容,除了每個頁面模板僅顯示一個區(qū)域,從而在貼靠模式下僅設(shè)置一個元素作為區(qū)域,并重新設(shè)置 pageContainer 元素的方向以垂直顯示頁面。

貼靠模式下的動態(tài)區(qū)域模板頁面

若要了解這是如何實現(xiàn)的,請查看 Page1.html 的標(biāo)記。頁面 1 中有兩個區(qū)域,每個區(qū)域都分配有一個特定的 ID 和類。兩個區(qū)域都屬于 fullregion 類,而只有第一個區(qū)域?qū)儆?snappedregion 類。fullregion 類將它的元素定義為將 –ms-flow-from 屬性設(shè)置為 content,這意味著 iframe 元素內(nèi)的材料將顯示在它們內(nèi)。snappedregion 類開始也是以相同的方式設(shè)置。

激活媒體查詢中輔屏視圖狀態(tài)的規(guī)則后,只有 snappedregion 類仍將 –ms-flow-from 屬性設(shè)置為 content;而 fullregion 類將屬性設(shè)置為 null。這樣的效果是頁面中只有一個 div 元素成為區(qū)域;內(nèi)容從該區(qū)域流到其他頁的區(qū)域中。而且,由于應(yīng)用中的其他頁面也僅在其第一個區(qū)域元素上設(shè)置 snappedregion 類,因此當(dāng)應(yīng)用置于貼靠模式時,每頁只有一個區(qū)域顯示來自源文檔的內(nèi)容。下列代碼顯示頁面 1 的 HTML 和 CSS。

  1. <body> 
  2.         <div id="page1" class="page"> 
  3.             <div id="logoContainer"> 
  4.                 <img id="floatLogo" src="/images/Saturn.jpg" /> 
  5.             </div> 
  6.             <h1 id="title">Dynamic region Templates Sample</h1> 
  7.             <div id="page1region1" class="fullregion snappedregion"></div> 
  8.             <div id="page1region2" class="fullregion"></div> 
  9.         </div> 
  10.     </body> 

 

  1. .fullregion { 
  2.     -ms-flow-from: content; 
  3.  
  4. .snappedregion 
  5.     -ms-flow-from: content; 
  6.  
  7. /*In snapped mode the fullregion class no longer receives content from the content stream, but the snappedregion class does.*/ 
  8. @media (-ms-view-state: snapped) 
  9.     .fullregion  
  10.     { 
  11.         -ms-flow-from: null
  12.     } 
  13.  
  14.     .snappedregion 
  15.     { 
  16.         -ms-flow-from: content; 
  17.     } 
  18.  
  19.     /*Change the navigation direction to vertical for RTL and LTR languages*/ 
  20.     #pageContainer 
  21.     { 
  22.         -ms-box-orient: block-axis; 
  23.     } 

樣式類,結(jié)合在下面的代碼中設(shè)置的樣式規(guī)則,顯示應(yīng)用在貼靠模式中如何轉(zhuǎn)換。尤其是,除了第一個區(qū)域,所有元素都設(shè)置為 display: none,而第一個區(qū)域設(shè)置為占滿整個頁面(第一行除外,此行留給文章標(biāo)題使用)。在所有頁面復(fù)制此流程,并且將 pageContainer 陣列設(shè)置為按塊方向(在下面的代碼示例中為垂直方向)布置頁面時,應(yīng)用將轉(zhuǎn)換為一系列整頁區(qū)域,顯示同一內(nèi)容文檔的不同部分。應(yīng)用結(jié)合前面介紹的 resizePagescreatePages 算法,將在貼靠模式下創(chuàng)建足夠的頁面以完全呈現(xiàn)源文檔。

  1. /* In snapped mode we set the first region to take up the entire page, and hide all other regions. */ 
  2.             @media all and (-ms-view-state: snapped) 
  3.             { 
  4.                 #page1region1 
  5.                 { 
  6.                     -ms-grid-row: 2
  7.                     -ms-grid-column: 1;     
  8.                     -ms-grid-row-span: 4
  9.                     -ms-grid-column-span: 4
  10.                     padding0
  11.                 } 
  12.          
  13.                 #page1region2 
  14.                 { 
  15.                     displaynone;                 
  16.                 } 
  17.          
  18.                 #logoContainer 
  19.                 { 
  20.                     displaynone
  21.                 } 
  22.                  
  23.             } 

Note  前面介紹的調(diào)整頁面布局的基本機(jī)制也適用于其他設(shè)計。例如,設(shè)計人員可能需要根據(jù)頁面在 16:9 還是 4:3 模式從頁面添加或刪除區(qū)域。可以使用 CSS 媒體查詢,根據(jù)需要修改 –ms-flow-fromdisplay 屬性,從而實現(xiàn)此調(diào)整。媒體查詢還可用來更改 CSS 網(wǎng)格的結(jié)構(gòu)。例如,根據(jù)屏幕是縱向還是橫向模式,內(nèi)容布局可從 2 × 4 網(wǎng)格轉(zhuǎn)換為 4 × 2 網(wǎng)格。設(shè)計人員可能還使用 CSS 媒體查詢,根據(jù)屏幕分辨率和方向來顯示或不顯示各個圖像或其他元素。

原文鏈接:http://msdn.microsoft.com/zh-cn/library/windows/apps/hh780610.aspx

責(zé)任編輯:陳四芳 來源: microsoft.com
相關(guān)推薦

2013-09-03 10:40:45

JavaScriptWindows

2013-09-03 11:06:05

Windows

2013-09-02 16:52:31

Windows 8.1

2011-09-15 18:43:00

UbuntuchmPDF

2014-12-03 10:46:15

iReader

2017-04-11 13:31:40

閱讀器開源RSS

2009-05-05 09:00:48

RSS瀏覽器

2024-05-16 13:44:18

2011-09-09 10:19:13

2020-03-13 19:26:38

Linux電子書閱讀器桌面應(yīng)用

2014-12-17 15:23:03

Android網(wǎng)絡(luò)閱讀器源碼

2015-12-03 10:04:36

Ncurses工具LNAV

2023-09-29 11:47:23

2022-06-02 14:01:54

屏幕閱讀器NVDAWindows

2023-03-23 13:47:00

LinuxEPUB閱讀器

2009-08-27 09:19:51

RSS閱讀器Web 1.0

2016-12-20 09:29:11

AlduinLinuxRSS

2021-05-21 05:26:02

谷歌Chrome 瀏覽器

2009-07-29 09:35:07

谷歌離職

2021-07-29 15:57:11

任意代碼漏洞攻擊
點贊
收藏

51CTO技術(shù)棧公眾號

欧美一级播放| 国偷自产视频一区二区久| 亚洲国产精品成人综合| 91午夜在线播放| 日韩欧美视频在线免费观看| 不卡av一区二区| 日韩一区二区视频| 女人和拘做爰正片视频| 精品国产丝袜高跟鞋| 不卡的av电影| 国产美女久久久| 亚洲精品77777| 水蜜桃久久夜色精品一区| 精品99一区二区| 宅男噜噜噜66国产免费观看| 三级网站视频在在线播放| 国产日韩欧美精品电影三级在线 | av中文在线播放| 天天做天天爱天天综合网| 亚洲精品一二区| 日本在线视频播放| 99久久er| 色综合天天做天天爱| 欧美一级爱爱视频| 天天在线视频色| 国产日韩欧美精品综合| 精品国产一区二区三区久久久久久 | 性感美女视频一二三| 激情欧美日韩一区二区| 国产91热爆ts人妖在线| 国产无遮挡又黄又爽| 91精品一区国产高清在线gif| 亚洲毛片在线免费观看| 少妇搡bbbb搡bbb搡打电话| 亚洲国产伊人| 欧美三级视频在线| 插插插亚洲综合网| 香蕉视频久久久| 欧美一区二区三区红桃小说| 日韩欧美一级片| 色婷婷.com| 成人影院在线免费观看| 在线一区二区视频| 欧美一级黄色片视频| 夜鲁夜鲁夜鲁视频在线播放| 婷婷综合五月天| 丰满少妇大力进入| 男男gaygays亚洲| 亚洲一区在线视频| 在线观看17c| 污污视频在线看| 一区二区三区中文字幕电影| 四虎永久免费网站| 黄色免费在线看| 亚洲精品乱码久久久久久久久| 成年人免费观看的视频| 日本免费在线观看| 中国色在线观看另类| 亚洲高清视频一区| 成年人在线视频| 国产精品国产三级国产三级人妇| 欧美午夜视频在线| 国产在线小视频| 亚洲国产精品二十页| 一本一道久久久a久久久精品91| av电影在线观看| 《视频一区视频二区| 久久久久亚洲av无码专区喷水| caoporn免费在线视频| 亚洲色图丝袜美腿| 国产一区二区片| www.综合| 日本韩国视频一区二区| 日韩精品视频一二三| 精品欧美视频| 亚洲国产欧美自拍| 亚洲av综合一区二区| 日韩片欧美片| 欧美丰满少妇xxxxx| 欧美日韩中文视频| 免费日韩一区二区| 国产欧美日韩专区发布| 精品国产99久久久久久宅男i| 国产河南妇女毛片精品久久久| 97国产精品视频| 日韩无码精品一区二区三区| 日韩av一二三| 91手机在线视频| 青青草免费在线视频| 国产精品成人在线观看| 大胆欧美熟妇xx| videos性欧美另类高清| 538prom精品视频线放| 日本一级片在线播放| 日韩精品一卡| 97婷婷涩涩精品一区| 一本色道久久综合亚洲| 北岛玲一区二区三区四区| 天天人人精品| av蜜臀在线| 欧美一a一片一级一片| 青青草精品在线| 久久99性xxx老妇胖精品| 欧美成人一区二区三区电影| 久久久久99精品成人片我成大片| 韩国av一区二区三区四区| 欧美高清视频一区| 日本片在线看| 欧美日韩成人综合在线一区二区| 久久人人妻人人人人妻性色av| 国产精品91一区二区三区| 2018中文字幕一区二区三区| 国产精品亚洲欧美在线播放| 久久久久久亚洲综合影院红桃| 好吊色这里只有精品| 性欧美18一19sex性欧美| 日韩精品中文字幕在线一区| 香蕉成人在线视频| 久久美女性网| 国语精品中文字幕| 色婷婷在线播放| 欧美精品一级二级| 一级黄色片网址| 午夜在线精品偷拍| 国产精品二区在线| 国产激情视频在线观看| 欧美午夜视频网站| 免费黄色在线视频| 亚洲免费精品| 岛国视频一区免费观看| av在线影院| 欧美日韩国产色站一区二区三区| 瑟瑟视频在线观看| 香蕉成人久久| 久久99国产精品| 爱啪视频在线观看视频免费| 精品国产一区二区国模嫣然| 91在线播放观看| 国产在线精品一区二区不卡了 | 桃花色综合影院| 亚洲欧洲成人精品av97| 国产成人黄色网址| 欧美日韩在线二区| 日韩女优人人人人射在线视频| 欧美女同网站| 色婷婷av一区二区| 国产中年熟女高潮大集合| 国产欧美亚洲一区| 久久久水蜜桃| 日韩欧美看国产| 亚洲香蕉在线观看| 国产三级理论片| 国产精品成人一区二区艾草 | 青青草视频在线视频| 久久综合给合| 久久久久一本一区二区青青蜜月| 高h放荡受浪受bl| 午夜视频在线观看一区二区 | 51ⅴ精品国产91久久久久久| 熟妇高潮一区二区三区| 精品福利视频导航| 精品无人区无码乱码毛片国产| 视频一区国产视频| 伊人久久av导航| 91亚洲无吗| 97av在线影院| 川上优的av在线一区二区| 欧美午夜一区二区三区免费大片| 三级全黄做爰视频| 成人小视频在线| 色欲av无码一区二区人妻| 欧美日韩黑人| 99re视频在线观看| 美女网站在线看| 国产一区二区三区在线| 国产免费的av| 五月天一区二区| 卡一卡二卡三在线观看| 国产在线播放一区二区三区| 欧美一级免费播放| 狠狠做六月爱婷婷综合aⅴ| 国产精品丝袜视频| 免费影视亚洲| 亚洲无线码在线一区观看| 亚洲永久精品视频| 亚洲va天堂va国产va久| 天天操天天舔天天射| 国产在线看一区| 成年人视频在线免费| 伊人久久大香线| 欧美日韩国产三区| 欧美黄色一级| 国产国产精品人在线视| 污视频网站免费在线观看| 亚洲午夜性刺激影院| 亚洲av无码国产综合专区| 日本道精品一区二区三区| 国产探花在线免费观看| 久久久91精品国产一区二区三区| 欧美性猛交xxxx乱大交91| 亚洲一区区二区| 一本色道久久88亚洲精品综合| 国产探花在线精品一区二区| 操一操视频一区| 日韩护士脚交太爽了| 欧美在线观看网址综合| 18视频在线观看网站| 一区二区三区 在线观看视| 国产小视频一区| 7777精品伊人久久久大香线蕉的 | 久久精品国产一区| 色综合成人av| 亚洲精品一区二区三区福利| 在线观看日韩一区二区| 欧美日韩一区二区免费在线观看| 少妇影院在线观看| 亚洲欧洲色图综合| 日本少妇高潮喷水xxxxxxx| 不卡免费追剧大全电视剧网站| 亚洲美女爱爱视频| 日韩专区欧美专区| 欧美 日韩 国产 高清| 欧美私人啪啪vps| 五月天av影院| 久久精品影视| 亚洲亚洲精品三区日韩精品在线视频| 亚洲精品456| 国产在线资源一区| 亚洲午夜免费| 99精彩视频在线观看免费| 欧洲美女精品免费观看视频| 国产精品久久久久久久久久免费| 成人性生活av| 欧洲永久精品大片ww免费漫画| 成年女人在线看片| 久久久在线观看| av中文在线资源| 欧美福利视频在线| 国产丝袜视频在线播放| 欧美激情第1页| 国精产品一区一区三区mba下载| 成年人精品视频| 午夜羞羞小视频在线观看| 欧美成人小视频| 福利在线导航136| 97国产成人精品视频| 美女的胸无遮挡在线观看| 欧美又大又粗又长| 亚洲精品中文字幕| 欧洲亚洲妇女av| 亚洲日本网址| 国产精品亚洲网站| 亚洲国产91视频| 97se视频在线观看| 国产香蕉精品| 免费国产一区二区| 欧美亚洲国产激情| 亚洲日本欧美在线| 亚洲成av人电影| 97超碰在线视| 一本色道久久精品| 欧美精品成人网| 精品一区二区三区在线播放 | 亚洲影视一区二区| 日韩一级完整毛片| 三级网站在线看| 亚洲欧美精品在线| 在线观看免费网站黄| 久久综合亚洲社区| 国产社区精品视频| 国产精品久久久久久久久久久久久| 激情亚洲小说| www.久久草| 国产一区二区三区四区五区传媒 | 在线看福利影| 992tv在线成人免费观看| 丝袜美腿一区| 91麻豆国产语对白在线观看| 成人h动漫免费观看网站| 欧美综合激情| 夜间精品视频| 国产在线青青草| 精久久久久久久久久久| 大尺度做爰床戏呻吟舒畅| 久久精品亚洲国产奇米99| 国产喷水在线观看| 精品久久久香蕉免费精品视频| 中文字幕av第一页| 精品美女被调教视频大全网站| 青草久久伊人| 欧美男插女视频| 日韩在线短视频| 成人av电影免费| 日韩精品一区二区三区免费观看| 欧美一区二区视频在线播放| 日本欧美一区二区在线观看| 人妻 日韩 欧美 综合 制服| 日本一区二区三区在线观看| 久久久久成人网站| 久久香蕉国产线看观看99| 国产农村妇女精品一区| 亚洲一区二区在线免费观看视频| 日韩熟女一区二区| 日韩精品一区二区三区三区免费| 国产一级片在线播放| 国自产精品手机在线观看视频| 精品亚洲a∨| 久久偷看各类wc女厕嘘嘘偷窃 | 黄www在线观看| 国产大陆a不卡| 国产午夜精品福利视频| 无吗不卡中文字幕| 精品人妻久久久久一区二区三区| 伊人青青综合网站| 欧美aaaaa性bbbbb小妇| 91精品天堂| 91久久久精品国产| 成年人在线观看视频免费| 99九九99九九九视频精品| 青青草原在线免费观看| 欧美亚一区二区| 日韩a在线观看| 69av成年福利视频| 亚洲视频精选| 青青草免费在线视频观看| 麻豆国产精品777777在线| a级大片在线观看| 精品国产乱码久久久久久婷婷| 国产夫妻在线观看| 久久九九精品99国产精品| 91精品店在线| 亚洲成人自拍| 日韩av中文字幕一区二区| 日本少妇色视频| 精品久久久久久久中文字幕| 丰满大乳国产精品| 久久久久久久久久国产| 96sao在线精品免费视频| 欧美一区二区视频在线播放| 国产不卡免费视频| 欧美精品一区二区成人| 日韩一区二区三区三四区视频在线观看 | 欧美电影免费看| 久久综合婷婷综合| 欧美一级播放| 精品国产aaa| 欧美高清激情brazzers| 快射av在线播放一区| 91免费国产视频| 欧美视频成人| yy1111111| 一本色道久久加勒比精品| 国产在线视频资源| 国产精品看片资源| 欧美freesextv| 亚洲av无码久久精品色欲| 亚洲一卡二卡三卡四卡五卡| 天天av天天翘| 国产国产精品人在线视| 日韩片欧美片| 极品白嫩少妇无套内谢| 午夜精品久久久| 国产玉足榨精视频在线观看| 国产精品久久久久久久久男| 香蕉久久网站| 黑森林av导航| 一本大道av一区二区在线播放| 国产精品一区在线看| 成人黄色免费看| 亚洲香蕉网站| 中文字幕一区二区三区人妻| 欧美日韩一二三| 日本大胆在线观看| 久久精品ww人人做人人爽| 日本sm残虐另类| 1024手机在线视频| 亚洲乱码国产乱码精品精天堂| 欧美综合社区国产| 欧美精品久久久久久久自慰| 久久久久久久久岛国免费| 一级片一区二区三区| 欧美高清视频一区二区| 自拍自偷一区二区三区| 一级黄色片国产| 亚洲a一区二区| 欧美18hd| 久久99精品久久久水蜜桃| 久久电影网电视剧免费观看| 国产精久久久久久| 国产一区二区美女视频| 日韩精品一区国产| 欧美精品成人网| 亚洲国产视频一区二区| 高清日韩av电影| 国产高清一区视频| 久久狠狠亚洲综合| 日韩一区二区视频在线| 久久久av免费| 欧美日韩第一| 中国极品少妇videossexhd|