Js封装的动画函数实现轮播图
---恢复内容开始---
- 效果图说明:当鼠标移到哪一个按钮上的时候会自动跳转到某一张图片上,并且按钮会以高亮显示

- 项目目录结构

- 用到的js封装的animate()动画
function animate(element, target) {
clearInterval(element.timeId);
//定时器的id值存储到对象的一个属性中
element.timeId = setInterval(function () {
//获取元素的当前的位置,数字类型
var current = element.offsetLeft;
//每次移动的距离
var step = 10;
step = current < target ? step : -step;
//当前移动到位置
current += step;
if (Math.abs(current - target) > Math.abs(step)) {
element.style.left = current + "px";
} else {
//清理定时器
clearInterval(element.timeId);
//直接到达目标
element.style.left = target + "px";
}
}, 20);
}
animate.js
- 简单轮播图代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0
} ul {
list-style: none
} img {
vertical-align: top
} .box {
width: 730px;
height: 454px;
margin: 100px auto;
padding: 5px;
border: 1px solid #ccc;
} .inner {
width: 730px;
height: 454px;
background-color: pink;
overflow: hidden;
position: relative;
} .inner ul {
width: 1000%;
position: absolute;
top: 0;
left: 0;
} .inner li {
float: left;
} .square {
position: absolute;
right: 10px;
bottom: 10px;
} .square span {
display: inline-block;
width: 16px;
height: 16px;
background-color: #fff;
text-align: center;
line-height: 16px;
cursor: pointer;
} .square span.current {
background-color: orangered;
color: #fff;
} </style>
</head>
<body>
<div class="box" id="box">
<div class="inner"><!--相框-->
<ul>
<li><a href="#"><img src="data:images/1.jpg" alt=""/></a></li>
<li><a href="#"><img src="data:images/2.jpg" alt=""/></a></li>
<li><a href="#"><img src="data:images/3.jpg" alt=""/></a></li>
<li><a href="#"><img src="data:images/4.jpg" alt=""/></a></li>
<li><a href="#"><img src="data:images/5.jpg" alt=""/></a></li>
<li><a href="#"><img src="data:images/6.jpg" alt=""/></a></li>
</ul>
<div class="square">
<span class="current">1</span>
<span>2</span>
<span>3</span>
<span>4</span>
<span>5</span>
<span>6</span>
</div>
</div>
</div> <script src="animate.js"type="text/javascript"></script>
<script>
/*我们需要操作:
当点击右下角按钮时对应的图片移动
1.需要获取ul的宽度
2.需要获取每个li的宽度
3.获取相框的宽度
4.获取右下角的span,并且为每个span注册鼠标移入和移除 */
//获取最外面的div
var oDiv=document.getElementById('box');
//获取inner由于inner没有用id所有我们用children的方式
var inner=oDiv.children[0];
//获取ul以及他的宽度
var oUl=inner.children[0];
//获取相框的宽度
var imgWidth=inner.offsetWidth;
var oLi=oUl.children;
//获取sapn
var oSpan=inner.children[1].children; /*为每个span注册鼠标进入的事件,并且鼠标进入时,对应的地方会显示高亮,这里用排他 排他功能:就是先将全部的属性移除,然后在某个上面加上特有的current属性
*/ for(var i=0;i<oSpan.length;i++){
//由于每循环一次i就会变,所以先保存下来
//循环的时候把索引值保存在每个span的自定义属性中
oSpan[i].setAttribute("index",i);
oSpan[i].onmouseover=function(){ for(var j=0;j<oSpan.length;j++){
//先去掉其他属性
oSpan[j].removeAttribute('class');
}
this.className="current"; //移动ul:不管是向左移动还是向右移动ul的left总负的,最大也只可能为0, //获取当前鼠标进入的span的索引
var index=this.getAttribute("index");
animate(oUl,-index*imgWidth); }
} </script>
</body>
</html>
简单轮播图.html
- 轮播图的基本实现(排他功能,用相框的宽度求出移动的距离)
思路理解:
当鼠标放到按钮上的时候,ul移出去的距离为=相框宽度*按钮的下标

根据上面接下来获取需要用到的元素对象:
//获取最外面的div
var oDiv=document.getElementById('box');
//获取inner由于inner没有用id所有我们用children的方式
var inner=oDiv.children[0];
//获取ul以及他的宽度
var oUl=inner.children[0];
//获取相框的宽度
var imgWidth=inner.offsetWidth;
var oLi=oUl.children;
//获取sapn
var oSpan=inner.children[1].children;
遍历每个li,并且做排他功能功能
for(var i=0;i<oSpan.length;i++){
//由于每循环一次i就会变,所以先保存下来
//循环的时候把索引值保存在每个span的自定义属性中,
oSpan[i].setAttribute("index",i);
oSpan[i].onmouseover=function(){
for(var j=0;j<oSpan.length;j++){
//先去掉其他属性
oSpan[j].removeAttribute('class');
}
this.className="current";
//移动ul:不管是向左移动还是向右移动ul的left总负的,最大也只可能为0,
//获取当前鼠标进入的span的索引
var index=this.getAttribute("index");
animate(oUl,-index*imgWidth);
}
}
---恢复内容结束---
Js封装的动画函数实现轮播图的更多相关文章
- JS封装动画框架,网易轮播图,旋转轮播图
JS封装动画框架,网易轮播图,旋转轮播图 1. JS封装运动框架 // 多个属性运动框架 添加回调函数 function animate(obj,json,fn) { clearInterval(ob ...
- 原生js用div实现简单的轮播图
文章地址 https://www.cnblogs.com/sandraryan/ 原生js实现轮播图. 打开页面图片自动轮播,点击prev next按钮切换到上/下一张图片,点击1-5切换到对应图片. ...
- 原生JavaScript(js)手把手教你写轮播图插件(banner)
---恢复内容开始--- 1.轮播图插件 1.什么是插件: 为已有的程序增加功能 2.插件的特点(为什么要做成一个插件)与注意事项: 1.通用性,可移植性强 2.兼容性:不会对其他代码产生影响 3.创 ...
- 告别组件之教你使用原生js和css写移动端轮播图
在工作中由于项目需要要写一个轮播图,本想使用组件直接调用实现快速开发,但是一想到自己经常使用组件但是让自己手写的话确实一点都不会. 一个不会手写组件的前端程序员不是一个好程序员!于是打算自己手写一个. ...
- CSS3之动画模块实现轮播图
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 使用原生JS封装一个动画函数
最近一直在忙项目,很少有时间回顾之前的知识,今天刚好要做一个轮播,因为对兼容性有一定的要求,使用了各种插件和库中的轮播,效果都不是很理想,一怒之下,使用原生JS封装了一个轮播组件,其中重要的功能就是一 ...
- 每天一个JS 小demo之韩雪冬轮播图。主要知识点:html,css布局,对于数组和对象的理解和运用
@charset "utf-8"; /* CSS Document */ ;; } li { list-style: none; } img { border: none; } b ...
- Jquery基础(动画效果的轮播图特效)
jquery文档准备的三种写法: $(document).ready(function() { }); $().ready(function() { }); $(function() { }); jq ...
- 封装一个简单的原生js焦点轮播图插件
轮播图实现的效果为,鼠标移入左右箭头会出现,可以点击切换图片,下面的小圆点会跟随,可以循环播放(为了方便理解,没有补2张图做无缝轮播).本篇文章的主要目的是分享封装插件的思路. 轮播图我一开始是写成非 ...
随机推荐
- vue axios 封装(一)
封装一: 'use strict' import axios from 'axios' import qs from 'qs' import NProgress from 'nprogress' im ...
- faster rcnn训练自己的数据集
采用Pascal VOC数据集的组织结构,来构建自己的数据集,这种方法是faster rcnn最便捷的训练方式
- Nintex History in Form Table
一.设置参数 二.调用WebService 三.For Each 调用 四.拼写HTML Table 结果: 特别提示:过滤人只要根据人来循环即可
- 配置 BizTalk Server
使用“基本配置”或“自定义配置”配置 BizTalk Server. 基本配置与自定义配置 如果配置使用域组,则进行“自定义配置”. 如果配置使用自定义组名称而不是默认组名称,则进行“自定 ...
- Express学习(2) ------ 中间件
TJ Holowaychuck 将 “中间件”描述为易于挂载和调用的模块,可以“无序”使用,并有利于应用的快速开发. 1, 中间件是一个模块.在js中,模块意味着函数,所以中间件是一个函数.那么这个函 ...
- 动态追加js
判断是否已引用js,如果没有会引发异常,在异常时添加引用 try { if (layui) {} } catch (ex) { var s = document.createElement('scri ...
- 第十九天 标准目录与time 模块
今日内容 1.目录规范 ***** (1)文件夹的规范写法 bin 可执行文件 conf 配置文件 core 主要业务逻辑 db 数据文件 lib 库 (公共代码 第三方模块) log 日志文件 ...
- [POJ2976] Dropping tests
传送门:>Here< 题意:给出长度相等的数组a和b,定义他们的和为$\dfrac{a_1+a_2+...+a_n}{b_1+b_2+...+b_n}$.现在可以舍弃k对元素(一对即$a[ ...
- MT【282】一道几何题
2010浙江省数学竞赛,附加题. 设$D,E,F$分别为$\Delta ABC$的三边$BC,CA,AB$上的点,记$\alpha=\dfrac{BD}{BC},\beta=\dfrac{BD}{BC ...
- windows刷新本机DNS缓存
ipconfig /flushdns