纯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 相关文章推荐
Prototype 学习 工具函数学习($w,$F方法)
Jul 12 Javascript
jQuery之日期选择器的深入解析
Jun 19 Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
Oct 20 Javascript
javascript常用的正则表达式实例
May 15 Javascript
javascript中的Function.prototye.bind
Jun 25 Javascript
JavaScript判断手机号运营商是移动、联通、电信还是其他(代码简单)
Sep 25 Javascript
javascript实现简单计算器效果【推荐】
Apr 19 Javascript
Node.js DES加密的简单实现
Jul 07 Javascript
jQuery用FormData实现文件上传的方法
Nov 21 Javascript
JavaScript日期选择功能示例
Jan 16 Javascript
详解Webpack+Babel+React开发环境的搭建的方法步骤
Jan 09 Javascript
微信小程序switch开关选择器使用详解
Jan 31 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处理带有中文URL的方法
2016/07/11 PHP
php实现socket推送技术的示例
2017/12/20 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
jtable列中自定义button示例代码
2013/11/21 Javascript
运用jQuery定时器的原理实现banner图片切换
2014/10/22 Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
2014/12/28 Javascript
JQuery实现简单的图片滑动切换特效
2015/11/22 Javascript
Bootstrap每天必学之表单
2015/11/23 Javascript
node.js 抓取代理ip实例代码
2017/04/30 Javascript
ztree实现左边动态生成树右边为内容详情功能
2017/11/03 Javascript
vue-router命名路由和编程式路由传参讲解
2019/01/19 Javascript
带你使用webpack快速构建web项目的方法
2020/11/12 Javascript
[02:40]2018年度DOTA2最佳新人-完美盛典
2018/12/16 DOTA
python中的__init__ 、__new__、__call__小结
2014/04/25 Python
python操作CouchDB的方法
2014/10/08 Python
跟老齐学Python之类的细节
2014/10/13 Python
Python爬虫番外篇之Cookie和Session详解
2017/12/27 Python
详解TensorFlow在windows上安装与简单示例
2018/03/05 Python
python 实现数字字符串左侧补零的方法
2018/12/04 Python
python使用 zip 同时迭代多个序列示例
2019/07/06 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
2019/10/14 Python
jupyter notebook中美观显示矩阵实例
2020/04/17 Python
日本最大级玩偶手办购物:あみあみ Amiami
2018/04/23 全球购物
化学教师教学反思
2014/01/17 职场文书
电脑饰品店的创业计划书
2014/01/21 职场文书
甜美蛋糕店创业计划书
2014/01/30 职场文书
高中语文课后反思
2014/04/27 职场文书
机关领导干部作风整顿整改措施
2014/09/19 职场文书
大专毕业生自我鉴定范文(2篇)
2014/09/27 职场文书
模范教师材料大全
2014/12/16 职场文书
技术员岗位职责范本
2015/04/11 职场文书
千手观音观后感
2015/06/03 职场文书
2019最新企业员工考勤管理制度(通用版)!
2019/07/02 职场文书
Redis实现订单自动过期功能的示例代码
2021/05/08 Redis
spring cloud 配置中心native配置方式
2021/09/25 Java/Android
MySQL创建管理RANGE分区
2022/04/13 MySQL