纯js实现手风琴效果代码


Posted in Javascript onApril 17, 2020

我知道现在大多数前端开发人员都在使用jQuery等第三方的库来进行开发,这不仅节约了时间,也让效率大大的提高,并让公司的效益增加,何乐而不为呢?

但是,这也会有一定的缺点,比如jQ比js慢,尤其在大型项目中就会显现出来,下面我用原生js实现一个简单的手风琴效果效果。

 HTML代码如下 

结构非常简单就5个li盒子,js代码会渲染图片上去

<!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代码如下:

宽高请自行设置,我之前做的这个项目图片是1226*446的图片,所以宽度和高度是按照当时做项目的时候设置的,如果你想放置其他尺寸的图片请按照实际情况设施...

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;

}

下面是重头戏啦,请欣赏原生js(相信很多人都快忘了原生js吧)

//找人
var box = document.getElementById("box");
var ul = box.children[0];
var lis = ul.children;

//循环遍历 lis 绑定背景图

for (var i = 0; i < lis.length; i++) {
 lis[i].style.backgroundImage = "url(images/" + (i + 1) + ".jpg)";

 //给每一个li注册鼠标经过事件 鼠标经过后要排他

 lis[i].onmouseover = function () {

  //干掉所有人 让所有人的宽度 渐渐地 变为100

  for (var j = 0; j < lis.length; j++) {
   animate(lis[j], {"width": 100});
  }

  //留下我自己 让我的宽度 渐渐地 变为800

  animate(this, {"width": 800});
 };
}

//鼠标离开box 所有的li宽度 渐渐地 变为240

box.onmouseout = function () {
 for (var i = 0; i < lis.length; i++) {
  animate(lis[i], {"width": 240});
 }
};

//jQuery中有animate动画函数,下面是实现的原理,虽然没有jQ的强大,但是基本的效果实现还是没有问题的

function animate(obj, json) {
 clearInterval(obj.timer);
 obj.timer = setInterval(function () {

  //先假设 这一次执行完 所有的属性都到达目标了

  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("代码还在运行");
   if (leader != target) {

    flag = false;//告诉标记 当前这个属性还没到达

   }
  }

  //如果此时仍然为true 就说明真的都到达了

  if (flag) {
   clearInterval(obj.timer);
  }
 }, 15);
}

//全部属性都到达目标值才能清空

function getStyle(obj, attr) {
 if (window.getComputedStyle) {
  return window.getComputedStyle(obj, null)[attr];
 } else {
  return obj.currentStyle[attr];
 }
}

上面就是所有的代码,你可以找五张图片试一试。

实际开发中效率还是最重要的,因为现在浏览器的性能已经非常好了,所以jQ的有些缺点完全可以忽略不计啦,并且jQ的兼容性真的是不错的,能节省开发人员很多的时间和精力,我也很支持在工作项目中用jQ来开发,可是作为一个真正的前端技术人员,你要时刻了解底层代码的实现,这样随着科技的发展,你也不会落于人后。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
锋利的jQuery 要点归纳(一) jQuery选择器
Mar 21 Javascript
jquery 的 $(&quot;#id&quot;).html() 无内容的解决方法
Jun 07 Javascript
用javascript为页面添加天气显示实现思路及代码
Dec 02 Javascript
jquery实现图片翻页效果
Dec 23 Javascript
JavaScript获取图片真实大小代码实例
Sep 24 Javascript
JavaScript基于setTimeout实现计数的方法
May 08 Javascript
javascript实现点击提交按钮后显示loading的方法
Jul 03 Javascript
JavaScript中校验银行卡号的实现代码
Dec 19 Javascript
js原生Ajax的封装和原理详解
Mar 11 Javascript
微信小程序实战之自定义toast(6)
Apr 18 Javascript
vue-cli脚手架搭建的项目去除eslint验证的方法
Sep 29 Javascript
react结合bootstrap实现评论功能
May 30 Javascript
JavaScript 继承详解(六)
Oct 11 #Javascript
JavaScript 继承详解(五)
Oct 11 #Javascript
Javascript动画效果(4)
Oct 11 #Javascript
JavaScript中const、var和let区别浅析
Oct 11 #Javascript
对javascript继承的理解
Oct 11 #Javascript
Javascript动画效果(3)
Oct 11 #Javascript
JavaScript实现自动切换图片代码
Oct 11 #Javascript
You might like
一个PHP的远程图片抓取函数分享
2013/09/25 PHP
js为鼠标添加右击事件防止默认的右击菜单弹出
2013/07/29 Javascript
JS控件ASP.NET的treeview控件全选或者取消(示例代码)
2013/12/16 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/08/22 Javascript
javascript中setAttribute()函数使用方法及兼容性
2015/07/19 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
简单三步实现报表页面集成天气
2016/12/15 Javascript
JavaScript实现格式化字符串函数String.format
2016/12/16 Javascript
Vue如何引入远程JS文件
2017/04/20 Javascript
BootStrap 导航条实例代码
2017/05/18 Javascript
VUE UPLOAD 通过ACTION返回上传结果操作
2020/09/07 Javascript
[45:56]Ti4正赛第一天 VG vs NEWBEE 3
2014/07/19 DOTA
[02:12]探秘2016国际邀请赛中国区预选赛选手房间
2016/06/25 DOTA
Python列表append和+的区别浅析
2015/02/02 Python
Python对列表排序的方法实例分析
2015/05/16 Python
Python中for循环控制语句用法实例
2015/06/02 Python
Python3实现二叉树的最大深度
2019/09/30 Python
简单了解Pandas缺失值处理方法
2019/11/16 Python
Python Pillow.Image 图像保存和参数选择方式
2020/01/09 Python
Python如何实现邮件功能
2020/05/27 Python
Django:使用filter的pk进行多值查询操作
2020/07/15 Python
Python 可视化神器Plotly详解
2020/12/26 Python
css3打造一款漂亮的卡哇伊按钮
2013/03/20 HTML / CSS
美国知名日用品连锁超市:Dollar General(多来店)
2017/01/14 全球购物
松本清官方海外旗舰店:日本最大的药妆连锁店
2017/11/21 全球购物
乌克兰品牌化妆品和香水在线商店:Bomond
2020/01/14 全球购物
门前三包责任书
2014/04/15 职场文书
教师专业自荐信
2014/05/31 职场文书
公司总经理助理岗位职责
2014/07/09 职场文书
文秘班元旦晚会活动策划方案
2014/08/28 职场文书
廉政教育的心得体会
2014/09/01 职场文书
法定授权委托证明书
2014/09/27 职场文书
2014年度个人总结范文
2015/03/09 职场文书
会计求职自荐信
2015/03/26 职场文书
SQL基础的查询语句
2021/11/11 MySQL
sql server 累计求和实现代码
2022/02/28 SQL Server