纯js轮播图练习-1
偶尔练习,看视频自己学着做个简单的纯JS轮播。
简单的纯js轮播图练习-1。
样子就是上面图片那样,先不管好不好看,主要是学会运用和理解轮播的原理
掌握核心的理论知识和技术的操作,其他的都可以在这个基础上做出细微的更改和不断的去完善。
html代码,先写好要的基本元素,比如轮播的图片等。
这里使用的是简单的色块,和两个按钮。
基本上轮播图布为轮播区和操作区:
轮播区:轮播图片或者的色块的区域
操作区:操作轮播图的按钮,可以进行左右轮播
该部分先排除对操作区的布局,主要是轮播区进行了三个方面的布局(核心)
一、显示层:轮播图最外层,显示图片的区域,宽高大小,遮罩其他不需要显示的地方;
二、包裹层:将要显示的图片或者色块,进行包裹定位。
三、展示层:展示层为图片或者色块,
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>lunbo1</title>
</head>
<body> <!--
轮播图的结构基本上有三个层,分别为: 显示层、包裹层、展示层,
--> <!--div:显示层-->
<div class="wrap" id="wrap">
<!--ul:包裹层-->
<ul class="box" id="box" style="left: 0;">
<!--li:展示层-->
<li>0</li>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
</ul>
</div> <!--按钮-->
<div class="butBox">
<button id="butL">向左</button>
<button id="butR">向右</button>
</div> </body>
</html>
css:这里的样式做的比较简单,将主要的样式进行排版。
该部分重要的样式在于轮播的显示层,和包裹层及展示层(核心)。
这里需要运用的是各个层的定位和排列(核心)。
<style>
*{
margin:;
padding:;
} /*
* 最外层设置宽高,宽高比例和要显示的色块大小一致便可,
* 然后超出隐藏,减其他不显示的隐藏起来。
*
* */
.wrap{
width: 100px;
height: 100px;
overflow: hidden;
margin: 0 auto;
} /*
* 先将包裹色块的外层进行relative定位,
* 再给一个固定的宽,宽度根据排放的色块的宽和数量来计算,
* 我这里排的是10个,每一个色块宽100,10*100=1000px。
*
* */
.box{
position: relative;
width: 1000px;
} /*
* 设置色块,将所有色块左浮动,排除一排,
* 再将色块进行relative定位,好让色块的左上角与外层包裹的左上角对齐。
*
* */
li{
float: left;
position: relative;
list-style: none;
width: 100px;
height: 100px;
background-color: #FF0000;
text-align: center;
line-height: 100px;
color: #FFFFFF;
font-size: 32px;
font-weight: bold;
} .butBox{
margin: 0 auto;
text-align: center;
} </style>
最后,就是JS部分了。
js基本上要做的可以归类为四个部分:
一,计算出移动的数值更改的原理,(核心)
二:点击事件发生的移动数值更改,
三:自动轮播
四:鼠标移入移除停止、恢复轮播。
<script type="text/javascript">
//获取显示层的
var wrap = document.getElementById("wrap");
//获取包裹层
var box = document.getElementById("box");
//获取显示层的数量
var len = document.getElementsByTagName('li').length;
//获取包裹层的宽度
var w = box.clientWidth;
//获取左按钮
var butL = document.getElementById("butL");
//获取右按钮
var butR = document.getElementById("butR");
//定义下标位置
var index = 0; //左轮播方向
var lunboL = function(){ //定义要减去的色块或者图片的宽度,
var s = -100; //下标加1,默认初始为0,每左移动一个色块,就减1
index --; //判断下标数字是否等于-1,低于第0张,默认从0开始计算
if(index == -1){
//变将下标的数字重置为显示层的总数量,这里减1是以为长度是从1开始计算,要与下标统一,就得减去1。
index = len-1;
}; //计算出要移动的显示位置。
//如果下标等于1,那么就是2*-100,那就是-200, s = index*s;
//移动显示层的位置,移动的数值位下标*单个色块的长度。
box.style.left = s + 'px'; //打印看一下数值变化
console.log(box.style.left,index)
} //向右移动,原理与向左相同,不同的是移动的数值和下标的计算
var lunboR = (function(){ //与左的移动一样
var s = -100; //这里的下标是加1,因为是向右,要与左的反过来
index ++; //判断下标的数值与显示的总数量的数值一致
if(index == len){ //将下标重置为0,从头开始
index = 0;
}; //下面的与左移动的一样。
s = index*s;
box.style.left = s + 'px';
console.log(box.style.left,index)
}) //定义轮播的时间,每个三秒,边先左移动一次
var lunbos = setInterval(function(){
lunboR();
},3000); //左按钮,点击向左移动
butL.onclick = function(){
lunboL();
} //右按钮,点击向右移动
butR.onclick = function(){
lunboR();
} //文档加载启动自动轮播
window.onload = function(){
lunbos;
} //鼠标移入左按钮,便停止自动轮播
butL.onmouseover = function(){ clearInterval(lunbos);
console.log('鼠标移入左按钮')
} //鼠标移入左按钮,重新开始轮播
butL.onmouseout = function(){ //每3秒一次,与上面的自动轮播时间一致
setInterval(function(){
lunboR();
},3000);
console.log('鼠标移出左按钮')
} //鼠标移入右按钮,便停止自动轮播
butR.onmouseover = function(){ clearInterval(lunbos);
console.log('鼠标移入左按钮')
} //鼠标移入右按钮,重新开始轮播
butR.onmouseout = function(){ //每3秒一次,与上面的自动轮播时间一致
setInterval(function(){
lunboR();
},3000); console.log('鼠标移出左按钮')
} </script>
最后梳理一下,画了一张图总结了一下大概。
这张图里面没有说如何实现自动轮播,主要是为了通过按钮如何实现左右转动。
但是可以看源码,这一份源码里面有自动轮播的js部分。
其实对js定时器有一点基础的话,对自动轮播实现起来是比较简单的,只要将色块向右移动的事件,放在定时器里面。
设置好时间,每过一段时间,自动执行一下,便可以实现自动里面的效果。
全部的代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>lunbo1</title> <style>
*{
margin: 0;
padding: 0;
} /*
* 最外层设置宽高,宽高比例和要显示的色块大小一致便可,
* 然后超出隐藏,减其他不显示的隐藏起来。
*
* */
.wrap{
width: 100px;
height: 100px;
overflow: hidden;
margin: 0 auto;
} /*
* 先将包裹色块的外层进行relative定位,
* 再给一个固定的宽,宽度根据排放的色块的宽和数量来计算,
* 我这里排的是10个,每一个色块宽100,10*100=1000px。
*
* */
.box{
position: relative;
width: 1000px;
} /*
* 设置色块,将所有色块左浮动,排除一排,
* 再将色块进行relative定位,好让色块的左上角与外层包裹的左上角对齐。
*
* */
li{
float: left;
position: relative;
list-style: none;
width: 100px;
height: 100px;
background-color: #FF0000;
text-align: center;
line-height: 100px;
color: #FFFFFF;
font-size: 32px;
font-weight: bold;
} .butBox{
margin: 0 auto;
text-align: center;
} </style>
</head>
<body> <!--
轮播图的结构基本上有三个层,分别为: 显示层、包裹层、展示层,
--> <!--div:显示层-->
<div class="wrap" id="wrap">
<!--ul:包裹层-->
<ul class="box" id="box" style="left: 0;">
<!--li:展示层-->
<li>0</li>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
</ul>
</div> <!--按钮-->
<div class="butBox">
<button id="butL">向左</button>
<button id="butR">向右</button>
</div> <script type="text/javascript">
//获取显示层的
var wrap = document.getElementById("wrap");
//获取包裹层
var box = document.getElementById("box");
//获取显示层的数量
var len = document.getElementsByTagName('li').length;
//获取包裹层的宽度
var w = box.clientWidth;
//获取左按钮
var butL = document.getElementById("butL");
//获取右按钮
var butR = document.getElementById("butR");
//定义下标位置
var index = 0; //左轮播方向
var lunboL = function(){ //定义要减去的色块或者图片的宽度,
var s = -100; //下标加1,默认初始为0,每左移动一个色块,就减1
index --; //判断下标数字是否等于-1,低于第0张,默认从0开始计算
if(index == -1){
//变将下标的数字重置为显示层的总数量,这里减1是以为长度是从1开始计算,要与下标统一,就得减去1。
index = len-1;
}; //计算出要移动的显示位置。
//如果下标等于1,那么就是2*-100,那就是-200, s = index*s;
//移动显示层的位置,移动的数值位下标*单个色块的长度。
box.style.left = s + 'px'; //打印看一下数值变化
console.log(box.style.left,index)
} //向右移动,原理与向左相同,不同的是移动的数值和下标的计算
var lunboR = (function(){ //与左的移动一样
var s = -100; //这里的下标是加1,因为是向右,要与左的反过来
index ++; //判断下标的数值与显示的总数量的数值一致
if(index == len){ //将下标重置为0,从头开始
index = 0;
}; //下面的与左移动的一样。
s = index*s;
box.style.left = s + 'px';
console.log(box.style.left,index)
}) //定义轮播的时间,每个三秒,边先左移动一次
var lunbos = setInterval(function(){
lunboR();
},3000); //左按钮,点击向左移动
butL.onclick = function(){
lunboL();
} //右按钮,点击向右移动
butR.onclick = function(){
lunboR();
} //文档加载启动自动轮播
window.onload = function(){
lunbos;
} //鼠标移入左按钮,便停止自动轮播
butL.onmouseover = function(){ clearInterval(lunbos);
console.log('鼠标移入左按钮')
} //鼠标移入左按钮,重新开始轮播
butL.onmouseout = function(){ //每3秒一次,与上面的自动轮播时间一致
setInterval(function(){
lunboR();
},3000);
console.log('鼠标移出左按钮')
} //鼠标移入右按钮,便停止自动轮播
butR.onmouseover = function(){ clearInterval(lunbos);
console.log('鼠标移入左按钮')
} //鼠标移入右按钮,重新开始轮播
butR.onmouseout = function(){ //每3秒一次,与上面的自动轮播时间一致
setInterval(function(){
lunboR();
},3000); console.log('鼠标移出左按钮')
} </script>
</body>
</html>
未经允许,禁止转载,抄袭,如需借鉴参考等,请附上该文章连接。
纯js轮播图练习-1的更多相关文章
- 纯js轮播图练习-2,js+css旋转木马层叠轮播
基于css3的新属性,加上js的操作,让现在js轮播图花样越来越多. 而现在出现的旋转木马层叠轮播的轮播图样式,却是得到了很多人都喜爱和投入使用. 尤其是在各大软件中,频繁的出现在大家的眼里,在web ...
- 纯js轮播图练习-3,类似于淘宝海报带小圆点轮播图
基于js和css,跟着网上的视频教程,结合自己想要的效果,做出了一个类似于淘宝海报的效果. 如图:淘宝首页 自己做的: 代码: <!DOCTYPE html> <html> & ...
- 纯js轮播图
<div id="wrapper"> <div id="container"> <img src="http://ima ...
- 纯css3 轮播图 利用keyframes
效果: 关键点:利用keyframes 原理:infinite 注意点:在处理关键帧动画的时候,注意处理好 总共花费的 animation-duration:time 与每帧延延迟的时间的交错:要让 ...
- 纯CSS3轮播图
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- JavaScript的案例(数据校验,js轮播图,页面定时弹窗)
1.数据校验 步骤 1.确定事件(onsubmit)并绑定一个函数 2.书写这个函数,获取数据,并绑定id 3. ...
- javascript原生js轮播图
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JS轮播图(网易云轮播图)
JS 轮播图 写在前面 最聪明的人是最不愿浪费时间的人.--但丁 实现功能 图片自动切换 鼠标移入停止自动播放,显示按钮 点击按钮,实现前后翻 鼠标移入小圆圈,可以跳转到对应图片 点击左右两侧图片部分 ...
- css 纯css轮播图 示例
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
随机推荐
- 小Y的轮回之路——攒机装机、B150装win7
两个月前,陪伴我5年多的小Y(ideapad-y460N卡)突然大伤元气,硬盘跪了,显示屏也黑了一小块.本着经济实惠凑合用的态度换了个320G的硬盘,没想过几天显示屏情况加重,出现无数个红绿相间的线条 ...
- 异步nodejs代码的同步样子写法样例
异步nodejs代码的同步样子写法样例 js的异步嵌套太深代码将不好看.尤其在用node的时候这种情况会大量出现. 这里用node连接redis,做一个用户注册的简单例子来说明.例如用redis做存储 ...
- CefSharp 浏览器核心,爬虫
CefSharp是什么 A framework for embedding web-browsing-like capabilities to a standard .NET application ...
- python数据结构(整理)
http://www.cnblogs.com/yupeng/p/3413763.html 1. 单链表 链表的定义: 链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点 ...
- 阅读MySQL文档第21章摘抄
触发程序是与表相关的数据库对象. mysql> CREATE TABLE account (acct_num INT, amount DECIMAL(10,2)); Query OK, 0 ro ...
- redis持久化那些事(kēng)儿
这是一篇包含了介绍性质和吐槽性质的日志.主要介绍一下我学习redis持久化时候被坑的经历.redis的使用介绍现在没有打算写,因为比较多,以我如此懒的性格...好吧,还是有点这方面想法的,不过一篇博客 ...
- Html 列表实现展开和收起
HTML中,点击列表元素,在其下展开更多的小选项.不点的时候是收起来的.就是实现路由器左边的菜单那样的功能.怎么实现,知道的指点一下,谢谢了!! 最常见的方法是通过Javascript控制某标签的CS ...
- 一切皆文件-文件是对IO的最简抽象
引用<Linux Kernel Development>原书里面的一句话 in Unix, everything is a file.This simplifies the manipul ...
- 一.在Linux中for和cat遍历文件内容出现no space
以前使用for var in file方式逐行读取文件内容的时候,都没有出现问题,但是今天使用如下代码,会出现“no space” ,目标数据文件内容为6.8M, # 写入临时文件,第一行不能写入 f ...
- new ,malloc
特征 new/delete malloc/free 分配内存的位置 自由存储区 堆 内存分配失败返回值 完整类型指针 void* 内存分配失败返回值 默认抛出异常 返回NULL 分配内存的大小 由编译 ...