js以及jquery实现手风琴效果


Posted in Javascript onApril 17, 2020

最近又复习了jQuery的知识,既然jQuery是javascript的一个库。jQuery能做到的事情javascript也能做到。因此用这两种方法实现了图片手风琴效果。

按照惯例,还是上代码吧,因为代码里有我的注释也就相当于解释了!

先看一下javascript的代码吧:

div布局:注意哦,里面的图片我们用js代码生成

<div id="box">
 <ul>
 <li></li>
 <li></li>
 <li></li>
 <li></li>
 <li></li>
 </ul>
</div>

css样式:

<style type="text/css">
 *{
 margin: 0;
 padding: 0;
 }
 ul{
 list-style: none;
 }
 #box{
 width: 1150px;
 height: 400px;
 margin: 50px auto;
 border: 1px solid red;
 overflow: hidden;
 }
 #box ul{
 width: 1300px;
 }
 #box ul li{
 width: 240px;
 height: 400px;
 float: left;

 }
 </style>

要写js代码了。这里封装了一个完整的运动框架(我个人 觉得哈,你可以继续完善,不过你要告诉我,我也学习一下!)

/*
 * 实现动画的步骤:
 1.怎样得到当前的样式 封装一个函数 getStyle()
 2.步长的计算 用(目标位置 - 当前的样式) / 10
 3. 缓动动画原理: 盒子本身的样式 + 步长(不断变化的)
 */
/*
 * css设置透明度,一般在ie中用的是filter:alpha(opacity=0);
而在firefox中,一般就是直接使用opacity:0
*/
// 多个属性的运动框架 以及添加回调函数
function animate(obj,json,fn){ // 目标obj json 属性:属性值 fn回调函数
 clearInterval(obj.timer);
 obj.timer = setInterval(function(){
 var flag = true;// 用来判断是否停止定时器 
 // 遍历json
 for (var attr in json) { //attr 属性 json[attr]值
 var curStyle = 0;
 if (attr == "opacity") {
 curStyle = parseInt(getStyle(obj,attr)*100);
 } else{
 curStyle = parseInt(getStyle(obj,attr));// 获得数值
 }
 // 得到步长 目标位置就是json[attr]
 var step = (json[attr]-curStyle) / 10;
 step = step > 0 ? Math.ceil(step) :Math.floor(step);

 // 判断透明度
 if (attr == "opacity") { // 判断用户有没有输入opacity
 if ("opacity" in obj.style) { 
  obj.style.opacity = (curStyle + step) / 100;
 } else{
  obj.style.filter = "alpha(opacity="+(curStyle +step)+")";
 }

 } else if(attr == "zIndex"){
 obj.style.zIndex = json[attr];
 } else{
 obj.style[attr] = curStyle +step +"px";
 }
 // 判断是否已经都到了目标位置 只要其中一个不满足条件 就不应该停止定时器
 if (curStyle != json[attr]) {
 flag = false;
 }
 }
 // 判断定时器条件 是否该停止了
 if (flag) {
 clearInterval(obj.timer)
 // 当定时器停止后,动画也就结束了.如果有回调函数就执行回调函数
 if(fn){
 fn();
 }

 }
 },30);
}

// 封装函数 得到属性
function getStyle(obj,attr) { // 谁的 那个属性
 if(obj.currentStyle) // ie 等
 {
 return obj.currentStyle[attr]; // 返回传递过来的某个属性
 }
 else
 {
 return window.getComputedStyle(obj,null)[attr]; // w3c 浏览器
 }
}

接着我们在js里面引入我们写的框架

<script src="animate.js"></script>

接下来,写js代码

<script>
 window.onload = function(){
 var box = document.getElementById("box");
 var lis = box.children[0].children;
 for (var i = 0; i < lis.length;i++) {
  lis[i].style.backgroundImage = "url(images/"+(i+1)+".jpg)";
  lis[i].onmouseover = function(){
  for (var j = 0; j < lis.length;j++) {
  animate(lis[j],{width:100});
  }
  animate(this,{width:800});
  }
  lis[i].onmouseout = function(){
  for (var k = 0; k < lis.length;k++) {
  animate(lis[k],{width:240});
  }
  }
 }
 }
</script>

好啦,这样就完成了,具体效果你自己动手看看吧。完整的下载地址为js版本的手风琴效果

写完了js,发现代码量好多啊,看看jquery代码,哦买嘎,切记一定要先引入jQuery的包,再写代码哈!

<script src="jquery-1.11.1.min.js"></script>
 <script>
 $(function(){
 $("#box li").each(function(index,ele){
  $(ele).css("background","url(images/"+(index+1)+".jpg)");
 }).mouseenter(function(){
  $(this).stop().animate({width:800},500).siblings("li").stop().animate({width:100},500);
 }).mouseleave(function(){
  $("#box li").stop().animate({width:240},500);
 });
 });

 </script>

精简了好多。
来吧,我们的jQuery版本手风琴效果下载地址

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

Javascript 相关文章推荐
Mootools 1.2教程 Tooltips
Sep 15 Javascript
js触发onchange事件的方法说明
Mar 08 Javascript
jQuery制作简单柱状图实例
Jan 28 Javascript
动态加载js的方法汇总
Feb 13 Javascript
Bootstrap每天必学之进度条
Nov 30 Javascript
AngularJS中实现动画效果的方法
Jul 28 Javascript
微信小程序入门教程
Nov 18 Javascript
Bootstrap模态框插件使用详解
May 11 Javascript
javascript算法之二叉搜索树的示例代码
Sep 12 Javascript
js数组去重的N种方法(小结)
Jun 07 Javascript
Vue动态组件与异步组件实例详解
Feb 23 Javascript
vue动态绘制四分之三圆环图效果
Sep 03 Javascript
写jQuery插件时的注意点
Feb 20 #Javascript
Node.js获取前端ajax提交的request信息
Feb 20 #Javascript
使用JS 插件qrcode.js生成二维码功能
Feb 20 #Javascript
Node.js websocket使用socket.io库实现实时聊天室
Feb 20 #Javascript
Angular在一个页面中使用两个ng-app的方法(二)
Feb 20 #Javascript
Angular在一个页面中使用两个ng-app的方法
Feb 20 #Javascript
JS高仿抛物线加入购物车特效实现代码
Feb 20 #Javascript
You might like
PHP用星号隐藏部份用户名、身份证、IP、手机号等实例
2014/04/08 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
2014/07/01 PHP
IIS下PHP的三种配置方式对比
2014/11/20 PHP
php检查字符串中是否包含7位GSM字符的方法
2015/03/17 PHP
php简单的上传类分享
2016/05/15 PHP
thinkPHP3.2.2框架行为扩展及demo示例
2018/06/19 PHP
Laravel修改验证提示信息为中文的示例
2019/10/23 PHP
Prototype使用指南之selector.js说明
2008/10/26 Javascript
jquery.ui.progressbar 中文文档
2009/11/26 Javascript
关于js遍历表格的实例
2013/07/10 Javascript
jquery mobile动态添加元素之后不能正确渲染解决方法说明
2014/03/05 Javascript
纯HTML5制作围住神经猫游戏-附源码下载
2015/08/23 Javascript
基于JavaScript实现手机短信按钮倒计时(超简单)
2015/12/30 Javascript
JavaScript微信定位功能实现方法
2016/11/29 Javascript
vue2.0项目中使用Ueditor富文本编辑器示例代码
2017/08/14 Javascript
vue完成项目后,打包成静态文件的方法
2018/09/03 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
python3批量删除豆瓣分组下的好友的实现代码
2016/06/07 Python
关于Python中空格字符串处理的技巧总结
2017/08/10 Python
使用anaconda的pip安装第三方python包的操作步骤
2018/06/11 Python
详解如何用python实现一个简单下载器的服务端和客户端
2019/10/28 Python
深入了解如何基于Python读写Kafka
2019/12/31 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
python实现滑雪游戏
2020/02/22 Python
Pycharm及python安装详细教程(图解)
2020/07/31 Python
小蚁科技官方商店:YI Technology
2019/08/23 全球购物
机械制造与自动化应届生求职信
2013/11/16 职场文书
教师节演讲稿
2014/05/06 职场文书
统计学教授推荐信
2014/09/18 职场文书
公司租车协议书
2015/01/29 职场文书
会计专业求职信范文
2015/03/19 职场文书
机关工会工作总结2015
2015/05/26 职场文书
消防安全培训工作总结
2015/10/23 职场文书
python使用matplotlib绘制图片时x轴的刻度处理
2021/08/30 Python
Python干货实战之八音符酱小游戏全过程详解
2021/10/24 Python
Redis中有序集合的内部实现方式的详细介绍
2022/03/16 Redis