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 相关文章推荐
JavaScript DOM 添加事件
Feb 14 Javascript
jquery 3D球状导航的文章分类
Jul 06 Javascript
如何动态的导入js文件具体该怎么实现
Jan 14 Javascript
用javascript关闭本窗口不弹出询问框的方法
Sep 12 Javascript
原生javascript实现分享到朋友圈功能 支持ios和android
May 11 Javascript
node.js express安装及示例网站搭建方法(分享)
Aug 22 Javascript
AngularJs Dependency Injection(DI,依赖注入)
Sep 02 Javascript
JavaScript实现url参数转成json形式
Sep 25 Javascript
基于jquery日历价格、库存等设置插件
Jul 05 jQuery
JavaScript常用工具函数库汇总
Sep 17 Javascript
js+cavans实现图片滑块验证
Sep 29 Javascript
jQuery zTree如何改变指定节点文本样式
Oct 16 jQuery
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
浅谈电磁辐射对健康的影响
2021/03/01 无线电
Google Voice 短信发送接口PHP开源版(2010.5更新)
2010/07/22 PHP
PHP 设计模式之观察者模式介绍
2012/02/22 PHP
ajax在joomla中的原生态应用代码
2012/07/19 PHP
laravel框架的安装与路由实例分析
2019/10/11 PHP
不用MOUSEMOVE也能滑动啊
2007/05/23 Javascript
Javascript 获取链接(url)参数的方法
2009/02/15 Javascript
Jquery从头学起第四讲 jquery入门教程
2010/08/01 Javascript
轻松创建nodejs服务器(4):路由
2014/12/18 NodeJs
javascript实现 百度翻译 可折叠的分享按钮列表
2015/03/12 Javascript
jQuery实现跨域iframe接口方法调用
2015/03/14 Javascript
innerHTML中标签可以换行的方法汇总
2015/08/14 Javascript
JS给Array添加是否包含字符串的简单方法
2016/10/29 Javascript
Node.js 基础教程之全局对象
2017/08/06 Javascript
vue-cli 3.x配置跨域代理的实现方法
2019/04/12 Javascript
基于js实现抽红包并分配代码实例
2019/09/19 Javascript
Nuxt的路由配置和参数传递方式
2020/11/06 Javascript
遗传算法python版
2018/03/19 Python
从0开始的Python学习014面向对象编程(推荐)
2019/04/02 Python
Python3.5常见内置方法参数用法实例详解
2019/04/29 Python
Django自带的加密算法及加密模块详解
2019/12/03 Python
Python和Sublime整合过程图示
2019/12/25 Python
解决Tensorflow 内存泄露问题
2020/02/05 Python
Python异常原理及异常捕捉实现过程解析
2020/03/25 Python
硕士研究生自我鉴定
2013/11/08 职场文书
高中生职业生涯规划书
2014/02/24 职场文书
应届生自荐书
2014/06/23 职场文书
毕业生评语大全
2015/01/04 职场文书
2015自愿离婚协议书范本
2015/01/28 职场文书
幼儿园大班教师个人工作总结
2015/02/05 职场文书
开平碉楼导游词
2015/02/06 职场文书
党支部创先争优公开承诺书
2015/04/30 职场文书
村党组织公开承诺书
2015/04/30 职场文书
社会实践活动总结格式
2015/05/11 职场文书
学校元旦晚会开场白
2015/05/29 职场文书
钱学森观后感
2015/06/04 职场文书