在我们准备动手之前先了解下几个属性  dom元素的位置的几个相关属性

dom元素宽度/高度

clientWidth/clientHeight   元素的内尺寸   content + padding

offsetWidth/offsetHeight  元素的外尺寸  content + padding + border

clientLeft/clientTop  padding最外侧与border最外侧的距离  也就是左边的border宽度和上面的border宽度

offsetLeft/offsetTop  指的是dom元素的左上角(上面和左面border相交处)与以定位父元素的左上角的相对距离

element.style.left  element.style.top 它跟offsetLeft和offsetTop是相似的 他们之前还是有一定的区别

1)当你在css中对一个元素的left top进行设置的时候 你在js中是无法取到这个值的 准确的说是一个空的字符串 难道我们只能在html中写我们的css了吗???

2)offsetLeft offsetTop 能获取我们在CSS中设置的left top

3)offsetLeft offsetTop 是只读的属性 并且返回值是数字       style.left style.top 是读写的属性 返回的是字符串  也就是 “100px”

所以结合offsetLeft offsetTop  和 style.left style.top 我们就可以操作dom元素的位置了

下面我们来实现一个简单的轮播的例子

  <div id="container">
<ul id="show">
<li><img src="1.jpg" alt=""></li>
<li><img src="2.jpg" alt=""></li>
<li><img src="3.jpg" alt=""></li>
<li><img src="4.jpg" alt=""></li>
</ul>
</div> <input type="button" id="next" value="next" />
<input type="button" id="prev" value="prev" />

在这样的页面结构下我们一步一步实现轮播的效果

首先先对样式进行一些基本的设置

    body {
margin:;
}
ul {
margin:;
padding:;
}

为了清除浏览器对元素的一些默认的设置

现在展示的效果是这样的

接下来我们让列表元素做浮动 并且对父容器和展示区域进行了一些设置

            ul > li {
float:left;
list-style: none;
} #container {
position: relative;
/*width:100px*/
height:100px; //因为我的图片就是100*100的想让一次点击就显示一张图片 也可以一次显示多张 width进行调整
       /*overflow:hidden;*/
}
#show {
position: absolute;
left:;
top:; //由于最近的父元素设置了定位relative 所以这个top left是相对于父元素左上角的定位
}

在container不设置width和overflow的时候 页面变成了这样

我们将注释消去  此时我们只能看见第一个图片了 但是其他的图片还是像上面一样排列着 而我们想要实现简单的轮播效果就可以操作显示区域相对于父元素的left值来实现

下面是相应的js实现


var page = 1,//初始化页数
i = 1,//每页显示的图片数
nextBtn = document.getElementById("next"),
prevBtn = document.getElementById("prev"),
showPart = document.getElementById("show"),//获得显示区域
width = document.getElementById("container").offsetWidth;//获得父元素的宽度
length = showPart.getElementsByTagName("li").length,//获得显示区域显示条目数
page_count = Math.ceil(length/i);//总页数


nextBtn.onclick = function() {
if(page == page_count) { //当为最后一页的时候 回到第一页
showPart.style.left = "0px";
page = 1;
} else {
showPart.style.left = showPart.offsetLeft - width + "px";
page++;//不是最后一个的时候就修改left的值
}
}


prevBtn.onclick = function() {
if(page == 1) {
showPart.style.left = showPart.offsetLeft - width*(page_count-1) + "px";
page = page_count;
} else {
showPart.style.left = showPart.offsetLeft + width + "px";
page--;
}
}

上面就实现了一个简单的轮播效果 通过点击按钮就能进行图片的展示 当然你也可以通过创建一个函数默认的一直往后展示图片 在页面加载后每隔一定时间去运行这个函数,也就实现了动态的展示功能

参考  http://www.cnblogs.com/dolphinX/archive/2012/11/19/2777756.html

http://www.jb51.net/article/47811.htm

锋利的jquery

js实现轮播的更多相关文章

  1. 原生js焦点轮播图

    原生js焦点轮播图主要注意这几点: 1.前后按钮实现切换,同时注意辅助图2.中间的button随着前后按钮对应切换,同时按button也能跳转到相应的index3.间隔调用与无限轮播.4.注意在动画时 ...

  2. 原生js实现轮播图

    原生js实现轮播图 很多网站上都有轮播图,但找到一个系统讲解的却很难,因此这里做一个简单的介绍,希望大家都能有所收获,如果有哪些不正确的地方,希望大家可以指出. 原理: 将一些图片在一行中平铺,然后计 ...

  3. js实现轮播图效果(附源码)--原生js的应用

    1.js实现轮播图效果 <!DOCTYPE html><html lang="en"><head> <meta charset=" ...

  4. js编写轮播图,广告弹框

    1.轮播图 js编写轮播图,需要用到setInterval(计时器):先给一个div,里面放轮播图的图片,将轮播图的图片明明为相同样式的:如:banner1.jpg,banner2.jpg,banne ...

  5. js原生轮播

    js原生轮播 今天用js做了轮播图,做的不怎么好,希望大家能够看懂. 效果: 1.鼠标放在轮播图上自动停止 2.鼠标离开轮播图自动播放 3.鼠标点击轮播图上的小圆点跳转到相应的图上. 代码: < ...

  6. js实现轮播图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 封装一个简单的原生js焦点轮播图插件

    轮播图实现的效果为,鼠标移入左右箭头会出现,可以点击切换图片,下面的小圆点会跟随,可以循环播放(为了方便理解,没有补2张图做无缝轮播).本篇文章的主要目的是分享封装插件的思路. 轮播图我一开始是写成非 ...

  8. 原生JS实现轮播图的效果

    原生JS实现轮播图的效果: 只要缕清了全局变量index的作用,这个轮播图也就比较容易实现了:另外,为了实现轮这个效果,有几处clearInterval()必须写上.废话不多说,直接上代码,修复了几个 ...

  9. 使用原生js将轮播图组件化

    代码地址如下:http://www.demodashi.com/demo/11316.html   这是一个轮播图组件,这里是代码地址,需要传入容器的id和图片地址,支持Internet Explor ...

  10. js图片轮播效果实现代码

    首先给大家看一看js图片轮播效果,如下图 具体思路: 一.页面加载.获取整个容器.所有放数字索引的li及放图片列表的ul.定义放定时器的变量.存放当前索引的变量index 二.添加定时器,每隔2秒钟i ...

随机推荐

  1. PowerPoint 打开文档发现.pptx中胡内容有问题

    一.问题的提出 有一个文件,在window 7操作系统中通过邮箱地址保存到本地,结果打开的时候出现[PowerPoint 打开文档发现 文件.pptx中胡内容有问题] 然后提示[如果您信任此演示文稿的 ...

  2. centos下 Vim快捷键操作命令大全

    Vim是一个超牛的编辑器,命令功能十分强大 .而且这些命令大都可以进行组合 ,比如,9yy命令表示复制9行内容,9表示要复制的行数,同样100dd表示删除100行,当数字和命令合作的时候,就比单纯的命 ...

  3. 微信公众号API返回不可打印字符的处理。

    引言 在使用微信公众号的"批量获取用户基本信息"API时,发现在某些时候不能使用php的json_decode转为数组,打印出curl获取到的内容中,发现了几个不可打印字符.相信不 ...

  4. Android中项目中各个文件夹的含义和用途详解

    1.src:存放所有的*.java源程序. 2.gen:为ADT插件自动生成的代码文件保存路径,里面的R.java将保存所有的资源ID. 3.assets:可以存放项目一些较大的资源文件,例如:图片. ...

  5. 重识JavaScript 之 数据类型的相互转换

    字符串转换数字 var a = '1'; console.log(+a); console.log(a++); console.log(-a+3); console.log(parseInt(a)); ...

  6. MPU9250调试

    MPU9250 芯片概述 MPU9250芯片是一个9轴姿态传感芯片,其中包含了3轴加速度传感器.3轴角速度传感器以及三轴磁力计. 其本质上是MPU6050芯片+AK8963. 可以获取传感芯片的加速度 ...

  7. 数据库收缩:NOTRUNCATE与TRUNCATEONLY

    在进行数据库收缩时,我们有2个可用选项:NOTRUNCATE,TRUNCATEONLY.这篇文章我们会详细讨论下这2个选项的具体区别. NOTRUNCATE 当你对数据库收缩命令提供NOTRUNCAT ...

  8. Python文件操作详解

    Python内置了一个open()方法,用于对本地文件进行读写操作.这个功能简单.实用,属于必须掌握的基础知识. 使用open方法操作文件可以分三步走,一是打开文件,二是操作文件,三是关闭文件.下面分 ...

  9. 使用aspose.cell动态导出多表头 EXCEL

    效果图: 前台调用: using System; using System.Collections.Generic; using System.Linq; using System.Web; usin ...

  10. 开源一个基于nio的java网络程序

    因为最近要从公司离职,害怕用nio写的网络程序没有人能看懂(或许是因为写的不好吧),就调整成了mina(这样大家接触起来非常方便,即使没有socket基础,用起来也不难),所以之前基于nio写的网络程 ...