首頁(yè)

優(yōu)秀UI界面設(shè)計(jì)評(píng)析

藍(lán)藍(lán)設(shè)計(jì)的小編

男生運(yùn)動(dòng)鞋商店支付界面,顏色搭配非常舒服,鞋子攝影也很漂亮,字體字號(hào)運(yùn)用非常到位。

超全面總結(jié)!產(chǎn)品設(shè)計(jì)中的可拓展性原則

資深UI設(shè)計(jì)者

可拓展性原則是我自己瞎起的一個(gè)名字,高興的話你說(shuō)彈性原則也行。主要意思是指界面設(shè)計(jì)要足夠的靈活,具有彈性,以滿足將來(lái)可能出現(xiàn)的場(chǎng)景。我第一次考慮這個(gè)問(wèn)題是從去年7月份開始,當(dāng)時(shí)接到領(lǐng)導(dǎo)的一個(gè)臨時(shí)需求,要給直投項(xiàng)目增加一個(gè)到期查詢的功能。因?yàn)樵瓉?lái)的界面設(shè)計(jì)比較死板,所以突然加一個(gè)新功能導(dǎo)致整個(gè)布局都被打亂了,結(jié)果做的很不理想。當(dāng)時(shí)我就希望可以找到一個(gè)方法來(lái)應(yīng)對(duì)領(lǐng)導(dǎo)這種突如其來(lái)的需求。

產(chǎn)品設(shè)計(jì)的可拓展性就是為了應(yīng)對(duì)將來(lái)未知的改變。改變來(lái)自于功能的改變,因?yàn)楫a(chǎn)品是由一個(gè)個(gè)功能組成的。功能的改變可以分為兩類:數(shù)量的改變和狀態(tài)的改變。當(dāng)然這里不涉及到具體的功能設(shè)計(jì),只是探討功能入口的展示。

一、數(shù)量

數(shù)量的改變指的是功能的增加,刪減與合并。多數(shù)是指新功能的增加,這就要求我們?cè)诮缑妫ú季郑┰O(shè)計(jì)中要給將來(lái)可能添加的新功能預(yù)留坑位。在哪里預(yù)留坑位?又給哪些功能預(yù)留呢?這里我就例舉最常見的兩種界面布局(導(dǎo)航)樣式來(lái)說(shuō):宮格式布局和列表式布局。

不知道大家有沒(méi)有注意到一個(gè)現(xiàn)象:一級(jí)頁(yè)面中主要用宮格式布局,而二級(jí),三級(jí)頁(yè)面多數(shù)用列表式布局。這主要是因?yàn)橐患?jí)頁(yè)面是產(chǎn)品的門戶和臉面,而且又多屬于功能的聚合頁(yè),特別是首頁(yè),這就要求一級(jí)頁(yè)面在展示足夠多入口的同時(shí)還要兼顧視覺(jué)吸引力。而以icon,插畫,圖像為主要表現(xiàn)形式的宮格式布局在視覺(jué)設(shè)計(jì)上更容易出彩。特別是icon,在相同的空間里,可以展示更多的入口。

但是其缺點(diǎn)就是可拓展性差,不管是2*5還是3*4,你如果想單獨(dú)新增一個(gè)功能,界面就會(huì)失衡。當(dāng)然我們可以給用戶提供分頁(yè),這就意味著有些功能需要用戶滑動(dòng)才能看到,具有一定的風(fēng)險(xiǎn)。

還有一種方法就是提供全部按鈕,用戶點(diǎn)擊可以查看全部功能。

列表式布局就沒(méi)有這方面的顧慮,它可以在不打破界面布局的情況下增加新功能入口,但是它的缺點(diǎn)在于可展示的入口太少了。宮格式布局一屏可以展示20多個(gè)入口,而列表式布局只能達(dá)到其一半的水平。

這也是經(jīng)常困擾設(shè)計(jì)師的一個(gè)問(wèn)題,因?yàn)閿?shù)據(jù)反饋一個(gè)頁(yè)面超過(guò)一屏往下內(nèi)容的點(diǎn)擊量是急劇下滑的,所以一般的一級(jí)頁(yè)面都不會(huì)設(shè)計(jì)的很長(zhǎng)。如何在有限的空間里展示足夠多的入口呢?

沒(méi)有什么是可以難倒我們?cè)O(shè)計(jì)師的,最近我看到一些產(chǎn)品在底部欄tab里動(dòng)起了心思。以蘇寧易購(gòu)為例,當(dāng)你點(diǎn)擊進(jìn)入「發(fā)現(xiàn)」,tab會(huì)變成「直播大廳」;點(diǎn)擊進(jìn)入「首頁(yè)」,tab會(huì)變成「猜你喜歡」。所以雖然只有5個(gè)坑位但是塞進(jìn)了7個(gè)tab,這是一個(gè)很好的思路。

還有在京東首頁(yè)中,用戶下拉會(huì)進(jìn)入520專屬活動(dòng)頁(yè)面。同樣的還有微信,用戶下拉直接顯示你最近打開的小程序。但是目前來(lái)說(shuō),大多數(shù)用戶還認(rèn)為下拉只能刷新界面,對(duì)于「下拉發(fā)現(xiàn)新功能」足夠的缺乏認(rèn)知。這樣的入口可以吸引多少的流量還有待檢驗(yàn)。

對(duì)于一級(jí)頁(yè)面我還有一個(gè)建議:千萬(wàn)不要隨意把功能入口放在頂部欄上。因?yàn)閷?duì)于一些小功能的迭代,入口放在哪里都一樣,用戶看得到很好,看不到也無(wú)所謂。但是如果要上線一些層級(jí)比較高的功能,又不想打亂界面的原有布局,最好放到頂部欄上。特別是你的界面中如果還沒(méi)有搜索、城市定位、分享、篩選、通知等全局功能,一定要把頂部欄的位置空出來(lái)。文章開頭我說(shuō)的「到期查詢」其實(shí)就屬于篩選功能。

二、狀態(tài)

上面也說(shuō)了,本文所提到的可拓展性指的是入口的可拓展性。那么入口在狀態(tài)上的變化可以分為外部狀態(tài)變化和內(nèi)部狀態(tài)變化。

外部狀態(tài)變化主要說(shuō)的產(chǎn)品層面的變化,針對(duì)的是C端產(chǎn)品。對(duì)C端產(chǎn)品來(lái)說(shuō),定期組織營(yíng)銷活動(dòng)來(lái)拉新肯定是必不可少的。這種情況下我們需要對(duì)界面的元素進(jìn)行處理使其來(lái)適應(yīng)不同的活動(dòng)氛圍。從這個(gè)方面來(lái)說(shuō),我們可以發(fā)現(xiàn)為什么宮格式布局更容易受到各大電商平臺(tái)的青睞。因?yàn)樗梢愿鶕?jù)不同的活動(dòng)配置一套完全不同的icon,靈活多變。這種狀態(tài)上的百變來(lái)打造營(yíng)銷氛圍的能力是列表式布局所不具備的。

列表式布局可以向用戶傳遞更多的信息,更能表現(xiàn)內(nèi)部狀態(tài)的變化。以下圖為例,用戶可以知道自己還有一張優(yōu)惠券沒(méi)有使用,知道自己本月還有126元沒(méi)還。而宮格式布局礙于空間,很難向用戶展示過(guò)多的信息。

以上方的日歷為例,近期做了一個(gè)拆紅包活動(dòng),用以icon為主的宮格布局只能加一個(gè)「拆紅包」的角標(biāo)。如果采用了列表式布局,可以直接展示金額,更能起到刺激用戶的作用。

寫分析總結(jié)寫到現(xiàn)在讀者越來(lái)越多,所以愈發(fā)擔(dān)心自己寫的不好會(huì)誤導(dǎo)別人。對(duì)于設(shè)計(jì)來(lái)說(shuō),無(wú)所謂對(duì)錯(cuò),只有合適和不合適。就像上面提到的兩種布局方式,在列表式布局中你可以隨意添加新功能,但是礙于空間,可添加的功能數(shù)目也不會(huì)太多;宮格式布局倒是不怕入口放不下,但是會(huì)引起界面的失衡。設(shè)計(jì)師的能力就體現(xiàn)在收集用戶數(shù)據(jù),分析具體場(chǎng)景,去思考得出最合理布局樣式。不要拘泥于解決方案,因?yàn)榻鉀Q方案有很多,我們要學(xué)習(xí)的是解決方案中所體現(xiàn)的思維方式和過(guò)程。

總結(jié)

以上就是我針對(duì)產(chǎn)品設(shè)計(jì)中可拓展性原則的一個(gè)簡(jiǎn)單分析總結(jié),歡迎大家留言討論。

微信小程序如何解析HTML富文本(使用wxParse解析富文本的demo)

seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動(dòng)發(fā)到您的郵箱中, 請(qǐng)點(diǎn)這里

1.把wxParse文件全部放入項(xiàng)目。

2.在wxml中import wxParse.wxml,并把template插入到到對(duì)應(yīng)的位置上

[html] view plain copy
  1. <!--wxml-->  
  2. <import src="../../../wxParse/wxParse.wxml"/>  
  3. <view class="view-title">{{title}}</view>  
  4. <view class="view-time-box">  
  5.   <text class="view-date">{{date}}</text>  
  6.   <text class="view-time">{{time}}</text>  
  7. </view>  
  8. <template is="wxParse" data="{{wxParseData:article.nodes}}"/>  

3.在wxss中import wxParse.wxss,并設(shè)置樣式;比如‘wxParse-image’是富文本圖片轉(zhuǎn)化成image組件之后的類名,‘wxParse-p’是p標(biāo)簽轉(zhuǎn)化成view組件后設(shè)置的類名

[css] view plain copy
  1. <!--wxss-->  
  2. @import "../../../wxParse/wxParse.wxss";  
  3. page{  
  4.   background#fff;  
  5. }  
  6. .view-title{  
  7.   line-height80rpx;  
  8.   font-size48rpx;  
  9.   color:#0C0C0C;  
  10.   overflowhidden;  
  11.   text-overflow: ellipsis;  
  12.   display: -webkit-box;  
  13.   -webkit-line-clamp: 2;  
  14.   -webkit-box-orient: vertical;  
  15.   max-height190rpx;  
  16.   min-height80rpx;  
  17.   width:690rpx;  
  18.   padding:30rpx 30rpx 0;  
  19. }  
  20. .view-time-box{  
  21.   height66rpx;  
  22.   line-height66rpx;  
  23.   font-size30rpx;  
  24.   color:#999999;  
  25.   margin-bottom40rpx;  
  26.   padding:0 30rpx;  
  27. }  
  28. .view-date{  
  29.   margin-right20rpx;  
  30. }  
  31. .wxParse-img{  
  32.   margin-top:20rpx;  
  33.   displayblock;  
  34.   position:relative;  
  35.   top:0;  
  36.   left:50%;  
  37.   transform: translateX(-50%);  
  38. }  
  39. .wxParse-p{  
  40.   text-indent2em;  
  41.   margin-top:20rpx;  
  42.   color:#0C0C0C;  
  43.   line-height:50rpx;  
  44.   font-size:34rpx;  
  45.   padding:0 30rpx 30rpx;  
  46.   text-alignjustify;  
  47. }  

4.js

[javascript] view plain copy
  1. var WxParse = require('../../../wxParse/wxParse.js');  
  2. Page({  
  3.   
  4.   /** 
  5.    * 頁(yè)面的初始數(shù)據(jù) 
  6.    */  
  7.   data: {  
  8.     title: '',  
  9.     date: "",  
  10.     time: "",  
  11.     id: ''  
  12.   },  
  13.   
  14.   /** 
  15.    * 生命周期函數(shù)--監(jiān)聽頁(yè)面加載 
  16.    */  
  17.   onLoad: function (options) {  
  18.     this.setData({  
  19.       id:options.id  
  20.     })  
  21.   },  
  22.   onShow: function () {  
  23.     wx.showLoading({  
  24.       title: '加載中...',  
  25.     })  
  26.     var that = this;  
  27.   
  28.     // 模擬獲取數(shù)據(jù)  
  29.     setTimeout(function () {  
  30.       that.setData({  
  31.         title:'僑寶柑普茶新會(huì)陳皮僑寶柑',  
  32.         date:"2018-03-01",  
  33.         time:"13:20:53"  
  34.       })  
  35.       var article = `  
  36.         <img src="../../../imgs/index/s.png"></img>  
  37.     <p>微信小程序如何解析HTML富文本(使用wxParse解析富文本的demo)微信小程序如何解析HTML富文本(使用wxParse解析富文本的demo)微信小程序如何解析HTML富文本(使用wxParse解析富文本的demo)</p>  
  38.     <p>微信小程序如何解析HTML富文本(使用wxParse解析富文本的demo)微信小程序如何解析HTML富文本(使用wxParse解析富文本的demo)微信小程序如何解析HTML富文本(使用wxParse解析富文本的demo)</p>  
  39.         <img src="../../../imgs/index/s.png"></img>  
  40.     <p>近兩年,小青柑的火爆有目共睹,嬌小玲瓏的產(chǎn)品形態(tài)、便攜式的消費(fèi)場(chǎng)景、柑與茶結(jié)合的時(shí)尚方式以及獨(dú)特的口感和養(yǎng)生功效,都在順應(yīng)著目前年輕化、多元化、便攜化的茶葉消費(fèi)市場(chǎng)需求,讓它成為了一大爆品。</p>  
  41.       `;  
  42.       /** 
  43.       * WxParse.wxParse(bindName , type, data, target,imagePadding) 
  44.       * 1.bindName綁定的數(shù)據(jù)名(必填) 
  45.       * 2.type可以為html或者md(必填) 
  46.       * 3.data為傳入的具體數(shù)據(jù)(必填) 
  47.       * 4.target為Page對(duì)象,一般為this(必填) 
  48.       * 5.imagePadding為當(dāng)圖片自適應(yīng)是左右的單一padding(默認(rèn)為0,可選) 
  49.       */  
  50.       WxParse.wxParse('article''html', article, that, 20);  
  51.         
  52.       // 更改數(shù)據(jù)、獲取新數(shù)據(jù)完成  
  53.       wx.hideLoading();  
  54.     }, 500)  
  55.   }  
  56. })  
具體的API可以去GitHub上查看:https://github.com/icindy/wxParse








藍(lán)藍(lán)設(shè)計(jì)www.yvirxh.cn )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國(guó)內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 、平面設(shè)計(jì)服務(wù)


js中常見的位置屬性-offset,scroll,client系列

周周

前言
       Javascript中的offset、scroll、client系列都是比較常用的坐標(biāo)屬性,也是比較容易混淆的知識(shí)點(diǎn)。
offset家族
       offset家族一般在節(jié)點(diǎn)對(duì)象里面使用。
       offsetParent
             1.    如果當(dāng)前元素的父級(jí)元素沒(méi)有進(jìn)行css定位(position為absolute或relative),offsetParent為body。
             2.    如果當(dāng)前元素的父級(jí)元素中有css定位(position為absolute或relative),offsetParent取最近的那個(gè)父級(jí)元素。
       offsetLeft/Top計(jì)算規(guī)則:
             標(biāo)準(zhǔn)流、浮動(dòng)、非脫標(biāo)定位
              offsetLeft = 自己的margin+offsetParent的margin、padding、border
              脫標(biāo)定位
              offsetLeft = 自己的left + margin-left
        注意:與stlye.left的區(qū)別
              offsetLeft只可讀,不可寫。也就是說(shuō),通過(guò)offsetLeft只能獲取元素的左偏移值,而無(wú)法去設(shè)置元素的左偏移值。
               stlye.left可讀可寫,但是通過(guò)style.left獲取元素的偏移值,是一個(gè)帶單位的字符串,例如“100px”。

            (offsetTop同理)

        offsetWidth(和offsetHeight:

        其實(shí)就是一個(gè)元素的實(shí)際寬度 = width+padding+border

client家族】

        clientWidth (clientHeight) = width+padding

              該屬性指的是元素的可視部分寬度和高度

              假如元素有padding有滾動(dòng),且滾動(dòng)是顯示的

              clientWidth = width + padding - 滾動(dòng)軸寬度

       clientTop(clientLeft):

             這一對(duì)屬性是用來(lái)讀取元素的border的寬度和高度的

             clientTop = border-top 的 border-width

             clientLeft = border-left 的 border-width

【scroll家族】

150537.jpg.png

  如上圖所示
       scrollWidth(和scrollHeight
          無(wú)滾動(dòng)軸時(shí):scrollWidth = clientWhidth = width + padding
          有滾動(dòng)軸時(shí):scrollWidth = 實(shí)際內(nèi)容的寬度 + padding
       scrollTop(和scrollLeft
           這對(duì)元素是可讀寫的,指的是當(dāng)元素其中的內(nèi)容超出其寬高的時(shí)候,元素被卷起的寬度和高度
【事件里面的clientX,offsetX,screenX


  • event.clientX:設(shè)置或獲取鼠標(biāo)指針位置相對(duì)于當(dāng)前窗口的 x 坐標(biāo),其中客戶區(qū)域不包括窗口自身的控件和滾動(dòng)條
  • event.clientY:設(shè)置或獲取鼠標(biāo)指針位置相對(duì)于當(dāng)前窗口的 y 坐標(biāo),其中客戶區(qū)域不包括窗口自身的控件和滾動(dòng)條
  • vent.offsetX:設(shè)置或獲取鼠標(biāo)指針位置相對(duì)于觸發(fā)事件的對(duì)象的 x 坐標(biāo)
  • event.offsetY:設(shè)置或獲取鼠標(biāo)指針位置相對(duì)于觸發(fā)事件的對(duì)象的 y 坐標(biāo)
  • event.screenX 設(shè)置或獲取獲取鼠標(biāo)指針位置相對(duì)于用戶屏幕的 x 坐標(biāo)。
  • event.screenY設(shè)置或獲取鼠標(biāo)指針位置相對(duì)于用戶屏幕的 y 坐標(biāo)。


【window系列】
  • window.innerHeight指的是瀏覽器窗口顯示html文檔的可視區(qū)域的高度
  • window.outerHeight指的是瀏覽器窗口的高度 ,包括了工具欄,地址欄等等高度

       window.screen包含了屏幕的信息
  • window.screen.width   電腦屏幕的整個(gè)寬度
  • window.screen.availWidth   電腦屏幕除去菜單條之后的寬度
  • window.screen.left   瀏覽器窗口的左上角距離電腦屏幕最左側(cè)的距離。




微信小程序如何解析HTML富文本(使用wxParse解析富文本的demo)

seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動(dòng)發(fā)到您的郵箱中, 請(qǐng)點(diǎn)這里

1.把wxParse文件全部放入項(xiàng)目。

2.在wxml中import wxParse.wxml,并把template插入到到對(duì)應(yīng)的位置上

[html] view plain copy
  1. <!--wxml-->  
  2. <import src="../../../wxParse/wxParse.wxml"/>  
  3. <view class="view-title">{{title}}</view>  
  4. <view class="view-time-box">  
  5.   <text class="view-date">{{date}}</text>  
  6.   <text class="view-time">{{time}}</text>  
  7. </view>  
  8. <template is="wxParse" data="{{wxParseData:article.nodes}}"/>  

3.在wxss中import wxParse.wxss,并設(shè)置樣式;比如‘wxParse-image’是富文本圖片轉(zhuǎn)化成image組件之后的類名,‘wxParse-p’是p標(biāo)簽轉(zhuǎn)化成view組件后設(shè)置的類名

[css] view plain copy
  1. <!--wxss-->  
  2. @import "../../../wxParse/wxParse.wxss";  
  3. page{  
  4.   background#fff;  
  5. }  
  6. .view-title{  
  7.   line-height80rpx;  
  8.   font-size48rpx;  
  9.   color:#0C0C0C;  
  10.   overflowhidden;  
  11.   text-overflow: ellipsis;  
  12.   display: -webkit-box;  
  13.   -webkit-line-clamp: 2;  
  14.   -webkit-box-orient: vertical;  
  15.   max-height190rpx;  
  16.   min-height80rpx;  
  17.   width:690rpx;  
  18.   padding:30rpx 30rpx 0;  
  19. }  
  20. .view-time-box{  
  21.   height66rpx;  
  22.   line-height66rpx;  
  23.   font-size30rpx;  
  24.   color:#999999;  
  25.   margin-bottom40rpx;  
  26.   padding:0 30rpx;  
  27. }  
  28. .view-date{  
  29.   margin-right20rpx;  
  30. }  
  31. .wxParse-img{  
  32.   margin-top:20rpx;  
  33.   displayblock;  
  34.   position:relative;  
  35.   top:0;  
  36.   left:50%;  
  37.   transform: translateX(-50%);  
  38. }  
  39. .wxParse-p{  
  40.   text-indent2em;  
  41.   margin-top:20rpx;  
  42.   color:#0C0C0C;  
  43.   line-height:50rpx;  
  44.   font-size:34rpx;  
  45.   padding:0 30rpx 30rpx;  
  46.   text-alignjustify;  
  47. }  

4.js

[javascript] view plain copy
  1. var WxParse = require('../../../wxParse/wxParse.js');  
  2. Page({  
  3.   
  4.   /** 
  5.    * 頁(yè)面的初始數(shù)據(jù) 
  6.    */  
  7.   data: {  
  8.     title: '',  
  9.     date: "",  
  10.     time: "",  
  11.     id: ''  
  12.   },  
  13.   
  14.   /** 
  15.    * 生命周期函數(shù)--監(jiān)聽頁(yè)面加載 
  16.    */  
  17.   onLoad: function (options) {  
  18.     this.setData({  
  19.       id:options.id  
  20.     })  
  21.   },  
  22.   onShow: function () {  
  23.     wx.showLoading({  
  24.       title: '加載中...',  
  25.     })  
  26.     var that = this;  
  27.   
  28.     // 模擬獲取數(shù)據(jù)  
  29.     setTimeout(function () {  
  30.       that.setData({  
  31.         title:'僑寶柑普茶新會(huì)陳皮僑寶柑',  
  32.         date:"2018-03-01",  
  33.         time:"13:20:53"  
  34.       })  
  35.       var article = `  
  36.         <img src="../../../imgs/index/s.png"></img>  
  37.     <p>微信小程序如何解析HTML富文本(使用wxParse解析富文本的demo)微信小程序如何解析HTML富文本(使用wxParse解析富文本的demo)微信小程序如何解析HTML富文本(使用wxParse解析富文本的demo)</p>  
  38.     <p>微信小程序如何解析HTML富文本(使用wxParse解析富文本的demo)微信小程序如何解析HTML富文本(使用wxParse解析富文本的demo)微信小程序如何解析HTML富文本(使用wxParse解析富文本的demo)</p>  
  39.         <img src="../../../imgs/index/s.png"></img>  
  40.     <p>近兩年,小青柑的火爆有目共睹,嬌小玲瓏的產(chǎn)品形態(tài)、便攜式的消費(fèi)場(chǎng)景、柑與茶結(jié)合的時(shí)尚方式以及獨(dú)特的口感和養(yǎng)生功效,都在順應(yīng)著目前年輕化、多元化、便攜化的茶葉消費(fèi)市場(chǎng)需求,讓它成為了一大爆品。</p>  
  41.       `;  
  42.       /** 
  43.       * WxParse.wxParse(bindName , type, data, target,imagePadding) 
  44.       * 1.bindName綁定的數(shù)據(jù)名(必填) 
  45.       * 2.type可以為html或者md(必填) 
  46.       * 3.data為傳入的具體數(shù)據(jù)(必填) 
  47.       * 4.target為Page對(duì)象,一般為this(必填) 
  48.       * 5.imagePadding為當(dāng)圖片自適應(yīng)是左右的單一padding(默認(rèn)為0,可選) 
  49.       */  
  50.       WxParse.wxParse('article''html', article, that, 20);  
  51.         
  52.       // 更改數(shù)據(jù)、獲取新數(shù)據(jù)完成  
  53.       wx.hideLoading();  
  54.     }, 500)  
  55.   }  
  56. })  
具體的API可以去GitHub上查看:https://github.com/icindy/wxParse








藍(lán)藍(lán)設(shè)計(jì)www.yvirxh.cn )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國(guó)內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 平面設(shè)計(jì)服務(wù)


HTML5網(wǎng)頁(yè)掃描二維碼

seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動(dòng)發(fā)到您的郵箱中, 請(qǐng)點(diǎn)這里

[HTML]代碼

<!DOCTYPE html>
<html>
<head>
    <title>二維碼掃描測(cè)試</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<style type="text/css">
    html, body {
        height: 100%;
        width: 100%;
        text-align: center;
    }
</style>
<script src="../js/jquery-1.11.1.min.js"></script>
<script>
    //這段代 主要是獲取攝像頭的視頻流并顯示在Video 簽中
    var canvas = null, context = null, video = null;
    window.addEventListener("DOMContentLoaded", function () {
        try {
            canvas = document.getElementById("canvas");
            context = canvas.getContext("2d");
            video = document.getElementById("video");
            var videoObj = { "video": true, audio: false },
                flag = true,
                MediaErr = function (error) {
                    flag = false;
                    if (error.PERMISSION_DENIED) {
                        alert('用戶拒絕了瀏覽器請(qǐng)求媒體的權(quán)限', '提示');
                    } else if (error.NOT_SUPPORTED_ERROR) {
                        alert('對(duì)不起,您的瀏覽器不支持拍照功能,請(qǐng)使用其他瀏覽器', '提示');
                    } else if (error.MANDATORY_UNSATISFIED_ERROR) {
                        alert('指定的媒體類型未接收到媒體流', '提示');
                    } else {
                        alert('系統(tǒng)未能獲取到攝像頭,請(qǐng)確保攝像頭已正確安裝?;驀L試刷新頁(yè)面,重試', '提示');
                    }
                };
            //獲取媒體的兼容代碼,目前只支持(Firefox,Chrome,Opera)
            if (navigator.getUserMedia) {
                //qq瀏覽器不支持
                if (navigator.userAgent.indexOf('MQQBrowser') > -1) {
                    alert('對(duì)不起,您的瀏覽器不支持拍照功能,請(qǐng)使用其他瀏覽器', '提示');
                    return false;
                }
                navigator.getUserMedia(videoObj, function (stream) {
                    video.src = stream;
                    video.play();
                }, MediaErr);
            }
            else if (navigator.webkitGetUserMedia) {
                navigator.webkitGetUserMedia(videoObj, function (stream) {
                    video.src = window.webkitURL.createObjectURL(stream);
                    video.play();
                }, MediaErr);
            }
            else if (navigator.mozGetUserMedia) {
                navigator.mozGetUserMedia(videoObj, function (stream) {
                    video.src = window.URL.createObjectURL(stream);
                    video.play();
                }, MediaErr);
            }
            else if (navigator.msGetUserMedia) {
                navigator.msGetUserMedia(videoObj, function (stream) {
                    $(document).scrollTop($(window).height());
                    video.src = window.URL.createObjectURL(stream);
                    video.play();
                }, MediaErr);
            } else {
                alert('對(duì)不起,您的瀏覽器不支持拍照功能,請(qǐng)使用其他瀏覽器');
                return false;
            }
            if (flag) {
                //alert('為了獲得更準(zhǔn)確的測(cè)試結(jié)果,請(qǐng)盡量將二維碼置于框中,然后進(jìn)行拍攝、掃描。 請(qǐng)確保瀏覽器有權(quán)限使用攝像功能');
            }
            //這個(gè)是拍照按鈕的事件,
            $("#snap").click(function () { startPat(); }).show();
        } catch (e) {
            printHtml("瀏覽器不支持HTML5 CANVAS");
        }
    }, false);
    //打印內(nèi)容到頁(yè)面
    function printHtml(content) {
        $(window.document.body).append(content + "<br/>");
    }
    //開始拍照
    function startPat() {
        setTimeout(function () {//防止調(diào)用過(guò)快
            if (context) {
                context.drawImage(video, 0, 0, 320, 320);
                CatchCode();
            }
        }, 200);
    }
    //抓屏獲取圖像流,并上傳到服務(wù)器
    function CatchCode() {
        if (canvas != null) {
            //以下開始編 數(shù)據(jù)
            var imgData = canvas.toDataURL("image/jpeg");
            //將圖像轉(zhuǎn)換為base64數(shù)據(jù)
            var base64Data = imgData; //在前端截取22位之后的字符串作為圖像數(shù)據(jù)
            $.ajax({
                type: 'post',
                url: '../ashx/HandlerScan.ashx?method=ParseImage',
                data: 'ImgData=' + base64Data,
                dataType: "json",
                cache: false,
                timeout: 10000,
                success: function (mes) {
                    if (mes.code == '1') {
                        alert('未識(shí)別二維碼,請(qǐng)重新掃描!');
                    }
                    else {
                        alert(mes.name);
                    }
                },
                error: function (err) {
                    alert('掃描失敗' + err);
                }
            });
        }
    }
</script>
<body>
    <div id="support"></div>
    <div id="contentHolder">
        <video id="video" width="320" height="320" autoplay></video>
        <canvas id="canvas" style="display:none; background-color:#F00;" width="320" height="320"></canvas><br/>
        <button id="snap" style="display:none; height:50px; width:120px;">開始掃描</button>
    </div>
</body>
</html>  

[C#后臺(tái)]

    public class HandlerScan : IHttpHandler
    {
        private JsonResult js = new JsonResult();
        public void ProcessRequest(HttpContext context)
        {
            string result = string.Empty;
            string method = context.Request.QueryString.ToString();//獲取想要做的操作
            switch (method)
            {
                case "method=ParseImage":
                    result = ParseImage(context);
                    break;
                default:
                    break;
            }
            context.Response.ContentType = "text/json";
            context.Response.Write(result);
        }
        private string ParseImage(HttpContext context)
        {
            try
            {
                string imgStr = context.Request.Params["ImgData"].ToString();
                imgStr = imgStr.Replace("data:image/jpeg;base64,", "");
                //整理字符串
                imgStr = imgStr.Replace(" ", "+");
                byte[] arr = Convert.FromBase64String(imgStr);
                MemoryStream ms = new MemoryStream(arr, 0, arr.Length);
                Bitmap bmp = new Bitmap(ms);
                //解析圖片
                Result result = new BarcodeReader().Decode(bmp);
                if(result == null)
                {
                    return "{\"code\":1,\"name\":\"\"}";
                }
                else
                {
                    string[] a = result.Text.Split(','); 
                    string str = "{\"code\":0,\"name\":\"" + a[0] + "\"}";
                    return str; 
                }
            }
            catch (Exception ex)
            {
                return "{\"code\":1,\"msg\":\"" + ex.Message + "\",\"userName\":\"\"}";
            }
        }
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
藍(lán)藍(lán)設(shè)計(jì)www.yvirxh.cn )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國(guó)內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 、平面設(shè)計(jì)服務(wù)

12條鮮有人知的css事實(shí)

周周

      此文為譯文,在這篇文章中提到了12條我們前端人員在日常工作中不是特別熟悉而又確實(shí)可以使用或者瀏覽器是可以很好支持的CSS技巧,熟知這些點(diǎn),對(duì)我們深入研究CSS有很好的幫助。在本文中,用括號(hào)的方式加了一些簡(jiǎn)單的算是注釋的個(gè)人理解。    原文地址:http://www.sitepoint.com/12-little-known-css-facts-the-sequel/

1、 border-radius屬性可以使用'/'(斜杠)標(biāo)簽 

      不管你信不信,下邊是有效的border-radius代碼:

.box {
border-radius: 35px 25px 30px 20px / 35px 25px 15px 30px;

    }

    如果你之前沒(méi)有見過(guò)這些,這里你可能會(huì)有一些困惑,所以這里有規(guī)范的解釋:

   “如果斜杠/前后都設(shè)了值,那么斜杠前面的值就設(shè)定橫向的圓角半徑值,而斜杠后面的值就是設(shè)定縱向的半徑值。如果沒(méi)有斜杠的話,就把橫向跟縱向的值設(shè)定為相等?!?/span>

763731149396848.png

圖片注釋:“border-top-left-radius: 55pt 25pt 的兩個(gè)值定義了這個(gè)圓角的曲率(彎曲度) ”  所以,斜杠在值中的作用是讓你創(chuàng)建不對(duì)稱(橫向跟縱向值)的圓角曲率

2、使用bolder、lighter相關(guān)關(guān)鍵字進(jìn)行font-weight屬性的定義

    正常來(lái)說(shuō)你所看到的font-weight 屬性的定義,它的值要么是normal要么是bold。你也偶爾能看到整數(shù)以整百為增量的值:100,200、、最大到900.
     然而,bolder跟lighter這兩個(gè)值經(jīng)常會(huì)被忘記。

         根據(jù)規(guī)范定義,這兩個(gè)關(guān)鍵詞指定了比繼承值更粗或更細(xì)的值。它的出現(xiàn)會(huì)讓你在處理一個(gè)比簡(jiǎn)單的‘bold’更粗一點(diǎn)或者比正常文本更細(xì)一點(diǎn)的多種權(quán)重的字號(hào)的時(shí)候表現(xiàn)的更加明顯。(這塊可能會(huì)有點(diǎn)難理解,其實(shí)這里是跟字體本身有關(guān)聯(lián)的,如果你的字體,比如例子中用到的‘Exo 2’字體中,因?yàn)檫@個(gè)字體最細(xì)為100,bolder一下就變成400,再bolder一下是700,其實(shí)它這個(gè)bolder跟lighter是有個(gè)固定跳到的數(shù)值的,只會(huì)匹配到400,700,900這樣的值里,當(dāng)你的繼承值為100、200或300,bolder一下,這個(gè)bolder的值都會(huì)是400,繼承值為900,800,lighter一下,這個(gè)值都一樣會(huì)是700,所以兩個(gè)關(guān)鍵字其實(shí)是只會(huì)是400、700、900三個(gè)值的。)

3、關(guān)于outline-offset屬性
    outline 屬性由于它能夠幫助調(diào)試而被眾所周知(它不影響頁(yè)面流)。規(guī)范上增加了一個(gè)outline-offset屬性,它的作用完全跟它名字所表示的一樣--讓你定義它的外框線應(yīng)該距離元素本身的偏移量。
    需要注意的就是,雖然outline屬性是一個(gè)簡(jiǎn)寫屬性,但它不包含outline-offset屬性,所以你每次都需要再單獨(dú)定義outline-offset。

     outline-offset屬性唯一的缺點(diǎn)就是,它在IE瀏覽器(即使是IE11)中不起效。

4、關(guān)于table-layout屬性

    你可能會(huì)想,這是很老的信息了。我對(duì)display: table很熟悉,最早用來(lái)實(shí)現(xiàn)垂直居中的一種方法。但那不是我想說(shuō),注意我要說(shuō)的是table-layout屬性,而不是display屬性。
    table-layout屬性不像CSS的其他屬性那樣容易解釋,所以我們還是先來(lái)看看規(guī)范是如何解釋的:
    "根據(jù)這個(gè)算法,table的橫向布局不依賴于單元格的內(nèi)容;它僅僅依賴于表格的寬度、列的寬度以及邊框和單元格的間距"
    這可能也是W3C規(guī)范史上第一次出現(xiàn)這樣很難理解的東西

5、vertical-align屬性用在表格跟非表格中的時(shí)候表現(xiàn)不一樣
    如果你在2000年或者更早就開始接觸網(wǎng)站編程,或者你處理過(guò)很多HTML電子郵件的話,那么你可能會(huì)認(rèn)為vertical-align 屬性是對(duì)老的HTML4中valign屬性一個(gè)在HTML5里過(guò)時(shí)的,不符合功能要求的標(biāo)簽)的一個(gè)標(biāo)準(zhǔn)升級(jí)。
    但在CSS中vertical-align 并不是起到那樣的作用。除開表格,我認(rèn)為這個(gè)屬性更牛逼的地方并不在于表格中的表現(xiàn)。
    所以,這個(gè)屬性被應(yīng)用于常規(guī)的元素跟表格單元的時(shí)候有什么不一樣的地方呢?
    當(dāng)vertical-align 不是應(yīng)用在表格單元的時(shí)候,它遵循下邊這些基本規(guī)則:

  • 它只在inline或inline-block元素中起效。
  • 它對(duì)元素中的內(nèi)容不起效,但能改變?cè)撛叵鄬?duì)于其他inline或inline-block元素的對(duì)齊。
  • 它受文本/字體屬性(比如行高line-height)或者相鄰inline或inline-block元素的大小設(shè)置的影響。

6、偽元素::first-letter比你想象中更靈活

    偽元素::first-letter可以給元素的第一個(gè)字母定義樣式,讓你實(shí)現(xiàn)在印刷中多年前就有的段落效果(drop-cap 印刷的書本中經(jīng)常能看到的段落中的第一個(gè)字比其他字號(hào)要大的效果)。
    有個(gè)好消息就是瀏覽器快要出一個(gè)關(guān)于元素的首字母構(gòu)成的標(biāo)準(zhǔn)了。我最早在 Matt Andrews的twitter上看到有關(guān)這個(gè)推文,雖然他僅僅是發(fā)推文吐槽::first-letter選擇器很糟糕。

7、你可以在HTML class列表中使用無(wú)效字符作為分隔符
    這個(gè)概念是Ben Everard在2013年的時(shí)候提出,而且我認(rèn)為它值得推廣一下。Ben的觀點(diǎn)是用斜杠去將他的HTML類名進(jìn)行分組,以便他的代碼能夠更好地閱讀或?yàn)g覽。他的觀點(diǎn)認(rèn)為,轉(zhuǎn)義斜杠是一個(gè)無(wú)效字符,瀏覽器會(huì)無(wú)視它。
    所以你的HTML實(shí)例可能是這樣的:

<div class="col col-4 col-8 c-list bx bx--rounded bx--transparent"> 使用斜杠后,變成這樣: <div class="col col-4 col-8 / c-list / bx bx--rounded bx--transparent"> 你也可以使用任何字符(無(wú)效的或者空字符)去實(shí)現(xiàn)同樣的效果: <div class="col col-4 col-8 ** c-list ** bx bx--rounded bx--transparent">[/font]
<div class="col col-4 col-8 || c-list || bx bx--rounded bx--transparent">
 
<div class="col col-4 col-8 && c-list && bx bx--rounded bx--transparent">

8、動(dòng)畫重復(fù)的次數(shù)可以是帶小數(shù)的值

   在寫CSS關(guān)鍵幀動(dòng)畫的時(shí)候,你應(yīng)該可以用animation-iteration-count 屬性來(lái)定義動(dòng)畫重復(fù)執(zhí)行的次數(shù):

.example {
animation-iteration-count: 3;
}

     這個(gè)例子中的整數(shù)值將會(huì)讓這個(gè)動(dòng)畫重復(fù)執(zhí)行3次。但你可能不知道這里我們可以使用小數(shù)值:

.example {
animation-iteration-count: .5;
}

   在這個(gè)案例中,這個(gè)動(dòng)畫將執(zhí)行半次(它會(huì)在第一次動(dòng)畫循環(huán)的中途停止)。

9、動(dòng)畫名稱會(huì)在動(dòng)畫的簡(jiǎn)寫方式中影響動(dòng)畫的使用
      有些開發(fā)者可能已經(jīng)發(fā)現(xiàn)了這一點(diǎn),在規(guī)范中對(duì)這個(gè)也有個(gè)提醒。比方說(shuō),你有以下的動(dòng)畫代碼:

@keyframes reverse {
from {
left: 0;
}
  to {
left: 300px;
}
}
  .example {
animation: reverse 2s 1s;
}

    注意這里我使用reverse作為動(dòng)畫的名稱。簡(jiǎn)單來(lái)看,這并沒(méi)什么不妥,但要注意當(dāng)我們?cè)谟蒙厦娴拇a作為一個(gè)例子時(shí)發(fā)生了什么:
    這段動(dòng)畫并不起效,因?yàn)椤畆everse’是animation-direction屬性的一個(gè)關(guān)鍵字。任何的動(dòng)畫名稱在匹配到一個(gè)簡(jiǎn)寫語(yǔ)法中的關(guān)鍵字值的時(shí)候都會(huì)發(fā)生這樣的情況。但在普通寫法中這樣的情況不會(huì)發(fā)生(animation-name這樣單獨(dú)的動(dòng)畫名稱寫法的時(shí)候)。
    動(dòng)畫命名在簡(jiǎn)寫語(yǔ)法中包含了任何定時(shí)功能的關(guān)鍵字 (比如infinite, alternate, running, paused 等等)都會(huì)被阻斷。

10、使用樣式選取元素列表中元素的范圍
    我不知道是誰(shuí)首先這樣用的,但我第一次是在Gunnar Bittersmann 的這個(gè)demo 中看到的。比如說(shuō)有一個(gè)20個(gè)元素的有序列表,你想選擇第7到14個(gè)元素。這里你可以使用一個(gè)選擇器來(lái)實(shí)現(xiàn):

ol li:nth-child(n+7):nth-child(-n+14) {
background: lightpink;

}

    這個(gè)代碼使用了鏈?zhǔn)浇Y(jié)構(gòu)的偽類表達(dá)式。雖然表達(dá)式有點(diǎn)難理解,但你可以通過(guò)表達(dá)式中的數(shù)字看到你想要選中的范圍。
    更詳細(xì)地解釋這個(gè)工作的原理:在鏈?zhǔn)浇Y(jié)構(gòu)的第一部分,表達(dá)式為“選中第七個(gè)元素及后面的所有元素”。第二部分的意思是“選取第十四個(gè)元素及前面的所有元素”。但由于兩部分是鏈接在一起的,每一個(gè)限制前一個(gè)的范圍。所以鏈?zhǔn)浇Y(jié)構(gòu)的第二部分不允許第一部分超過(guò)第十四個(gè)元素,然而第一部分又不允許第二部分選取到第七個(gè)元素之前的元素。

11、偽元素也適用于一些空元素
    如果你跟我一樣,嘗試過(guò)把偽元素附加到一個(gè)圖片或者表格input標(biāo)簽上。你會(huì)發(fā)現(xiàn)這樣并不生效因?yàn)閭卧卦诜情]合元素上無(wú)效。我想很多開發(fā)者都認(rèn)為空元素(即沒(méi)有閉合標(biāo)簽的元素)都是這樣的。但這并不正確。

12、有些屬性值在選擇器中是不區(qū)分大小寫的
    這是一個(gè)不起眼的點(diǎn),讓他們通過(guò)下邊的HTML來(lái)看:

<div class="box"></div>
<input type="email">

    你可以通過(guò)屬性選擇器來(lái)給他們兩個(gè)添加樣式,像這樣:

div[class="box"] {
color: blue;
}
 
input[type="email"] {
border: solid 1px red;
}

    上面這樣是沒(méi)問(wèn)題的,那下邊這樣呢?

div[class="BOX"] {
color: blue;
}
 
input[type="EMAIL"] {
border: solid 1px red;
}

    現(xiàn)在兩個(gè)屬性值都是大寫的。在這個(gè)示例中,因?yàn)閏lass 屬性是區(qū)分大小寫的,所以 .box 元素的樣式不生效。而另外一個(gè)email的標(biāo)簽,卻由于type 的屬性值不區(qū)分大小寫,所以它的樣式能生效。這并非什么重大發(fā)現(xiàn),只是一些你之前可能沒(méi)留意到的。

微信小程序?qū)W習(xí)參考demo源碼集合

seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動(dòng)發(fā)到您的郵箱中, 請(qǐng)點(diǎn)這里

微信小程序?qū)W習(xí)參考demo源碼集合,僅供參考學(xué)習(xí)用途!??!

面對(duì)面翻譯 微信小程序源碼下載,語(yǔ)音翻譯類小程序工具http://www.henkuai.com/thread-37499-1-1.html

開源微信小程序,小團(tuán)隊(duì)管理小程序下載 :http://www.henkuai.com/thread-37498-1-1.html

微信小程序多用戶商城demo,還在開發(fā)中:http://www.henkuai.com/thread-37497-1-1.html

微信小程序搶課列表demo :http://www.henkuai.com/thread-37496-1-1.html

微信小程序地圖實(shí)時(shí)顯示demo:http://www.henkuai.com/thread-37495-1-1.html

高質(zhì)量微信小程序UI組件庫(kù):http://www.henkuai.com/thread-37492-1-1.html

購(gòu)房搖號(hào)助手微信小程序下載:http://www.henkuai.com/thread-37471-1-1.html

股票金融微信小程序客戶端:http://www.henkuai.com/thread-37470-1-1.html
接龍微信小程序腳本,創(chuàng)建房間等等:http://www.henkuai.com/thread-37469-1-1.html
微信小程序統(tǒng)一中央服務(wù)器的思路,校園小情書聯(lián)盟:http://www.henkuai.com/thread-37468-1-1.html
輔導(dǎo)員預(yù)約微信小程序:http://www.henkuai.com/thread-37467-1-1.html
仿星巴克用心說(shuō)微信小程序:http://www.henkuai.com/thread-37466-1-1.html
微信小程序頂部滑動(dòng)導(dǎo)航菜單欄:http://www.henkuai.com/thread-37465-1-1.html
微信小程序朋友圈點(diǎn)贊功能,讓你的朋友圈秀起來(lái):http://www.henkuai.com/thread-37464-1-1.html
微信小程序版 “前端TOP100”:http://www.henkuai.com/thread-37463-1-1.html
微信小程序3D輪播圖效果示例:http://www.henkuai.com/thread-37459-1-1.html
微信小程序仿滴滴打車小程序源碼下載,歡迎加入開發(fā):http://www.henkuai.com/thread-37458-1-1.html
微信小程序仿青桔單車,打開地圖掃碼開鎖:http://www.henkuai.com/thread-37436-1-1.html
微信小程序投票器,投票小程序源碼:http://www.henkuai.com/thread-37434-1-1.html
微信小程序時(shí)間軸源碼,記錄中國(guó)LGBT事件:http://www.henkuai.com/thread-37433-1-1.html
微信小程序api攔截器,完美兼容原生小程序項(xiàng)目:http://www.henkuai.com/thread-37431-1-1.html
微信小程序使用map組件實(shí)現(xiàn)多點(diǎn)定位顯示:http://www.henkuai.com/thread-37421-1-1.html
微信小程序商城前端,展示嬰幼兒商品: http://www.henkuai.com/thread-37418-1-1.html
答題小程序免費(fèi)送,有人用這個(gè)“小程序”每天做100000:http://www.henkuai.com/thread-37412-1-1.html

使用微信小程序map組件開發(fā)的一個(gè)demo,各種坑:http://www.henkuai.com/thread-37400-1-1.html

微信小游戲2048源碼下載,經(jīng)典的小游戲:http://www.henkuai.com/thread-37399-1-1.html

微信小程序-菜譜百科,小程序開發(fā)學(xué)習(xí)demo :http://www.henkuai.com/thread-37380-1-1.html

鮮切水果微信小程序,水果商城小程序:http://www.henkuai.com/thread-37379-1-1.html

微信小程序線上圖書館前端+后端源碼下載,圖書查詢小程序 :http://www.henkuai.com/thread-37378-1-1.html

微信小程序日歷打卡項(xiàng)目下載,輕巧好用的日歷打卡組件:http://www.henkuai.com/thread-37367-1-1.html

微信小程序練手項(xiàng)目,包含抽屜效果、底部tab效果實(shí)現(xiàn)等:http://www.henkuai.com/thread-37365-1-1.html

【獨(dú)立小程序】志匯餐飲8.6 小程序前端修復(fù)版本:http://www.henkuai.com/thread-37344-1-1.html

仿今日頭條3.0 小程序前端 demo分享:http://www.henkuai.com/thread-37338-1-1.html

微信小程序真心話大冒險(xiǎn)游戲,朋友聚會(huì)必備小程序:http://www.henkuai.com/thread-37337-1-1.html

微信小游戲頭腦王者自動(dòng)答題輔助插件,小游戲作弊工具:http://www.henkuai.com/thread-37336-1-1.html

微信小程序左滑操作自定義組件,讓你的小程序開發(fā)更:http://www.henkuai.com/thread-37334-1-1.html

藍(lán)藍(lán)設(shè)計(jì)www.yvirxh.cn )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國(guó)內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 平面設(shè)計(jì)服務(wù)

設(shè)計(jì)規(guī)范|Web端設(shè)計(jì)組件篇—文本與選擇器

博博


人人都是產(chǎn)品經(jīng)理 2018-04-23 00:00:00

本文作者主要講解表單中的文本和選擇器,enjoy~

設(shè)計(jì)規(guī)范|Web端設(shè)計(jì)組件篇—文本與選擇器

根據(jù)組件的用途,可以分為六大類:Feedback 反饋、form 表單、basic 基礎(chǔ)、data 數(shù)據(jù) 、navigation 導(dǎo)航、other 其他。

設(shè)計(jì)規(guī)范|Web端設(shè)計(jì)組件篇—文本與選擇器

表單在網(wǎng)頁(yè)中主要負(fù)責(zé)數(shù)據(jù)采集功能;用戶需要填寫輸入數(shù)據(jù)并且提交到數(shù)據(jù)庫(kù),則這種組件就是表單類。

本文主要講解表單中的文本和選擇器,其中文本分為input短文本、InputAutocomplete 短文本聯(lián)想和InputMultiline 長(zhǎng)文本。

input 短文本

定義:用于用戶文本輸入,并以字符串的方式提交到數(shù)據(jù)庫(kù)。

使用場(chǎng)景:

  1. 用戶需要輸入字符時(shí)
  2. 通過(guò)鼠標(biāo)鍵盤輸入內(nèi)容
  3. 輸入的文本通常置于輸入框

例如網(wǎng)易考拉優(yōu)惠券兌換的表單填寫,就是短文本輸入組件,前面是標(biāo)題,后面是文本輸入框。

設(shè)計(jì)規(guī)范|Web端設(shè)計(jì)組件篇—文本與選擇器

input短文本組件的展示形式可以分為三類。第1類是標(biāo)題和輸入框左右排列;第二類是標(biāo)題和輸入框上下排列;第三列不需要標(biāo)題的排列。

標(biāo)題和輸入框左右排列時(shí),短文本組件存在的狀態(tài)有:初始態(tài)、激活態(tài)、報(bào)錯(cuò)態(tài)、完成態(tài)和禁用態(tài)。

設(shè)計(jì)規(guī)范|Web端設(shè)計(jì)組件篇—文本與選擇器

常見的表單類排版都是左右排版,同時(shí)表單之間,標(biāo)題采用左對(duì)齊,輸入框左對(duì)齊的情況比較多。有時(shí)候標(biāo)題名字過(guò)長(zhǎng)這樣話 左右排列就不夠好,這時(shí)候需要采用上下排列。

設(shè)計(jì)規(guī)范|Web端設(shè)計(jì)組件篇—文本與選擇器

標(biāo)題和輸入框上下排版時(shí),存在狀態(tài)和左右排列是一致的。

設(shè)計(jì)規(guī)范|Web端設(shè)計(jì)組件篇—文本與選擇器

當(dāng)沒(méi)有標(biāo)題時(shí),存在狀態(tài)同左右排列的規(guī)則和邏輯。

設(shè)計(jì)規(guī)范|Web端設(shè)計(jì)組件篇—文本與選擇器

InputAutocomplete 短文本聯(lián)想

定義:用戶用于文本輸入,在輸入過(guò)程中會(huì)聯(lián)想匹配文本選項(xiàng),并以字符串的方式提交到數(shù)據(jù)庫(kù)。

使用場(chǎng)景:

  1. 需要用戶輸入文本時(shí)。
  2. 提供聯(lián)想匹配文本,減少用戶輸入成本。
  3. 在輸入過(guò)程中根據(jù)用戶輸入的內(nèi)容,出現(xiàn)匹配選項(xiàng),提交的數(shù)據(jù)是文本而非枚舉項(xiàng)。

例如百度搜索,在輸入框輸入關(guān)鍵詞時(shí)會(huì)出現(xiàn)對(duì)應(yīng)的聯(lián)想匹配文本。

設(shè)計(jì)規(guī)范|Web端設(shè)計(jì)組件篇—文本與選擇器

和input短文本組件相比,InputAutocomplete 短文本聯(lián)想唯一的不同就是新增了聯(lián)想匹配選項(xiàng),并且提交的是文本而非枚舉項(xiàng)。

標(biāo)題和輸入框左右排列時(shí),InputAutocomplete 短文本聯(lián)想組件存在的狀態(tài)有:初始態(tài)、激活態(tài)、報(bào)錯(cuò)態(tài)、完成態(tài)和禁用態(tài)。

設(shè)計(jì)規(guī)范|Web端設(shè)計(jì)組件篇—文本與選擇器

上下排列的狀態(tài)和規(guī)則邏輯同左右排列。

設(shè)計(jì)規(guī)范|Web端設(shè)計(jì)組件篇—文本與選擇器

不含標(biāo)題的狀態(tài)和規(guī)則邏輯同左右排列。

設(shè)計(jì)規(guī)范|Web端設(shè)計(jì)組件篇—文本與選擇器

InputMultiline 長(zhǎng)文本

定義:用戶用于長(zhǎng)文本輸入,并以文本的方式提交到數(shù)據(jù)庫(kù)。

使用場(chǎng)景:

  1. 多段文字輸入
  2. 需要換行
  3. 輸入的文本通常置于輸入框中

例如新浪微博,在輸入框發(fā)微博時(shí),就是長(zhǎng)文本輸入,可以換行。

設(shè)計(jì)規(guī)范|Web端設(shè)計(jì)組件篇—文本與選擇器

標(biāo)題和輸入框左右排列時(shí),InputMultiline 長(zhǎng)文本存在的狀態(tài)有:初始態(tài)、激活態(tài)、報(bào)錯(cuò)態(tài)、完成態(tài)和禁用態(tài)。在輸入過(guò)程中一般有字?jǐn)?shù)統(tǒng)計(jì),超過(guò)限制字?jǐn)?shù),不允許用戶輸入。

設(shè)計(jì)規(guī)范|Web端設(shè)計(jì)組件篇—文本與選擇器

上下排列邏輯和規(guī)則同左右排列。

設(shè)計(jì)規(guī)范|Web端設(shè)計(jì)組件篇—文本與選擇器

不含標(biāo)題的邏輯同左右排列。

設(shè)計(jì)規(guī)范|Web端設(shè)計(jì)組件篇—文本與選擇器

select 選擇器

定義:用戶通過(guò)選擇枚舉項(xiàng),提交到服務(wù)器。后端存儲(chǔ)為枚舉項(xiàng)。

使用場(chǎng)景:

  1. 彈出一個(gè)下拉選項(xiàng)給用戶選擇操作
  2. 當(dāng)選項(xiàng)少時(shí)(少于 5 項(xiàng)),建議直接將選項(xiàng)平鋪,使用 Radio 是更好的選擇。

例如淘寶賣家后臺(tái)篩選訂單的狀態(tài)時(shí),點(diǎn)擊選擇器,出現(xiàn)下拉列表。這就是一個(gè)常見的選擇器,選擇器分為多選和單選兩大類。

設(shè)計(jì)規(guī)范|Web端設(shè)計(jì)組件篇—文本與選擇器

下圖為選擇器基本樣式,就是簡(jiǎn)單的下拉選項(xiàng),不可進(jìn)行關(guān)鍵詞的搜索。

設(shè)計(jì)規(guī)范|Web端設(shè)計(jì)組件篇—文本與選擇器

下圖是可以搜索的選擇器,當(dāng)輸入框處于激活態(tài)時(shí),浮出下拉列表。在輸入過(guò)程中,出現(xiàn)匹配枚舉項(xiàng),點(diǎn)擊枚舉項(xiàng),則輸入的關(guān)鍵詞清空,同時(shí)下拉選項(xiàng)收起。輸入框出現(xiàn)選擇的選項(xiàng)。

設(shè)計(jì)規(guī)范|Web端設(shè)計(jì)組件篇—文本與選擇器

有時(shí)候存在一個(gè)場(chǎng)景。用戶對(duì)需要填寫的選項(xiàng)設(shè)為空選項(xiàng),則需要空值的選項(xiàng)。

設(shè)計(jì)規(guī)范|Web端設(shè)計(jì)組件篇—文本與選擇器

有時(shí)候存在一個(gè)場(chǎng)景。用戶選擇了一個(gè)選項(xiàng),但是后面想去掉選擇的選項(xiàng),不進(jìn)行選擇。

設(shè)計(jì)規(guī)范|Web端設(shè)計(jì)組件篇—文本與選擇器

選擇器多選組件中需要注意的一點(diǎn)就是:用戶在輸入關(guān)鍵詞中,選擇對(duì)應(yīng)下拉選項(xiàng),則輸入的字符串清空,同時(shí)出現(xiàn)該選項(xiàng)tag。

設(shè)計(jì)規(guī)范|Web端設(shè)計(jì)組件篇—文本與選擇器

常用正則表達(dá)式20例

周周

   總結(jié)了工作中可能經(jīng)常會(huì)用到的各類正則表達(dá)式的寫法。
   方便以后進(jìn)行查找,減少工作量。

   1. 校驗(yàn)基本日期格式

var reg1 = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/;
var reg2 = /^(^(\d{4}|\d{2})(\-|\/|\.)\d{1,2}\3\d{1,2}$)|(^\d{4}年\d{1,2}月\d{1,2}日$)$/;

   2. 校驗(yàn)密碼強(qiáng)度
   密碼的強(qiáng)度必須是包含大小寫字母和數(shù)字的組合,不能使用特殊字符,長(zhǎng)度在8-10之間。

var reg = /^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$/;

   3. 校驗(yàn)中文 

   字符串僅能是中文。

var reg = /^[\\u4e00-\\u9fa5]{0,}$/; 4. 由數(shù)字、26個(gè)英文字母或下劃線組成的字符串 var reg = /^\\w+$/; 5. 校驗(yàn)E-Mail 地址
同密碼一樣,下面是E-mail地址合規(guī)性的正則檢查語(yǔ)句。
var reg = /[\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?/; 6. 校驗(yàn)身份證號(hào)碼
下面是身份證號(hào)碼的正則校驗(yàn)。15 或 18位。
15位: var reg = /^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$/; 18位: var reg = /^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$/; 7. 校驗(yàn)日期
“yyyy-mm-dd” 格式的日期校驗(yàn),已考慮平閏年。 var reg = /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/; 8. 校驗(yàn)金額
金額校驗(yàn),到2位小數(shù)。 var reg = /^[0-9]+(.[0-9]{2})?$/; 9. 校驗(yàn)手機(jī)號(hào)
下面是國(guó)內(nèi) 13、15、18開頭的手機(jī)號(hào)正則表達(dá)式。(可根據(jù)目前國(guó)內(nèi)收集號(hào)擴(kuò)展前兩位開頭號(hào)碼) var reg = /^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$/;    10. 判斷IE的版本
   IE目前還沒(méi)被完全取代,很多頁(yè)面還是需要做版本兼容,下面是IE版本檢查的表達(dá)式。

var reg = /^.*MSIE [5-8](?:\\.[0-9]+)?(?!.*Trident\\\/[5-9]\\.0).*$/;

      11. 校驗(yàn)IP-v4地址

var reg = /\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b/;

     12. 校驗(yàn)IP-v6地址

var reg = /(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/;

      13. 檢查URL的前綴
   應(yīng)用開發(fā)中很多時(shí)候需要區(qū)分請(qǐng)求是HTTPS還是HTTP,通過(guò)下面的表達(dá)式可以取出一個(gè)url的前綴然后再邏輯判斷。

if (!s.match(
    /^[a-zA-Z]+:\/\//
  )) {
  s =
    'http://' +
    s;

}

      14. 提取URL鏈接
   下面的這個(gè)表達(dá)式可以篩選出一段文本中的URL。

var reg = /^(f|ht){1}(tp|tps):\/\/([\w-]+\.)+[\w-]+(\/[\w- ./?%&=]*)?/;    15. 文件路徑及擴(kuò)展名校驗(yàn)
   驗(yàn)證 windows下文件路徑和擴(kuò)展名(下面的例子中為.txt文件)
var reg = /^([a-zA-Z]\\:|\\\\)\\\\([^\\]+\\)*[^\\/:*?"<>|]+\\.txt(l)?$/;       16. 提取Color Hex Codes
   有時(shí)需要抽取網(wǎng)頁(yè)中的顏色代碼,可以使用下面的表達(dá)式。
var reg = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/; 17. 提取網(wǎng)頁(yè)圖片
   假若你想提取網(wǎng)頁(yè)中所有圖片信息,可以利用下面的表達(dá)式。
var reg = /\\< *[img][^\\>]*[src] *= *[\\"\']{0,1}([^\\"\'\ >]*)/;    18. 提取頁(yè)面超鏈接
   提取html中的超鏈接。

var reg = /(<a\\s*(?!.*\\brel=)[^>]*)(href="https?:\/\/)((?!(?:(?:www\\.)?'.implode('|(?:www\\.)?', $follow_list).'))[^"]+)"((?!.*\\brel=)[^>]*)(?:[^>]*)>/;

   19. 查找CSS屬性
   通過(guò)下面的表達(dá)式,可以搜索到相匹配的CSS屬性。

var reg = /^\\s*[a-zA-Z\\-]+\\s*[:]{1}\\s[a-zA-Z0-9\\s.#]+[;]{1}/;

   20. 抽取注釋
   如果你需要移除HMTL中的注釋,可以使用如下的表達(dá)式。

var reg = /<!--(.*?)-->/;

日歷

鏈接

個(gè)人資料

存檔