javascript实现异形滚动轮播


Posted in Javascript onNovember 28, 2019

本文实例为大家分享了js异形滚动轮播的具体代码,供大家参考,具体内容如下

运动过程研究

让每个元素走到前一个标签的位置。
3走到2
2走到1
1走到0
0走到6

javascript实现异形滚动轮播

利用js动态获取每个类名对应的css样式对象,组成一个新数组。

// 定义一个新数组,接收每个位置的css样式对象
var styleArr = [];
// 遍历数组添加样式对象
for (var i =0; i <$('li').length; i++) {
 styleArr.push({
 "width": $('li').eq(i).css('width'),
 "height": $('li').eq(i).css('height'),
 "left": $('li').eq(i).css('left'),
 "top": $('li').eq(i).css('top')
 });
}

可以使用animate方法发生移动:

animate(params,[speed],[easing],[fn])

params:一组包含作为动画属性和终值的样式属性和及其值的集合
speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)
easing:要使用的擦除效果的名称(需要插件支持).默认jQuery提供"linear" 和 “swing”.
fn:在动画完成时执行的函数,每个元素执行一次。

// 右按钮事件
 $('.btn_you').click(function () {
 // 后面的元素走到前面上一个位置
 for (var i =1; i <$('li').length; i++) {
 $('.no'+ i).animate(styleArr[i -1], 300)
 }
 // 0位置的li直接更改css样式,切换到6的位置
 $('.no0').animate(styleArr[6], 300);
 })

问题:样式和对应的类名不统一,不能进行第二次运动。

解决方法:进行对应位置的类名轮换。

javascript实现异形滚动轮播

可以将7个类名放在数组中,每次实现将最后一项删除,添加到第一项。
pop 方法
从数组中移除最后一个元素并将该元素返回
push 方法
将新元素追加到一个数组中,并返回数组的新长度。
shift 方法
从数组中移除第一个元素并将返回该元素。
unshift 方法
在数组的开头插入新元素。

//运动结束后,要让li的类名和位置统一,切换类名
classNameArr.unshift(classNameArr.pop());

将得到新数组中的类名赋值给对应li标签。

// 循环给li添加新的类名
for (var i =0; i <$('li').length; i++) {
$('li').eq(i).attr('class', classNameArr[i]);
}

左按钮

classNameArr.push(classNameArr.shift());

防骚扰操作:判断li标签是否处于运动状态,如果是,那么事件函数不往下执行,使用return返回。

// 防骚扰
if ($('li').is(':animated')) {
return;
}

源码

<!DOCTYPE html>
<html lang="en">

<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>Document</title>
</head>
<script src="./js/jquery-1.8.3.js"></script>
<style>
 * {
  margin: 0;
  padding: 0;
 }

 ul {
  list-style: none;
 }

 .box {
  position: relative;
  width: 670px;
  height: 325px;
  background: url(./img/pic_bg.gif)no-repeat;
  margin: 100px auto;
  /*overflow: hidden;*/
 }

 .box .btn a {
  position: absolute;
  width: 41px;
  height: 41px;
   background: #f00;
  top: 151px;
 }

 .box .btn .btn_left {
  left: 25px;
 }

 .box .btn .btn_you {
  right: 25px;
 }

 .box .imgs li {
  position: absolute;
 }

 .box .imgs .no0 {
  width: 80px;
  height: 50px;
  left: -90px;
  top: 72px;
 }

 .box .imgs .no1 {
  width: 90px;
  height: 60px;
  left: 14px;
  top: 62px;
 }

 .box .imgs .no2 {
  width: 110px;
  height: 80px;
  left: 118px;
  top: 43px;
 }

 .box .imgs .no3 {
  width: 150px;
  height: 100px;
  left: 253px;
  top: 22px;
 }

 .box .imgs .no4 {
  width: 110px;
  height: 80px;
  left: 433px;
  top: 43px;
 }

 .box .imgs .no5 {
  width: 90px;
  height: 60px;
  left: 564px;
  top: 62px;
 }

 .box .imgs .no6 {
  width: 80px;
  height: 50px;
  left: 680px;
  top: 72px;
 }

 .box .imgs li img {
  width: 100%;
  height: 100%;
 }
</style>

<body>
 <div class="box">
  <div class="btn">
   <a href="javascript:;" class="btn_left"></a>
   <a href="javasvript:;" class="btn_you"></a>
  </div>
  <ul class="imgs">
   <li class="no0"><a href="#" ><img src="img/0.png"></a></li>
   <li class="no1"><a href="#" ><img src="img/1.png"></a></li>
   <li class="no2"><a href="#" ><img src="img/2.png"></a></li>
   <li class="no3"><a href="#" ><img src="img/3.png"></a></li>
   <li class="no4"><a href="#" ><img src="img/4.png"></a></li>
   <li class="no5"><a href="#" ><img src="img/5.png"></a></li>
   <li class="no6"><a href="#" ><img src="img/6.png"></a></li>
  </ul>
 </div>
</body>
<script>
 // 定义一个数组,接收每个位置的css样式对象
 var styleArr = [];
 // 遍历数组添加样式对象
 for (var i = 0; i < $('li').length; i++) {
  // push 方法 将新元素追加到一个数组中
  styleArr.push({
   "width": $('li').eq(i).css('width'),
   "height": $('li').eq(i).css('height'),
   "left": $('li').eq(i).css('left'),
   "top": $('li').eq(i).css('top')
  });
 }
  console.log(styleArr);
//
 // 建立类名数组
 var classNameArr = [];
 // 遍历添加类名
 for (var i = 0; i < $('li').length; i++) {
  classNameArr.push($('li').eq(i).attr('class'));
 }
 console.log(classNameArr);
//
// // 右按钮事件
 $('.btn_you').click(function () {
  // 防骚扰
  if ($('li').is(':animated')) {
   return;
  }
  // 后面的元素走到前面上一个位置
  for (var i = 1; i < $('li').length; i++) {
   $('.no' + i).animate(styleArr[i - 1], 300)
  }
  // 0位置的li直接更改css样式,切换到6的位置
  $('.no0').css(styleArr[6], 300);

  //运动结束后,要让li的类名和位置统一,切换类名
  classNameArr.unshift(classNameArr.pop());
  // console.log(classNameArr);

  // 循环给li添加新的类名
  for (var i = 0; i < $('li').length; i++) {
   $('li').eq(i).attr('class', classNameArr[i]);
  }
 })
//
 // 左按钮事件
 $('.btn_left').click(function () {
  // 防骚扰
  if ($('li').is(':animated')) {
   return;
  }
  // 后面的元素走到前面上一个位置
  for (var i = 0; i < $('li').length - 1; i++) {
   $('.no' + i).animate(styleArr[i + 1], 300)
  }
  // 6位置的li直接更改css样式,切换到0的位置
  $('.no6').css(styleArr[0], 300);

  //运动结束后,要让li的类名和位置统一,切换类名
  classNameArr.push(classNameArr.shift());
  // console.log(classNameArr);

  // 循环给li添加新的类名
  for (var i = 0; i < $('li').length; i++) {
   $('li').eq(i).attr('class', classNameArr[i]);
  }
 })
</script>

</html>

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

Javascript 相关文章推荐
jquery中实现标签切换效果的代码
Mar 01 Javascript
node.js 使用ejs模板引擎时后缀换成.html
Apr 22 Javascript
jQuery简单实现日历的方法
May 04 Javascript
原生js实现模拟滚动条
Jun 15 Javascript
谈一谈jQuery核心架构设计
Mar 28 Javascript
js只执行1次的函数示例
Jul 20 Javascript
jQuery简单设置文本框回车事件的方法
Aug 01 Javascript
AngularJS 自定义指令详解及示例代码
Aug 17 Javascript
Javascript 使用ajax与C#获取文件大小实例详解
Jan 13 Javascript
详解VueJs前后端分离跨域问题
May 24 Javascript
微信小程序 跳转传递数据的实例
Jul 06 Javascript
backbone简介_动力节点Java学院整理
Jul 14 Javascript
javascript实现切割轮播效果
Nov 28 #Javascript
javascript实现商品图片放大镜
Nov 28 #Javascript
javascript实现视频弹幕效果(两个版本)
Nov 28 #Javascript
javascript实现弹幕墙效果
Nov 28 #Javascript
jquery实现直播弹幕效果
Nov 28 #jQuery
jQuery实现简单弹幕效果
Nov 28 #jQuery
微信小程序事件流原理解析
Nov 27 #Javascript
You might like
php 获取完整url地址
2008/12/20 PHP
php文档更新介绍
2011/07/22 PHP
两款万能的php分页类
2015/11/12 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
2016/05/06 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
2016/06/30 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
php tpl模板引擎定义与使用示例
2019/08/09 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
2020/05/02 PHP
js event事件的传递与冒泡处理
2009/12/06 Javascript
javascript检测对象中是否存在某个属性判断方法小结
2013/05/19 Javascript
javascript中比较字符串是否相等的方法
2013/07/23 Javascript
IE8下String的Trim()方法失效的解决方法
2013/11/08 Javascript
jQuery拖拽 &amp; 弹出层 介绍与示例
2013/12/27 Javascript
用IE重起计算机或者关机的示例代码
2014/03/10 Javascript
vue-router 组件复用问题详解
2018/01/22 Javascript
20个最常见的jQuery面试问题及答案
2018/05/23 jQuery
深入浅析Node.js 事件循环、定时器和process.nextTick()
2018/10/22 Javascript
基于element-ui对话框el-dialog初始化的校验问题解决
2020/09/11 Javascript
vue+vant 上传图片需要注意的地方
2021/01/03 Vue.js
[36:37]2014 DOTA2华西杯精英邀请赛5 24 VG VS iG
2014/05/25 DOTA
使用Python脚本将Bing的每日图片作为桌面的教程
2015/05/04 Python
python 文件转成16进制数组的实例
2018/07/09 Python
python实现AES加密解密
2019/03/28 Python
Python音频操作工具PyAudio上手教程详解
2019/06/26 Python
python随机生成大小写字母数字混合密码(仅20行代码)
2020/02/01 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
CSS3实现精美横向滚动菜单按钮
2017/04/14 HTML / CSS
乌克兰香水和化妆品网站:Notino.ua
2018/03/26 全球购物
爱普生美国官网:Epson美国
2018/11/05 全球购物
中学教师实习自我鉴定
2013/09/28 职场文书
参观考察邀请函范文
2014/01/29 职场文书
医学生毕业自我鉴定
2014/03/26 职场文书
2015年小学生新年寄语
2014/12/08 职场文书
2015年重阳节活动主持词
2015/07/30 职场文书
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
2021/03/31 Servers
部分武汉产收音机展览
2022/04/07 无线电