單選框和復(fù)選框在網(wǎng)頁表單中應(yīng)用十分廣泛,但是瀏覽器默認自帶的單選框和復(fù)選框樣式不僅不統(tǒng)一,而且大多都比較簡單丑陋。本文給大家介紹了一些基于CSS3的個性化單選框和復(fù)選框,一些選中動畫是基于jQuery的,你可以挑選喜歡的單選框和復(fù)選框應(yīng)用到自己的網(wǎng)頁中去,非常方便。
1、jQuery超級個性化的單線框和復(fù)選框
今天要分享的也是一個非常個性化的單選框和復(fù)選框插件,顏色你可以自己定義。
2、CSS3漂亮的自定義Checkbox復(fù)選框 9款迷人樣式
今天我們來分享一款9款樣式迷人的CSS3漂亮的自定義checkbox復(fù)選框。這幾款復(fù)選框樣式很豐富,使用起來也比較方便。
3、CSS3自定義美化復(fù)選框Checkbox組合
今天我們要來分享一組非常漂亮的CSS3自定義復(fù)選框checkbox,每一個checkbox都有其各自的特點。有幾款checkbox在選中的情況下還會出現(xiàn)動畫效果,非常不錯的CSS3自定義美化checkbox組合。
4、jQuery實現(xiàn)美化版的單選框和復(fù)選框
今天這款是利用jQuery實現(xiàn)的美化版單選框和復(fù)選框,樣式風格非常簡潔清爽,是一款很不錯的jQuery按鈕插件。
5、純CSS3 3D按鈕 按鈕酷似牛奶般剔透
CSS3按鈕一般都可以設(shè)計的非常漂亮,利用投影、漸變等CSS3屬性可以把按鈕渲染的十分動感。今天分享的這款CSS3按鈕外觀非常特別,它看上去酷似晶瑩剔透的牛奶,而且在點擊按鈕時出現(xiàn)3D效果的動畫,按鈕按下時,按鈕會輕輕的彈動一下,非常逼真。
6、HTML5/CSS3開關(guān)按鈕 立體3D按鈕
今天介紹的這款HTML5/CSS3開關(guān)切換按鈕是利用純CSS3的,代碼非常簡單,3D效果也還可以。
7、CSS3自定義發(fā)光Radiobox單選框
今天我們要來分享一款CSS3實現(xiàn)的自定義發(fā)光radiobox單選框插件,該radiobox選中時也有滑塊的動畫。
8、CSS3實現(xiàn)自定義Checkbox動畫
今天我們要再來分享一款CSS3自定義checkbox,而且這款checkbox還帶有動畫效果,當你選中checkbox的時候,會以動畫的方式打上一個大大的勾。
以上就是8個非常個性化的CSS3單/復(fù)選框,希望對你有所幫助。
本文鏈接:http://www.codeceo.com/article/10-personal-css3-radiobox-checkbox.html
收集了一些比較常用的JavaScript函數(shù)。
1、字符串長度截取函數(shù)
function cutstr(str,len){
var temp,icount = 0,patrn = /[^x00-\xff]/,strre=" ";
for(var i= 0;i<str.length;i++) {
if (icount<len-1){
temp =str.substr(i,1);
if (patrn.exec(temp)==null){
icount =icount+1
}else {
icount =icount+2
}
strre+=temp
} else {
break;
}
}
returen strre+"...";
}
2、替換全部
String.prototype.replaceAll = function(s1,s2) {
return this.replace(new RegExp(s1,"gm"),s2);
}
3、清除空格
function trim = function() {
var reExtraSpace = /^\s*(.*?)\s+$/;
return this.replace(reExtraSpace,"$1");
}
4、清除左空格/右空格
function ltrim(s){
return s.replace(/^(\s*| *)/,"");
}
function rtrim(s) {
return s.replace(/(\s*| *)$/,"");
}
5、判斷是否以某個字符串開頭
String.prototype.startWith = function(s) {
return this.indexOf(s)==0;
}
6、判斷是否以某個字符串結(jié)束
String.prototype.endWith = function(s) {
var d = this.length - s.length;
return (d >= 0 && this.lastIndexOf(s)==d);
}
7、轉(zhuǎn)義HTML標簽
function HtmlEncode(text) {
return text.replace(/&/g,'&').replace(/\"/g,' " ').replace(/</g,'<').replace(/>/g,'>');
}
8、時間日期格式轉(zhuǎn)換
Date.prototype.Format = function(formatStr){
var str = formatStr;
var week =['日','一','二','三','四','五','六'];
str = str.replace(/yyyy|YYYY/,this.getFullYear());
str = str.replace(/yy|YY,(this.getYear()%100)>9?(this.getYear()%100).toString():'0'+(this.getYear()%100));
str = str.replace(/MM/,(this.getMonth()+1)>9?(this.getMonth()+1).toString():'0'+this.getMonth()+1));
str = str.replace(/w|W/g,week[(this.getDay()];
str = str.replace(/dd|DD/,(this.getDate()>9?this.getDate().toString():'0'+this.getDate());
str = str.replace(/d|D/g,this.getDate());
str = str.replace(/hh|HH/,this.getHours()>9?(this.getHours().toString():'0'+this.getHours());
str = str.replace(/h|H/g,this.getHours());
str = str.replace(/mm/,this.getMinutes()>9?this.getMinutes().toString():'0'+this.getMinutes());
str = str.replace(/m/g,this.getMinutes());
str = str.replace(/ss|SS/,this.getSeconds()>9?this.getSeconds().toString():'0'+this.getgetSeconds());
str = str.replace(/s|S/g,this.getSeconds());
return str;
}
9、判斷是否為數(shù)字類型
function isDigit (value){
var patrn = /^[0-9]*$/;
if (patrn.exec(value) == null || value=="" ) {
return false;
} else {
return true;
}
}
10、設(shè)置cookie
function setCookie(name,value,Hours){
var d =new Date();
var offset =8;
var utc = d.getTime()+(d.getTimezoneOffset()*60000);
var nd = utc+(3600000*offset);
var exp = new Date(nd);
exp.setTime(exp.getTime()+Hours*60*60*1000);
document.cookie = name+"="+escape(value)+";domain=360doc.com;"
}
獲取cookie值
function getCookie(name){
var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
if (arr!=null){
return unescape(arr[2]);
}else {
return null;
}
}
11、加入收藏夾
function AddFavorite(sURL,sTitle) {
try{
window.external.addFavorite(sURL,sTitle);
}catch(e){
try{
window.sidebar.addPanel(sTitle,sURL,"");
}catch(e){
alert("加入收藏夾失敗,請使用Ctrl+D進行添加");
}
}
}
12、設(shè)為首頁
function setHomepage(){
if(document.all){
document.body.style.behavior='url(#default#homepage)';
document.body.setHomePage('http://w3cboy.com')
}else if (window.sidebar){
if(window.netscape){
try{
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect")
}catch(e){
alert("該操作被瀏覽器拒絕,如果想啟用該功能,請在地址欄內(nèi)輸入about:config,然后將
項 signed.applets.codebase_principal_support 值該為true");
}
}
var prefs = Components.classes['@mozilla.org/preferences- service;1'].getService(Components.interfaces.nsIPrefBranch);
prefs.setCharPref('browser.startup.homepage', 'http://w3cboy.com');
}
}
13、加載樣式文件
function LoadStyle(url) {
try {
document.createStyleSheet(url);
}
catch(e) {
var cssLink = document.createElement('link');
cssLink.rel = 'stylesheet';
cssLink.type = 'text/css';
cssLink.href = url;
var head = document.getElementsByTagName('head')[0];
head.appendChild(cssLink);
}
}
14、返回腳本內(nèi)容
function evalscript(s) {
if(s.indexOf('<script') == -1) return s;
var p = /<script[^\>]*?>([^\x00]*?)<\/script>/ig;
var arr = [];
while(arr = p.exec(s)) {
var p1 = /<script[^\>]*?src=\"([^\>]*?)\"[^\>]*?(reload=\"1\")?(?:charset=\"([\w\-]+?)\")?><\/script>/i;
var arr1 = [];
arr1 = p1.exec(arr[0]);
if(arr1) {
appendscript(arr1[1], '', arr1[2], arr1[3]);
} else {
p1 = /<script(.*?)>([^\x00]+?)<\/script>/i;
arr1 = p1.exec(arr[0]);
appendscript('', arr1[2], arr1[1].indexOf('reload=') != -1);
}
}
return s;
}
15、清除腳本內(nèi)容
function stripscript(s) {
return s.replace(/<script.*?>.*?<\/script>/ig, '');
}
16、動態(tài)加載腳本文件
function appendscript(src, text, reload, charset) {
var id = hash(src + text);
if(!reload && in_array(id, evalscripts)) return;
if(reload && $(id)) { $(id).parentNode.removeChild($(id));
}
evalscripts.push(id);
var scriptNode = document.createElement("script");
scriptNode.type = "text/javascript";
scriptNode.id = id;
scriptNode.charset = charset ? charset : (BROWSER.firefox ? document.characterSet : document.charset);
try {
if(src) {
scriptNode.src = src;
scriptNode.onloadDone = false;
scriptNode.onload = function () {
scriptNode.onloadDone = true;
JSLOADED[src] = 1;
};
scriptNode.onreadystatechange = function () {
if((scriptNode.readyState == 'loaded' || scriptNode.readyState == 'complete') && !scriptNode.onloadDone) {
scriptNode.onloadDone = true; JSLOADED[src] = 1;
}
};
} else if(text){
scriptNode.text = text;
}
document.getElementsByTagName('head')[0].appendChild(scriptNode);
} catch(e) {}
}
17、返回按ID檢索的元素對象
function $(id) {
return !id ? null : document.getElementById(id);
}
18、跨瀏覽器綁定事件
function addEventSamp(obj,evt,fn){
if(!oTarget){
return;
} if (obj.addEventListener) {
obj.addEventListener(evt, fn, false);
}else if(obj.attachEvent){
obj.attachEvent('on'+evt,fn);
}else{
oTarget["on" + sEvtType] = fn;
}
}
19、跨瀏覽器刪除事件
function delEvt(obj,evt,fn){ if(!obj){
return;
} if(obj.addEventListener){
obj.addEventListener(evt,fn,false);
}else if(oTarget.attachEvent){
obj.attachEvent("on" + evt,fn);
}else{
obj["on" + evt] = fn;
}
}
20、元素添加on方法
Element.prototype.on = Element.prototype.addEventListener;
NodeList.prototype.on = function (event, fn) {、
[]['forEach'].call(this, function (el) {
el.on(event, fn);
});
return this;
};
關(guān)于UI界面的切圖命名規(guī)范,U妹覺得關(guān)鍵是在于團隊能夠有一個統(tǒng)一的規(guī)則,所以這里只介紹一種通用的命名規(guī)則,當然大家也可以根據(jù)自己的實際情況去制定,這里只提供一種方法與思路,僅供參考。
規(guī)范的命名方式可以提高開發(fā)人員的的開發(fā)效率和整個開發(fā)團隊的友好合作。U妹覺得要盡可能用最少的字符而又能完整的表達標識符的含義。
一、切圖命名英文縮寫的3個原則
1.較短的單詞可以通過去掉“元音”形成縮寫
2.較長的單詞可去單詞的頭部幾個字母形成縮寫
3.還有一些約定成俗的英文單詞縮寫
二、命名規(guī)則
模塊_類別_功能_狀態(tài).png
U妹舉個例子:nav_button_search_default.png
釋義為:導(dǎo)航_按鈕_搜索_默認.png
啟動界面
啟動圖片 default.png
啟動logo default.png
如:default.png\defoult@2x.png\default-568@2x.png
登錄界面
登錄背景 login_bg.png
登錄logo login_logo.png
輸入框 login_input.png
輸入框選中狀態(tài) login_input_pre.png
登錄按鈕 login_btn.png
登錄按鈕選中狀態(tài) login_btn_pre.png
導(dǎo)航欄按鈕 (nav) 命名
nav_功能描述.png
如:nav_menu.png\nav_menu_pre.png(同按鈕選中前后兩種狀態(tài)命名 )
按鈕命名(btn可重復(fù)使用按鈕)
一般 normal btn_xxx_normal.png
點擊 highlight btn_xxx_highlight.png
不能點擊 disabled btn_xxx_disable.png
按下 pressed btn_xxx_pressed.png
選中 selected btn_xxx_selected.png 做為復(fù)數(shù)選擇出現(xiàn)機會不高
btn_功能屬性或色彩均可.png
如:btn_blue.png\btn_blue.9.png 藍色按鈕
其他命名
圖標 icon_xxx.png
圖片 pic_xxx.png或是img_xxx.png
照片 pho_xxx.png
左側(cè)導(dǎo)航 命名 leftbar_功能描述.png
如:leftbar_info.png\leftbar_info_pre.png 個人中心
底部選項卡按鈕(TabBar)
命名 Tab_功能描述.png
如:tab_set.Png\nav_set_pre.png 設(shè)置
主頁命名
命名 home_功能屬性+描述.png
如:home_menu_recommended.png 熱門推薦
ps:描述可用英文或拼間開頭字母組合等
列表頁命名規(guī)則
命名 List_功能屬性+描述.png
如:list_menu_collect.png 列表頁收藏按鈕
UI文件命名規(guī)范常用詞
常用狀態(tài)
正常 normat
按下 pressed
選中 selected
禁用 disabled
已訪問 visited
懸停 hover
控件&部件
控件:較獨立的可操作界面元素
部件:描述屬于某控件一部分
按鈕(可點) Btn
圖標 Icon不可點、非點擊主體、圖案部件
標記 Sign 列表
List 菜單 Menu
視圖 View
面板 Panel
薄板 Sheet
底部彈出菜單 欄 Bar
狀態(tài)欄 StatusBar
導(dǎo)航欄 NaviBar
標簽欄 TabBar
工具欄 ToolBar
切換開關(guān) Switch
滑動器 Slider
單選框 Radio
復(fù)選框 CheckBox
背景 Bg
蒙版、遮罩 Mask
收藏 collect
評論 comment
廣告 ad
時間 time
音頻 audio
視頻 viedio
不喜歡 dilike
用戶 user
首頁 hone
排名 ranked
搜索 search
標志 logo
進度條 progress bar
默認圖片 def_
分隔圖片 seg_
選擇 sel_
關(guān)閉 close
返回 back
編輯 eidt
內(nèi)容 content
左 中 右 left center right
提示信息 msg
個人資料 porfile
彈出 pop
刪除 delete
下載 download
登錄 login
注冊 regsiter
標題title
注釋 note
鏈接 link
圖片 image(img)
刷新 refresh
常用補充描述
頂部 Top
中間 Middle
底部 Bottom
第一 First
第二 Second
最后 Last
頁頭 Header
頁腳 Footer
web前端開發(fā)工程是是一個很新的職業(yè),在國內(nèi)乃至國際上真正開始受到重視的時間不超過五年。web前端開發(fā),是從網(wǎng)頁制作演變而來的,名稱上有很明顯的時代特征。隨著人們對用戶體驗的要求越來越高,前端開發(fā)的技術(shù)難度越來越大,web前端開發(fā)工程師這一職業(yè)終于從設(shè)計和制作不分的局面中獨立出來。
早期的前端其實就是table布局,后來發(fā)展到所謂的div+css網(wǎng)站重構(gòu),再到現(xiàn)在的讓人眼花繚亂的各種各樣的新技術(shù),web前端技術(shù)發(fā)展是非常快速的,因此選擇了前端這個行業(yè)就意味著不停的學習吧。讓我們先看看張克軍繪制的前端知識體系結(jié)構(gòu):
前端開發(fā)的核心是HTML+CSS+JavaScript。本質(zhì)上他們構(gòu)成了一個MVC框架,即HTML作為信息模型(Model),css控制樣式(View),JavaScript負責調(diào)度數(shù)據(jù)和實現(xiàn)某種展現(xiàn)邏輯(Controller)。
HTML
1.標簽的分類,
2.標簽表示一個元素
3.按性質(zhì)分類:block-level 和 inline-level
4.按語義分類:
Headings:h1,h2,h3,h4,h5,h6
paragraphs:p
Text formatting:em,strong,sub,del,ins,small
Lists:ul,li,ol,dl,dt,dd
Tables:table,thead,tbody,tr,th,td
Forms and input: form,input,select,textarea
Others:div,span,a,img,<!---->
HTML5:header,footer,article,section
XHTML
XHTML于2000年的1月26日成為W3C標準。W3C將XHTML定義為的HTML版本,XHTML將逐漸取代HTML。XHTML是通過把HTML和XML各自的長處加以結(jié)合形成的。XHTML語法規(guī)則如下:
屬性名和標簽名稱必須小寫
屬性值必須加引號
屬性不能簡寫
用ID屬性代替name屬性
XHTML元素必須被正確地嵌套
XHTML元素必須被關(guān)閉
標簽語義化
為表達語義而標記文檔,而不是為了樣式,結(jié)構(gòu)良好的文檔可以向瀏覽器傳達盡可能多的語義,不論是瀏覽器位于掌上電腦還是時髦的桌面圖形瀏覽器。結(jié)構(gòu)良好的文檔都能向用戶傳達可視化的語義即使是在老的瀏覽器,或是在被用戶關(guān)閉了CSS的現(xiàn)代瀏覽器中。同時結(jié)構(gòu)良好的HTML代碼也有助于搜索引擎索引你的網(wǎng)站。
不要使用table布局,table是用來表格顯示的。
不要到處濫用div標簽,div是用來分塊用的。
不要使用樣式標簽,如font,center,big,small,b,i,樣式可以用CSS來控制,b和i可以用strong和em來代替。
不要使用換行標簽<br />和空格來控制樣式,請用CSS。
盡量不要使用內(nèi)聯(lián)CSS
CSS
1.css基礎(chǔ)知識
層疊和繼承
優(yōu)先級
盒模型
定位
浮動
2.css進階
css sprite
瀏覽器兼容性
IE haslayout和block format content
css frameworks
css3
css性能優(yōu)化
less and sass
css sprite主要用于前端性能優(yōu)化的一種技術(shù),原理是通過多張背景圖合成在一張圖片上從而減少http請求,加快載入速度。
瀏覽器兼容性
絕大部分情況下,我們需要考慮瀏覽器的兼容性,目前正在使用的瀏覽器版本非常多,IE6,IE7,IE8,IE9,IE10,Chrome,F(xiàn)irefox,Safari。
IE haslayout和block format content
IE haslayout是一個Internet explore for Windows的私有概念,他決定了一個元素如何顯示以及約束其包含的內(nèi)容、如何與其他元素交互和建立聯(lián)系、如何響應(yīng)和傳遞應(yīng)用程序事件、用戶事件等。而有些HTML元素則默認就有l(wèi)ayout。目前只有IE6和IE7有這個概念。BFC是W3C css2.1規(guī)范中的一個概念,他決定了元素如何應(yīng)對其內(nèi)容進行定位。以及與其他元素的關(guān)系和相互作用。這個其實和瀏覽器的兼容性有關(guān),因為決大部分的兼容性問題都是他們引起的。參考:css BFC和IE haslayout介紹。
css framework
css框架是一系列css文件的集合體,包含了基本的元素重置,頁面排版、網(wǎng)格布局、表單樣式,通用規(guī)則等代碼塊,用于簡化web前端開發(fā)的工作,提高工作效率。目前常見框架有:
960 grid system
blueprint css
bluetrip
minimum page
還是一個比較出名的和特殊的框架是Twitter的bootstrap,bootstrap是快速開發(fā)web應(yīng)用程序前端的工具包。它是一個css和HTML的集合,它使用了的瀏覽器技術(shù),給你的web開發(fā)提供了時尚的版式,表單,buttons,表格,網(wǎng)格系統(tǒng)等等。它是基于less開發(fā)的,不支持IE6,在IE7和IE8里效果也不咋地。
css3
雖然css3還沒有正式成為標準,但是IE9+,Chrome,F(xiàn)irefox等現(xiàn)代瀏覽器都支持css3。css3提供了好多以前需要用JavaScript和切圖才能搞定的功能,目前主要功能更有:圓角、多背景、@font-face、動畫與漸變、漸變色、box陰影、RGBa-加入透明色、文字陰影。
css性能優(yōu)化
css代碼是控制頁面顯示樣式與效果的最直接“工具” ,但是在性能調(diào)優(yōu)時他們通常會被web開發(fā)工程師所忽略,而事實上不規(guī)范的css會對頁面渲染的效率有嚴重影響,尤其是對于結(jié)構(gòu)復(fù)雜的web2.0頁面,這種影響更是不可磨滅的。所以,寫出規(guī)范的、高性能的css代碼會極大地提高應(yīng)用程序的效率。
less and sass
less和sass都是css預(yù)處理器,用來為css增加一些編輯的特性,無需考慮瀏覽器的兼容問題,例如你可以在css中使用變量、簡單的程序邏輯、函數(shù)等等在編程語言中的一些基本技巧,可以讓你的css更加簡潔。適應(yīng)性更強,代碼更直觀等諸多好處。
sass基于ruby開發(fā),less既可以在客戶端運行,也可以借助node.js或者rhino在服務(wù)器端運行。
話不多說,先上代碼:
for(var j=0;j<10;J++){
setTimeout(function(){console.log(j);},5000)
}
看到這三行代碼,你也許會不耐煩道:又要講閉包?要吐槽了好么?別急,讓我們先來思考一下,這段代碼在瀏覽器中的執(zhí)行結(jié)果是什么?
<!-- more -->
甲:順序打印0到9?
乙:這題我見過,打印十個10!
哪個答案正確?
執(zhí)行結(jié)果顯示,瀏覽器打印出十個10,貌似乙對了,但是如果你足夠細心,你會發(fā)現(xiàn)幾個問題:為什么會循環(huán)打印十個10,而不是0到9?
從結(jié)果來看,for循環(huán)執(zhí)行完跳出之后,才開始執(zhí)行setTimeout(所以j才等于10),為什么不是每次迭代都執(zhí)行一次setTimeout呢?
1、為什么會循環(huán)打印十個10?
許多人習慣用第二個問題中的執(zhí)行結(jié)果來回答這個問題:“for循環(huán)執(zhí)行完畢跳出之后才開始執(zhí)行setTimeout,所以才打印了十個10”。這樣的答案,只能說是既應(yīng)付了自己,又應(yīng)付了別人。其實,要解答第一個問題,首先要解答第二個問題。
2、為什么不是每一次迭代都執(zhí)行一次setTimeout?
大家都知道,JavaScript在ES6出現(xiàn)以前,是沒有塊狀作用域的,這就意味著,在for循環(huán)中用var定義的變量j,其實是屬于全局的,那其實整個全局作用域中只有一個j,每次for循環(huán)都是更新這個j。
那么現(xiàn)在的關(guān)鍵問題在于,為什么整個for循環(huán)會先于setTimeout執(zhí)行,而不是我們正常理解的,一次迭代執(zhí)行一次。這就涉及到了JavaScript的核心特性:單線程。
JavaScript設(shè)計的初衷,是瀏覽器用來與用戶進行交互和DOM操作的,這就決定了它必須是單線程的。設(shè)想JavaScript同時有兩個線程,一個線程在DOM節(jié)點內(nèi)添加內(nèi)容,一個線程刪除該節(jié)點,瀏覽器就會出現(xiàn)混亂。所以,為了避免復(fù)雜性,從一誕生,JavaScript就是單線程,這已經(jīng)成為了這門語言的核心特征,將來也不會改變。
單線程就意味著,所有任務(wù)需要排隊,前一個任務(wù)結(jié)束,才會執(zhí)行下一個任務(wù),如果前一個任務(wù)耗時很長,后一個任務(wù)就不得不一直等著。
為了優(yōu)化單線程的性能,JavaScript將任務(wù)分成兩種,一種是同步任務(wù)(synchronous),另一種是異步任務(wù)(asynchronous)。同步任務(wù)指的是,在主線程上排隊執(zhí)行的任務(wù),只有前一個任務(wù)執(zhí)行完畢,才能執(zhí)行后一個任務(wù);異步任務(wù)指的是,不進入主線程,而進入“任務(wù)隊列(task queue)”的任務(wù),只用主線程中的同步任務(wù)執(zhí)行完畢,異步任務(wù)才會進入執(zhí)行隊列執(zhí)行。只要主線程空了,就會去讀取“任務(wù)隊列”,這就是JavaScript的運作機制。這個過程會不斷重復(fù)。
而setTimeout就被JavaScript定義為異步任務(wù)。每次for循環(huán)的迭代,都將setTimeout中的回調(diào)函數(shù)加入任務(wù)隊列等待執(zhí)行。也就是說,只有同步任務(wù)中的for循環(huán)完全結(jié)束,主線程中才會去任務(wù)列表中找到尚未執(zhí)行的十個setTimeout(十次迭代)回調(diào)函數(shù)并順序執(zhí)行(先進先出)。而此時,j已經(jīng)經(jīng)過循環(huán)結(jié)束變成了10,所以此時主線程執(zhí)行的,是十個一模一樣的打印i的回調(diào)函數(shù),即打印十個10,。至此完美回答了第一和第二個問題,文章開頭的代碼與下面的代碼其實是等價的:
for(var i=0;i<10;i++){
setTimeout(console.log(i),5000);
setTimeout(console.log(i),5000);
setTimeout(console.log(i),5000);
setTimeout(console.log(i),5000);
setTimeout(console.log(i),5000);
setTimeout(console.log(i),5000);
setTimeout(console.log(i),5000);
setTimeout(console.log(i),5000);
setTimeout(console.log(i),5000);
setTimeout(console.log(i),5000);
}
小小的一個setTimeout,牽扯出了很多JavaScript的深層次問題,可見JavaScript還有許多地方是值得深入探究的。
阿里巴巴_BBC_UED 王萌:無論你是設(shè)計、用研還是產(chǎn)品,如何把復(fù)雜籠統(tǒng)的問題拆解成一個個小的、可執(zhí)行開展的問題,都是一項必不可少的能力,今天阿里這篇好文幫你迅速掌握起來!
在一秒鐘內(nèi)看到本質(zhì)的人和花半輩子也看不清一件事本質(zhì)的人,自然是不一樣人生。——電影《教父》 本文沒辦法幫你一秒鐘看清人/事,而且也不奢望能做到,但希望能和大家一起朝這個方向做些努力。
編者按:可能有敏銳的同學已經(jīng)意識到了,現(xiàn)在很多公司招人,職位都叫產(chǎn)品設(shè)計師,簡言之就是既要會界面設(shè)計,更要懂交互、產(chǎn)品等,這也給一心鉆研精美圖標和酷炫動效的同學提個醒,未來UI設(shè)計師與交互的界限會越來越模糊,不想提前退休,可別光顧著折騰軟件,好好讀下今天這4個建議。
編者按:今天這篇推薦一下,聊的是用戶體驗中最讓人揪心的三個流程:授權(quán)征詢、注冊與加載等待。作者總結(jié)了不少實用的方法,能夠迅速地提高這三個方面的體驗,建議學習 >>>
Lina:訪談是定性研究中最基礎(chǔ)的方法。相對于分析客觀數(shù)據(jù)的定量研究方法,不論是一對一的深度訪問還是一對多的座談會,都會產(chǎn)生研究人員與用戶的互動,而互動關(guān)系會極大影響到訪談的質(zhì)量和效果。
很多人認為訪談就是“問答”,研究人員按照研究目的設(shè)定一系列的問題,通過詢問用戶,獲得相應(yīng)的答案,看上去似乎比定量研究簡單許多。然而事實上并非如此。訪談是需要對用戶的態(tài)度及行為做研究分析,而出于每個人的自我防御心理,用戶很難將自己真實的想法告訴研究人員。如何獲得用戶真實的情感態(tài)度,是非常考驗每一位研究者研究技術(shù)的地方。下面就結(jié)合之前的項目經(jīng)歷,跟大家探討一下訪談技巧的問題。
互聯(lián)網(wǎng)時代的成功故事里,機遇和運氣是增添它們傳奇色彩的決定性因素。一個零售企業(yè)適逢互聯(lián)網(wǎng)萌芽,在90年代這個網(wǎng)絡(luò)拓荒期逐漸膨脹成為響徹北美的互聯(lián)網(wǎng)巨頭,這是亞馬遜的故事。而Facebook的開頭則更有意思一些,校園創(chuàng)業(yè),友情與背叛,在移動端設(shè)備過度階段引領(lǐng)社交網(wǎng)絡(luò)變革,成就了另外一個走上互聯(lián)網(wǎng)時代的年輕富豪。
藍藍設(shè)計的小編 http://www.yn-ups.com