純js實(shí)現(xiàn)手風(fēng)琴效果代碼
我知道現(xiàn)在大多數(shù)前端開發(fā)人員都在使用jQuery等第三方的庫來進(jìn)行開發(fā),這不僅節(jié)約了時(shí)間,也讓效率大大的提高,并讓公司的效益增加,何樂而不為呢?
但是,這也會(huì)有一定的缺點(diǎn),比如jQ比js慢,尤其在大型項(xiàng)目中就會(huì)顯現(xiàn)出來,下面我用原生js實(shí)現(xiàn)一個(gè)簡單的手風(fēng)琴效果效果。
HTML代碼如下
結(jié)構(gòu)非常簡單就5個(gè)li盒子,js代碼會(huì)渲染圖片上去
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <div id="box"> <ul> <li></li> <li></li> <li></li> <li></li> <li></li> </ul> </div> </body> </html>
CSS代碼如下:
寬高請(qǐng)自行設(shè)置,我之前做的這個(gè)項(xiàng)目圖片是1226*446的圖片,所以寬度和高度是按照當(dāng)時(shí)做項(xiàng)目的時(shí)候設(shè)置的,如果你想放置其他尺寸的圖片請(qǐng)按照實(shí)際情況設(shè)施...
ul { list-style: none } * { margin: 0; padding: 0; } div { width: 1150px; height: 400px; margin: 50px auto; border: 1px solid red; overflow: hidden; } div li { width: 240px; height: 400px; float: left; /*background-image: url(images/1.jpg);*/ } div ul { width: 1300px; }
下面是重頭戲啦,請(qǐng)欣賞原生js(相信很多人都快忘了原生js吧)
//找人 var box = document.getElementById("box"); var ul = box.children[0]; var lis = ul.children; //循環(huán)遍歷 lis 綁定背景圖 for (var i = 0; i < lis.length; i++) { lis[i].style.backgroundImage = "url(images/" + (i + 1) + ".jpg)"; //給每一個(gè)li注冊(cè)鼠標(biāo)經(jīng)過事件 鼠標(biāo)經(jīng)過后要排他 lis[i].onmouseover = function () { //干掉所有人 讓所有人的寬度 漸漸地 變?yōu)?00 for (var j = 0; j < lis.length; j++) { animate(lis[j], {"width": 100}); } //留下我自己 讓我的寬度 漸漸地 變?yōu)?00 animate(this, {"width": 800}); }; } //鼠標(biāo)離開box 所有的li寬度 漸漸地 變?yōu)?40 box.onmouseout = function () { for (var i = 0; i < lis.length; i++) { animate(lis[i], {"width": 240}); } }; //jQuery中有animate動(dòng)畫函數(shù),下面是實(shí)現(xiàn)的原理,雖然沒有jQ的強(qiáng)大,但是基本的效果實(shí)現(xiàn)還是沒有問題的 function animate(obj, json) { clearInterval(obj.timer); obj.timer = setInterval(function () { //先假設(shè) 這一次執(zhí)行完 所有的屬性都到達(dá)目標(biāo)了 var flag = true; for (var k in json) { var leader = parseInt(getStyle(obj, k)) || 0; var target = json[k]; var step = (target - leader) / 10; step = step > 0 ? Math.ceil(step) : Math.floor(step); leader = leader + step; obj.style[k] = leader + "px"; //if (leader === target) { // clearInterval(obj.timer); //} console.log("代碼還在運(yùn)行"); if (leader != target) { flag = false;//告訴標(biāo)記 當(dāng)前這個(gè)屬性還沒到達(dá) } } //如果此時(shí)仍然為true 就說明真的都到達(dá)了 if (flag) { clearInterval(obj.timer); } }, 15); } //全部屬性都到達(dá)目標(biāo)值才能清空 function getStyle(obj, attr) { if (window.getComputedStyle) { return window.getComputedStyle(obj, null)[attr]; } else { return obj.currentStyle[attr]; } }
上面就是所有的代碼,你可以找五張圖片試一試。
實(shí)際開發(fā)中效率還是最重要的,因?yàn)楝F(xiàn)在瀏覽器的性能已經(jīng)非常好了,所以jQ的有些缺點(diǎn)完全可以忽略不計(jì)啦,并且jQ的兼容性真的是不錯(cuò)的,能節(jié)省開發(fā)人員很多的時(shí)間和精力,我也很支持在工作項(xiàng)目中用jQ來開發(fā),可是作為一個(gè)真正的前端技術(shù)人員,你要時(shí)刻了解底層代碼的實(shí)現(xiàn),這樣隨著科技的發(fā)展,你也不會(huì)落于人后。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 使用ReactJS實(shí)現(xiàn)tab頁切換、菜單欄切換、手風(fēng)琴切換和進(jìn)度條效果
- js實(shí)現(xiàn)簡單的手風(fēng)琴效果
- 原生js做的手風(fēng)琴效果的導(dǎo)航菜單
- Vue.js手風(fēng)琴菜單組件開發(fā)實(shí)例
- js實(shí)現(xiàn)可折疊展開的手風(fēng)琴菜單效果
- 純js實(shí)現(xiàn)手風(fēng)琴效果
- JS實(shí)現(xiàn)圖片手風(fēng)琴效果
- 原生JS實(shí)現(xiàn)垂直手風(fēng)琴效果
- Html5 js實(shí)現(xiàn)手風(fēng)琴效果
- js實(shí)現(xiàn)簡單手風(fēng)琴效果
相關(guān)文章
JS實(shí)現(xiàn)的手機(jī)端精簡幻燈片效果
這篇文章主要介紹了JS實(shí)現(xiàn)的手機(jī)端精簡幻燈片效果,涉及javascript結(jié)合時(shí)間函數(shù)動(dòng)態(tài)修改頁面元素的相關(guān)技巧,需要的朋友可以參考下2016-09-09JS request函數(shù) 用來獲取url參數(shù)
項(xiàng)目中經(jīng)常會(huì)遇到這種問題 下面代碼解決問題!2010-05-05js判斷請(qǐng)求的url是否可訪問,支持跨域判斷的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄猨s判斷請(qǐng)求的url是否可訪問,支持跨域判斷的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09通過實(shí)例理解javascript中沒有函數(shù)重載的概念
這篇文章主要介紹了通過實(shí)例理解javascript中沒有函數(shù)重載的概念,十分的簡單易懂,需要的朋友可以參考下2015-06-06JS遍歷JSON數(shù)組及獲取JSON數(shù)組長度操作示例【測試可用】
這篇文章主要介紹了JS遍歷JSON數(shù)組及獲取JSON數(shù)組長度操作,涉及javascript簡單json數(shù)組遍歷與運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2018-12-12實(shí)現(xiàn)兩個(gè)文本框同時(shí)輸入的實(shí)例
下面小編就為大家?guī)硪黄獙?shí)現(xiàn)兩個(gè)文本框同時(shí)輸入的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09