纯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 相关文章推荐
导航跟随滚动条置顶移动示例代码
Sep 11 Javascript
jQuery动态显示和隐藏datagrid中的某一列的方法
Dec 11 Javascript
jquery判断元素是否隐藏的多种方法
May 06 Javascript
Bootstrap table分页问题汇总
May 30 Javascript
浅析Bootstrap验证控件的使用
Jun 23 Javascript
轻松实现jquery选项卡切换效果
Oct 10 Javascript
MVVM 双向绑定的实现代码
Jun 21 Javascript
ztree加载完成后显示勾选节点的实现代码
Oct 22 Javascript
vue中axios的二次封装实例讲解
Oct 14 Javascript
VUEX采坑之路之获取不到$store的解决方法
Nov 08 Javascript
JavaScript Html实现移动端红包雨功能页面
Jan 10 Javascript
vue实现移动端div拖动效果
Mar 03 Vue.js
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实现简单爬虫的开发
2016/03/28 PHP
php实现留言板功能(会话控制)
2017/05/23 PHP
php fread函数使用方法总结
2019/05/28 PHP
PHP数组实际占用内存大小原理解析
2020/12/11 PHP
用javascript实现改变TEXTAREA滚动条和按钮的颜色,以及怎样让滚动条变得扁平
2007/04/20 Javascript
Javascript 对象的解释
2008/11/24 Javascript
基于jquery的拖动布局插件
2011/11/25 Javascript
getJSON调用后台json数据时函数被调用两次的原因猜想
2013/09/29 Javascript
javascript实现动态侧边栏代码
2014/02/19 Javascript
HTML页面弹出居中可拖拽的自定义窗口层
2014/05/07 Javascript
JS或jQuery获取ASP.NET服务器控件ID的方法
2015/06/08 Javascript
基于javascript数组实现图片轮播
2016/05/02 Javascript
实例讲解jQuery中对事件的命名空间的运用
2016/05/24 Javascript
javascript入门之数组[新手必看]
2016/11/21 Javascript
JS库particles.js创建超炫背景粒子插件(附源码下载)
2017/09/13 Javascript
node省市区三级数据性能测评实例分析
2019/11/06 Javascript
使用python获取CPU和内存信息的思路与实现(linux系统)
2014/01/03 Python
Python中处理字符串之islower()方法的使用简介
2015/05/19 Python
Python反射和内置方法重写操作详解
2018/08/27 Python
Python中logging实例讲解
2019/01/17 Python
python爬虫解决验证码的思路及示例
2019/08/01 Python
TensorFlow2.0:张量的合并与分割实例
2020/01/19 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
2020/03/09 Python
Python捕获异常堆栈信息的几种方法(小结)
2020/05/18 Python
python使用多线程+socket实现端口扫描
2020/05/28 Python
基于 HTML5 WebGL 实现的医疗物流系统
2019/10/08 HTML / CSS
工业设计专业个人求职信范文
2013/12/28 职场文书
2014新年寄语
2014/01/20 职场文书
旅游专业毕业生自荐书
2014/06/30 职场文书
初三语文教学计划
2015/01/22 职场文书
英语辞职信范文
2015/02/28 职场文书
教师工作证明范本
2015/06/12 职场文书
2015年迎新晚会策划书
2015/07/16 职场文书
小学毕业感言200字
2015/07/30 职场文书
Unity连接MySQL并读取表格数据的实现代码
2021/06/20 MySQL
CI Games宣布《堕落之王2》使用虚幻引擎5制作 预计将于2023年正式发售
2022/04/11 其他游戏