一個(gè)JS效果竟然要研究一天奖地,我是不是不適合做前端橄唬?



前言

今天這篇文章的標(biāo)題,顯然是要搞事情参歹。一個(gè)JS交互效果仰楚,居然花費(fèi)了一天的寶貴時(shí)間才研究出來,我是不是不太適合做前端犬庇?

別急僧界,搬好小板凳,正文從這開始~

本來今天下班回來感覺有點(diǎn)累臭挽,想著今天就別學(xué)了吧捂襟,正好看見停播了好久的《極限挑戰(zhàn)》在網(wǎng)上放出了最新的一期。但是欢峰,今天發(fā)生在公司的一件小事兒葬荷,在我心里產(chǎn)生了不小的波瀾涨共,正好拿這個(gè)話題跟同行們聊聊.....

今天早晨我按時(shí)去了公司,坐在我的工位上宠漩,習(xí)慣性地點(diǎn)開了編輯器SublimeText(我寵幸了它三年之久~)举反,一天的編碼工作正式開始。

我的大腦高速運(yùn)轉(zhuǎn)扒吁,回憶了下昨天下班前的進(jìn)度火鼻,以及要修改的bug,一個(gè)是替換iconfont字體圖標(biāo)的問題雕崩,一個(gè)是編寫官網(wǎng)首頁通用導(dǎo)航欄鼠標(biāo)hover的交互效果魁索,我估摸著上午先把這兩個(gè)問題解決了,下午再忙其他的任務(wù)晨逝。

不一會(huì)兒蛾默,iconfont的替換工作就完成了。緊接著就是導(dǎo)航欄mouse over 的特效編寫捉貌,殊不知支鸡,就是這個(gè)效果,讓原本計(jì)劃上午完成的事情趁窃,愣是被我研究了大半天才解決牧挣。二話不說,直接上圖:

我先給大家說下這里要實(shí)現(xiàn)的效果醒陆,就是當(dāng)鼠標(biāo)移入導(dǎo)航欄的某個(gè)欄目時(shí)瀑构,頂部的4px 的藍(lán)色滑動(dòng)條要尾隨著鼠標(biāo),如絲般順滑地滑入相應(yīng)欄目的頂部位置刨摩,當(dāng)鼠標(biāo)leave時(shí)寺晌,藍(lán)色滑動(dòng)條要退回到當(dāng)前current的欄目頂部。

剛開始我的布局是澡刹,導(dǎo)航欄是一個(gè)ul呻征,ul下面有八個(gè)li,分別是八個(gè)欄目罢浇。在每個(gè)li的頂部設(shè)置一個(gè)border-top: 4px solid #2ea0ff陆赋;html結(jié)構(gòu)如下:



我的初步設(shè)想是,先隱藏這個(gè)border-top嚷闭,然后當(dāng)鼠標(biāo)移入的時(shí)候攒岛,再顯示出來。代碼如下:




任何效果都是經(jīng)過一步一步思考打磨出來的胞锰,不可能是一蹴而就灾锯。就比如這個(gè)例子,學(xué)過jQuery的同學(xué)都知道嗅榕,這個(gè)效果就是很生硬的顯示一條頂部邊框顺饮,然后隱藏色乾,沒有動(dòng)畫的效果。但是jQuery的動(dòng)畫api辣么多领突,什么slideDown、slideUp案怯、fadeIn君旦、fadeOut、animate......



(默默地給@愚人碼頭打了個(gè)廣告)

于是嘲碱,我對(duì)代碼進(jìn)行了第二波改造金砍,加上了動(dòng)畫效果,以下是debug現(xiàn)場(chǎng)重現(xiàn):



預(yù)期的效果在瀏覽器上渲染出來麦锯,此時(shí)已經(jīng)有了動(dòng)畫恕稠。但是,這還不是我想要的那個(gè)效果扶欣,后來我又想了一招鹅巍,可以在每個(gè)li里添加一個(gè)span,設(shè)置為絕對(duì)定位料祠,width默認(rèn)為0骆捧,然后animate的時(shí)候,讓它過渡到li的寬度髓绽。

嗯敛苇,這個(gè)想法不錯(cuò),有點(diǎn)接近我心中的那個(gè)效果了顺呕。于是枫攀,我又折騰了一番:



這回終于有點(diǎn)樣子了,只不過還是每個(gè)li都有一個(gè)自己的滑動(dòng)條株茶,而領(lǐng)導(dǎo)的意思是導(dǎo)航欄頂部只有一條公用的4px的藍(lán)色滑動(dòng)條来涨,鼠標(biāo)移入時(shí)來回切換。

此時(shí)忌卤,已將近中午扫夜,我debug 的幕后過程其實(shí)更加艱辛,不像我現(xiàn)在寫文字時(shí)那么輕描淡寫驰徊。而我旁邊的同事說笤闯,看你折騰來折騰去的,干嘛那么辛苦棍厂,去網(wǎng)上找個(gè)插件就好了颗味,省時(shí)省力。

當(dāng)時(shí)牺弹,我只能苦笑浦马,因?yàn)榍靶┤兆游腋曨l里寫過這個(gè)例子时呀,不過時(shí)間隔的有點(diǎn)久,我自己想不起當(dāng)時(shí)的邏輯了晶默。

下午又研究了大半天谨娜,突然靈光一現(xiàn),想到了一招磺陡,可以在ul的外層包一層div趴梢,和ul同級(jí)新增一個(gè)span元素,這個(gè)span就是那個(gè)公用的藍(lán)色滑動(dòng)條币他。然后給父元素設(shè)置為相對(duì)位置坞靶,給span設(shè)置為絕對(duì)位置。然后根據(jù)鼠標(biāo)移入的li的索引蝴悉,計(jì)算出span要滑動(dòng)的距離彰阴,這個(gè)距離就等于li的width乘以移入li的index的值,再加上每個(gè)li之間的間距拍冠。還是趕緊貼上html結(jié)構(gòu):



中途因?yàn)閘i的index索引停滯了好一陣子尿这,因?yàn)閕ndex值取不到。于是倦微,我又用原生javascript寫了一遍妻味,還是取不到值,然后又改回來jquery的寫法欣福。在經(jīng)過多次翻閱jquery的api文檔责球,多次試錯(cuò)之后,終于效果寫出來了拓劝,以下是最終的業(yè)務(wù)代碼:




在這里雏逾,我先解釋下:

第一步,通過filter方法篩選出className為current的li郑临,獲得它的index栖博,然后賦值給變量currentNum;

第二步厢洞,在瀏覽器刷新時(shí)初始化滑動(dòng)條sliderBar的位置到指定的欄目上仇让;

第三步,利用hover方法監(jiān)控鼠標(biāo)移入移出的效果躺翻,從而改變sliderBar的left的值丧叽,達(dá)到滑動(dòng)的動(dòng)畫效果。其中公你,stop()方法是為了解決動(dòng)畫隊(duì)列的問題踊淳。

以上就是我debug的過程,雖然浪費(fèi)了一些時(shí)間陕靠,但是好歹問題解決了迂尝。如果你要問我脱茉,你哪來那么大的勇氣,去死磕這個(gè)效果(bug)垄开?我會(huì)告訴你琴许,如果擱以前,我可能會(huì)在網(wǎng)上找個(gè)插件了事溉躲,因?yàn)樵谡劦絡(luò)avascript業(yè)務(wù)邏輯開發(fā)這塊虚吟,我承認(rèn)還是有不小的差距。

但是签财,今年我開始認(rèn)真的研究了紅皮書,也就是《JavaScript高級(jí)程序設(shè)計(jì)》這本被奉為經(jīng)典的JS書籍偏塞。在經(jīng)過不斷的拜讀和敲代碼唱蒸,現(xiàn)在我對(duì)自己的原生JS這塊逐漸有了些許自信,明白了它的一些底層原理和概念設(shè)計(jì)灸叼。以前是只會(huì)照葫蘆畫瓢神汹,現(xiàn)在也有了點(diǎn)知其然,更知其所以然的味道古今。

正是通過對(duì)基礎(chǔ)的夯實(shí)屁魏,我才有了莫名的勇氣去死磕這些開發(fā)中遇到的各種疑難雜癥。

感謝老鐵們不厭其煩的看我debug思維重現(xiàn)到這里捉腥,其實(shí)氓拼,閏土也是想借著這個(gè)事兒想跟大家說,前端基礎(chǔ)真的很重要抵碟,尤其是JS桃漾!如果你基礎(chǔ)不牢靠,一味的追逐熱門框架拟逮,看似解決了工作上的一些問題撬统。但回頭想想,你的這種技術(shù)邏輯還沒有形成自己的知識(shí)體系敦迄,它是松散的恋追,是畸形的,是根基不牢靠的罚屋。學(xué)好基礎(chǔ)再去學(xué)框架苦囱,會(huì)事半功倍,游刃有余沿后。如果基礎(chǔ)沒打好沿彭,不注重底層原理,你的前端路注定走不遠(yuǎn)尖滚。

因?yàn)榻鉀Q一個(gè)bug喉刘,浪費(fèi)了一些時(shí)間瞧柔,看似得不償失,但是搞出來就算牛逼睦裳。最起碼等你以后當(dāng)老大了造锅,別人問你,你就知道怎么解決廉邑,自己踩過的坑哥蔚,印象最深。而不是說蛛蒙,以前有人幫我解決過糙箍,現(xiàn)在忘了。

所以說牵祟,實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)深夯。網(wǎng)上很多文章寫的有好有壞,自己去動(dòng)手debug或者是實(shí)踐一下诺苹,得出自己的結(jié)論才是靠譜的咕晋。

后記

凌晨1點(diǎn),夜已深收奔,估計(jì)大家看到這篇文章的推送掌呜,已是明早上班趕路時(shí)。臨睡之前坪哄,閏土送大家一句話:別人也沒有多牛逼质蕉,你也可以在你的領(lǐng)域,開辟天地翩肌。

聲明

歡迎轉(zhuǎn)載饰剥,請(qǐng)注明出處和作者,同時(shí)保留聲明摧阅。

作者:閏土少年

出處:http://www.cnblogs.com/running-runtu/

本博客的文章如無特殊說明汰蓉,均為原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處棒卷。如未經(jīng)作者同意必須保留此段聲明顾孽,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利比规。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末若厚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蜒什,更是在濱河造成了極大的恐慌测秸,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異霎冯,居然都是意外死亡铃拇,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門沈撞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慷荔,“玉大人,你說我怎么就攤上這事缠俺∠跃В” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵壹士,是天一觀的道長磷雇。 經(jīng)常有香客問我,道長躏救,這世上最難降的妖魔是什么倦春? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮落剪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘尿庐。我一直安慰自己忠怖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布抄瑟。 她就那樣靜靜地躺著凡泣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪皮假。 梳的紋絲不亂的頭發(fā)上鞋拟,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音惹资,去河邊找鬼贺纲。 笑死,一個(gè)胖子當(dāng)著我的面吹牛褪测,可吹牛的內(nèi)容都是我干的猴誊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼侮措,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼懈叹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起分扎,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤澄成,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體墨状,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卫漫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了歉胶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汛兜。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖通今,靈堂內(nèi)的尸體忽然破棺而出粥谬,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布狼荞,位于F島的核電站圾另,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏掺喻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一储矩、第九天 我趴在偏房一處隱蔽的房頂上張望感耙。 院中可真熱鬧,春花似錦持隧、人聲如沸即硼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽只酥。三九已至,卻和暖如春呀狼,著一層夾襖步出監(jiān)牢的瞬間裂允,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國打工哥艇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绝编,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓貌踏,卻偏偏與公主長得像瓮增,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子哩俭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,077評(píng)論 25 707
  • <a name='html'>HTML</a> Doctype作用绷跑?標(biāo)準(zhǔn)模式與兼容模式各有什么區(qū)別? (1)、<...
    clark124閱讀 3,474評(píng)論 1 19
  • 一谬运、關(guān)于“優(yōu)先窗口”的現(xiàn)狀 前幾天去醫(yī)院,等候大廳里坐滿了人垦藏,他們都領(lǐng)取了排隊(duì)號(hào)碼梆暖,坐在那里,等候電子呼叫器挨個(gè)叫...
    YancyShen閱讀 2,687評(píng)論 0 1
  • 你問我 什么是人生掂骏? 嗯…… 一轰驳, 爬 二, 攀爬 三弟灼, 爬上爬下 還問级解? 那我委婉地告訴你 還是…… 爬
    火星鵬閱讀 289評(píng)論 2 2
  • 文/高毅先生 我勤哗, 甚至都不懷疑, 時(shí)間會(huì)像夢(mèng)境一樣扯著我的白襯衣掩驱, 即便是脫了線它都要不離不棄芒划。 我, 用灰暗點(diǎn)...
    覺己閱讀 283評(píng)論 0 3