首先是html实现页面结构及主程序

 <!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>基本动画-焦点图轮播</title>
<style type="text/css">
#outer{ width:450px; height:230px; position:relative; margin:50px auto; background:pink; overflow:hidden;}
#inner{ width:2700px; height:230px; position:absolute; top:0px; left:0;}
#inner div{ width:450px; height:230px; float:left; line-height:230px; text-align:center; font-size:36px; font-weight:bold; color:#fff; background:red;}
ul#btn{ margin:0; padding:0; list-style:none; position:absolute; bottom:15px; right:15px; height:30px; width:230px;}
ul#btn li{ float:left; width:25px; margin-right:5px; height:25px; border:4px solid orange; border-radius:50%; font-size:24px; font-weight:bold; line-height:25px; text-align:center; background:#366; cursor:pointer; -webkit-user-select:none; }
ul#btn li.current{ background:white;}
</style>
</head> <body>
<div id="outer">
<div id="inner">
<div>111111111111</div>
<div style="background:yellow; color:blue">222222222222</div>
<div style="background:black;">333333333333</div>
<div style="background:purple;">444444444444</div>
<div style="background:blue;">555555555555</div>
<div>111111111111</div> </div>
<ul id="btn">
<li class="current" >1</li>
<li >2</li>
<li >3</li>
<li >4</li>
<li >5</li>
</ul>
</div>
</body>
</html>
<script src="move.js"></script>
<script>
var oLis=document.getElementById('btn').getElementsByTagName('li');
var oInner=document.getElementById('inner');
for(var i=0;i<oLis.length;i++){
oLis.item(i).n=i;
oLis.item(i).onclick=function(){
move(oInner,"left",this.n*-450);
}
}
var step=0;
function autoMove(){
if(step==oLis.length){//第六个图片对应是第一个li
oLis.item(0).className="";
}else{//正常情况下,step在累加之前,总是表示上一个LI的索引
oLis.item(step).className="";
}
step++;
if(step==oLis.length+1){//如果走到了第六张,则把坐标切换到第一张上来。
//alert(1);//暂停一下,更能理解原理
oInner.style.left=0;//切换坐标
step=1; //然后再从第一张往第二张上走,所以让step=1;
}
if(step==5){//第5个索引(就是第六张)对应的是第一张DIV,所以这儿要做个判断
oLis.item(0).className="current";
}else{//正常情况下走到第几张,就让对应的li切换背景
oLis.item(step).className="current";
}
move(oInner,"left",step*-450);
}
window.setInterval(autoMove,2000);
</script>

接下来在move.js里实现辅助函数

 function move(ele,attr,target,fnCallback){
clearInterval(ele[attr+"timer"]);
function _move(){//闭包方法
var cur=css(ele,attr);//当前位置
var nSpeed=(target-cur)/10;
nSpeed=nSpeed>0?Math.ceil(nSpeed):Math.floor(nSpeed);
css(ele,attr,cur+nSpeed);
if(nSpeed===0){
clearInterval(ele[attr+"timer"]);
ele[attr+"timer"]=null;
if(typeof fnCallback=="function"){
fnCallback.call(ele);
//用call去执行fnCallback,则可以让fnCallback在运行的时候,里面的this关键字指向当前运动的这个元素
}
//ele.style.backgroundColor="green";
}
}
ele[attr+"timer"]=window.setInterval(_move,20);
} function css(ele,attr,val){//如果传两个参数,则是取值。三个参数,则赋值
if(typeof val=="undefined"){
try{
return parseFloat(window.getComputedStyle(ele,null)[attr]);
}catch(e){
return parseFloat(ele.currentStyle[attr]);
}
}else if(typeof val=="number"){
if(attr=="opacity"){
ele.style.opacity=val;
ele.style.filter="alpha(opacity="+val*100+")";
}else{
ele.style[attr]=val+"px";
}
}
}

原生js-焦点图轮播的更多相关文章

  1. [Js]焦点图轮播效果

    一.所用到的知识点 1.DOM操作 2.定时器 3.事件运用 4.Js动画 5.函数递归 6.无限滚动大法 二.结构和样式 <div id="banner" class=&q ...

  2. 原生JavaScript实现焦点图轮播

    不管是高校的网站还是电商的页面,焦点图的切换和轮播应该是一项不可或缺的应用.今天把焦点图轮播制作的技术要点做下笔记,以供日后查看. 一.结构层(HTML) 焦点图的HTML结构很简单,就是一个父容器( ...

  3. jQuery与原生js实现banner轮播图

    jQuery与原生js实现banner轮播图: (jq需自己加载)(图片需自己加载) <!DOCTYPE html> <html> <head> <meta ...

  4. 原生JS实现简易轮播图

    原生JS实现简易轮播图(渐变?) 最近做网页总是会用到轮播图,我就把之前写的轮播图单独拿出来吧,如果有...如果真的有人也需要也可以复制去用用啊..哈~.. window.onload = funct ...

  5. JS、JQ实现焦点图轮播效果

    JS实现焦点图轮播效果 效果图: 代码如下,复制即可使用: (不过里面的图片路径需要自己改成自己的图片路径,否则是没有图片显示的哦) <!DOCTYPE html> <html> ...

  6. JS实现焦点图轮播效果

    大家平时逛淘宝网的时候,在首页就能看到焦点图轮播的效果,就是这个样子的: PS:想起每每打开淘宝,总会被这个玩意先夺眼球,偶尔还去点进去溜溜,幸好我定力好,总能控制住自己的购买欲望,为自己不用剁手感到 ...

  7. jQuery制作焦点图(轮播图)

    焦点图(轮播图) 案例 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...

  8. 原生js实现图片轮播思路分析

    一.复习原生js实现图片轮播 1.要点 自动轮播 点击小圆圈按钮,显示相应图片 点击左右箭头,实现向前向后轮播图片 2.实现思路 <div id="container"> ...

  9. JavaScript基础 -- 焦点图轮播(转载)

    首先将HTML结构搭建好: <div id="container"> <div id="list" style="left: -60 ...

  10. 用jQuery基于原生js封装的轮播

    我发现轮播在很多网站里面都用到过,一个绚丽的轮播可以为网页增色不少,最近闲来无事,也用原生js封装了一个轮播,可能不像网上的插件那么炫,但是也有用心去做.主要用了闭包的思想.需要传递的参数有:图片地址 ...

随机推荐

  1. 新年SO交期更新——FP_SO2SAP

    (一)         以下逻辑落在12月26日-2月4日生效,2月5日此段逻辑失效: (二)         针对SO创建日期落在N-1天的新单进行处理: (三)         根据FP运算逻辑: ...

  2. iTerm2 cheatsheet (from github)

    https://gist.github.com/helger/3070258 Tabs and Windows Function Shortcut Previous Tab ⌘+ Left Arrow ...

  3. CC1310的RSSI值问题

    前几日,做CC1310的通信距离测试,发现我的CC1310的板子在433MHz,50kbps下通信距离非常近,RSSI值下探至-80左右就无法正常通信,与TI宣称的-120dbm接收灵敏度差距较大.使 ...

  4. tcp转发

    Proxy.java package com.dc.tcp.proxy; import java.io.IOException; import java.net.ServerSocket; impor ...

  5. Endless Sky源码学习笔记-4

    事件处理: 事件包括:debug模式切换.切换到登陆窗口.退出.窗口大小变化.全屏切换和游戏中的鼠标键盘输入.处理方式分为两类,前几个为简单的if处理,最后一个涉及到游戏中的控制和交互,且事件由每一个 ...

  6. Devexpress WidgetView 使用总结

    效果图: 1.添加DocumentManager控件 2.Convert to WidgetView 3.添加Document,设定ControlTypeName属性,第5步用到 4.添加StackG ...

  7. 反射——Java反射机制

    反射概述 什么是反射? ①   反射的概念是由Smith在1982年首次提出的,主要指程序可以访问.检测和修改它本身状态或行为的一种能力. ②   JAVA反射机制是在运行状态中,对应任意一个类,都能 ...

  8. 【转】mysql存储引擎

    http://www.cnblogs.com/kevingrace/p/5685355.html Mysql有两种存储引擎:InnoDB与Myisam,下表是两种引擎的简单对比   MyISAM In ...

  9. Futoshiki求解

    Futoshiki求解 Futoshiki是对于一个n的方阵,需要满足如下条件: ·每一行和每一列的元素都不能重复,即每一行和每一列1到n,n个数字都出现,且只出现一次. ·同一行或同一列中相邻两个元 ...

  10. 浅谈php设计模式(1)---工厂模式

    一.接口继承直接调用 先看看这样一段代码: <?php interface db{ function conn(); } class dbmysql implements db { public ...