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 相关文章推荐
JS 创建对象(常见的几种方法)
Nov 03 Javascript
js 键盘记录实现(兼容FireFox和IE)
Feb 07 Javascript
JavaScript中的console.dir()函数介绍
Dec 29 Javascript
javascript操作ul中li的方法
May 14 Javascript
js实现tab切换效果实例
Sep 16 Javascript
jQuery组件easyui对话框实现代码
Aug 25 Javascript
vue实现点击图片放大效果
Aug 15 Javascript
vue 自定义右键样式的实例代码
Nov 06 Javascript
一看就会的vuex实现登录验证(附案例)
Jan 09 Javascript
JavaScript ES6 Class类实现原理详解
May 08 Javascript
JQuery实现折叠式菜单的详细代码
Jun 03 jQuery
Javascript使用integrity属性进行安全验证
Nov 07 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执行速度全攻略(下)
2006/10/09 PHP
PHP程序员编程注意事项
2008/04/10 PHP
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
php使用imagecopymerge()函数创建半透明水印
2018/01/25 PHP
JS JavaScript获取Url参数,src属性参数
2021/03/09 Javascript
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
IE6下js通过css隐藏select的一个bug
2010/08/16 Javascript
javascript模拟实现C# String.format函数功能代码
2013/11/25 Javascript
JS判断网页广告是否被浏览器拦截过滤的代码
2015/04/05 Javascript
JavaScript基于ajax编辑信息用法实例
2015/07/15 Javascript
javascript 动态修改css样式方法汇总(四种方法)
2015/08/27 Javascript
JS实现的竖向折叠菜单代码
2015/10/21 Javascript
Javascript编程之继承实例汇总
2015/11/28 Javascript
理解javascript中的MVC模式
2016/01/28 Javascript
使用 Vue.js 仿百度搜索框的实例代码
2017/05/09 Javascript
vue 系列——vue2-webpack2框架搭建踩坑之路
2017/12/22 Javascript
详解express + mock让前后台并行开发
2018/06/06 Javascript
原生js实现表格翻页和跳转
2020/09/29 Javascript
[02:57]DOTA2英雄基础教程 风行者
2014/01/16 DOTA
常见的在Python中实现单例模式的三种方法
2015/04/08 Python
python实现支持目录FTP上传下载文件的方法
2015/06/03 Python
Python3安装Scrapy的方法步骤
2017/11/23 Python
详解python中的index函数用法
2019/08/06 Python
tensorflow之自定义神经网络层实例
2020/02/07 Python
解决PDF 转图片时丢文字的一种可能方式
2021/03/04 Python
美国珠宝网上商店:Jeulia
2016/09/01 全球购物
毕业自我鉴定范文
2013/11/06 职场文书
青年文明号事迹材料
2014/01/18 职场文书
小学班主任事迹材料
2014/12/17 职场文书
优秀校长事迹材料
2014/12/24 职场文书
英语导游词
2015/02/13 职场文书
毕业设计致谢词
2015/05/14 职场文书
uwsgi+nginx代理Django无法访问静态资源的解决
2021/05/10 Servers
k8s部署redis cluster集群的实现
2021/06/24 Redis
Java中常用解析工具jackson及fastjson的使用
2021/06/28 Java/Android
基于CSS制作创意端午节专属加载特效
2022/06/01 HTML / CSS