009 轮播图,offset系列
关于使用JS做轮播图,使用一个章节进行笔迹。
一:简单轮播图
1.程序
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
* {
margin: 0;
padding: 0;
list-style: none;
border: 0;
}
.all {
width: 500px;
height: 200px;
padding: 7px;
border: 1px solid #ccc;
margin: 100px auto;
position: relative; /*主要用于左右箭头的定位*/
}
.screen {
width: 500px;
height: 200px;
overflow: hidden;
position: relative;
}
.screen ul {
position: absolute;
left: 0;
top: 0;
width: 3000px; /*将图片都装进来*/
}
.screen li {
float: left;
width: 500px;
height: 200px;
}
/*-序号-*/
.screen ol {
position: absolute;
left: 50%;
bottom: 10px;
line-height: 20px;
text-align: center;
}
.screen ol li {
float: left;
width: 20px;
height: 20px;
background-color: #fff;
border: 1px solid #ccc;
margin-left: 10px;
cursor: pointer;
border-radius: 5px;
}
.screen ol li.current {
background-color: #DB192A;
}
#arr span {
width: 40px;
height: 40px;
position: absolute;
left: 5px;
top: 50%;
margin-top: -20px;
background: #000;
cursor: pointer;
line-height: 40px;
text-align: center;
font-family: "黑体";
font-size: 30px;
font-weight: bold;
color: #fff;
opacity: 0.3;
border: 1px solid #ffffff;
}
#arr #right {
right: 5px;
left: auto;
}
#arr {
display: none;
}
</style>
</head>
<body>
<div id="box" class="all">
<div class="screen">
<ul>
<li><img src="data:images/1.jpg" alt="" width="500" height="200"></li>
<li><img src="data:images/2.jpg" alt="" width="500" height="200"></li>
<li><img src="data:images/3.jpg" alt="" width="500" height="200"></li>
<li><img src="data:images/4.jpg" alt="" width="500" height="200"></li>
<li><img src="data:images/5.jpg" alt="" width="500" height="200"></li>
</ul>
<ol>
<!--序号-->
</ol>
</div>
<div id="arr">
<span id="left"><</span>
<span id="right">></span>
</div>
</div> <script>
//获取一些使用的数据
var box = document.getElementById("box");
var screenObj = box.children[0];
var imgWidth = screenObj.offsetWidth;
var ulObj = screenObj.children[0];
var listObj = ulObj.children;
var olObj = screenObj.children[1];
var arr = document.getElementById("arr"); //同步全局变量
var pic = 0; for(var i=0; i<listObj.length; i++){
//创建ol中的li
var li = document.createElement("li");
olObj.appendChild(li);
li.innerHTML=i+1;
li.setAttribute("index",i);
//注册鼠标进入事件
li.onmouseover=function () {
for (var j=0; j<olObj.children.length; j++){
olObj.children[j].removeAttribute("class");
}
this.className="current";
pic = this.getAttribute("index");
animate(ulObj, -pic * imgWidth); //移动图片
}
}
olObj.children[0].className="current"; //刚进入的初始化
ulObj.appendChild(ulObj.children[0].cloneNode(true)); //在后面再添加一张第一张的图片 //进行自动播放轮播
var timeId = setInterval(clickHandle, 200000000); //鼠标进入div,显示左右箭头,停止定时器
box.onmouseover=function () {
arr.style.display="block";
clearInterval(timeId);
}
//鼠标退出div,影藏左右箭头,继续定时器
box.onmouseout=function () {
arr.style.display="none";
timeId = setInterval(clickHandle, 2000);
} function clickHandle() {
if(pic==listObj.length-1){
pic=0;
ulObj.style.left=0+"px";
}
pic++;
animate(ulObj, -pic * imgWidth);
if(pic==listObj.length-1){
olObj.children[olObj.children.length-1].className="";
olObj.children[0].className="current";
}else{
for(var k=0;k<olObj.children.length; k++){
olObj.children[k].removeAttribute("class");
}
olObj.children[pic].className="current";
}
} //右边按钮
document.getElementById("right").onclick=clickHandle; //左边按钮
document.getElementById("left").onclick=function () {
if(pic==0){
pic=5;
ulObj.style.left=-pic * imgWidth + "px";
}
pic--;
animate(ulObj, -pic * imgWidth);
for(var v=0; v<olObj.children.length; v++){
olObj.children[v].removeAttribute("class");
}
olObj.children[pic].className="current";
} //移动到任意位置
function animate(ele, target) {
clearInterval(ele.timeId);
ele.timeId = setInterval(function () {
var current = ele.offsetLeft;
var step = 10;
step = current<target?step:-step;
current+=step;
if(Math.abs(current-target)>Math.abs(step)){
ele.style.left=current+"px";
}else{
clearInterval(ele.timeId);
ele.style.left=target+"px";
}
},10);
} </script>
</body>
</html>
2.效果:

二:offset系列
1..offsetLeft
没有脱离文档流:
父级元素margin+父级元素的padding+父级元素的border+自己的margin。
脱离文档流:
主要是自己的left+自己的margin
三:document获取元素
1.通过document获取元素
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
//获取body
console.log(document.body);
//获取title
console.log(document.title);
//获取html
console.log(document.documentElement);
</script>
</body>
</html>
2.图片跟着鼠标飞
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
img {
position: absolute;
}
</style>
</head>
<body>
<img src="demo/image/00_7.jpg" alt="" id="img" width="300px">
<script>
document.onmousemove=function (e) {
document.getElementById("img").style.left=e.clientX+"px";
document.getElementById("img").style.top=e.clientY+"px";
}
</script>
</body>
</html>
009 轮播图,offset系列的更多相关文章
- JavaScript动画:offset家族和匀速动画详解(含轮播图的实现)
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. offset家族简介 我们知道,三大家族包括:offset/scroll ...
- JavaScript动画:offset和匀速动画详解(含轮播图的实现)
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. offset简介 我们知道,三大家族包括:offset/scroll/c ...
- js-BOM之offset家族、移动函数的封装升级(轮播图)
Obj.style.width/obj.style.height与obj.offsetWidth/obj.offsetHeight的区别: <style> #div1{ height: 2 ...
- JS-特效 ~ 01. 事件对象、offset偏移/检测、无缝滚动、自动循环轮播图
Math.round ( ) :正书四舍五入,负数五舍六入 用定时器,先清除定时器 事件对象 event event:事件被触动时,鼠标和键盘的状态,通过属性控制 Offset:偏移,检测 1. 获取 ...
- jQuery实现todo及轮播图
内容: 1.todo程序 2.轮播图 1.todo程序 需求: 实现一个todo程序,可以添加数据,可以删除数据,可以修改数据,可以查看所有数据 另外实现自己的一系列弹窗:用于提示用户的提示框.用于警 ...
- 原生js焦点轮播图
原生js焦点轮播图主要注意这几点: 1.前后按钮实现切换,同时注意辅助图2.中间的button随着前后按钮对应切换,同时按button也能跳转到相应的index3.间隔调用与无限轮播.4.注意在动画时 ...
- iOS 图片轮播图(自动滚动)
iOS 图片轮播图(自动滚动) #import "DDViewController.h" #define DDImageCount 5 @interface DDViewContr ...
- 【jQuery】百分比自适应屏幕轮播图特效
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【JavaScript】固定布局轮播图特效
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
随机推荐
- cpio命令
RPM包中文件提取 cpio命令主要有三种基本模式:"-o"模式指的是copy-out模式,就是把数据备份到文件库中:"-i"模式指的是copy-in模式,就是 ...
- 【Flask】 python学习第一章 - 创建与运行参数
windos 创建环境 sudo pip install virtualenv # 安装virtualenv virtualenv -p python dir_name cd dir_name p ...
- css详解4
1.固定定位 固定定位,页面内容多,页面滚动起来,才能看到固定定位效果. 比如下面这个,随之滚动条滚动它一直在右边.比如固定导航栏,小广告,回到顶部,应用在这些地方.一直固定位置不变的. 首先让页面能 ...
- websocket实现心跳连接
在使用websocket的时候,遇到了一个websocket在连接一段时间就异常断开连接了.第一想法就是重新去连接websocket(websock.onopen),后来发现这种方式是错误的,查阅文档 ...
- LFU(最近最不常用)实现(python)
from collections import defaultdict, OrderedDict class Node: __slots__ = 'key', 'val', 'cnt' def __i ...
- python 之类、self
类是什么 可以视为种类或者类型的同义词.所有的对象都属于某一个类,称为类的实例. 例如:鸟就是"鸟类"的实例.这就是一个有很多子类的一般(抽象)类:看到的鸟可能属于子类" ...
- Hive 数据类型与文件格式
一.基本数据类型 1.基本数据类型 Tinyint 1byte有符号整数 比如20 Smalint 2byte有符号整数 比如20 Int 4byte有符号整数 比如20 Big ...
- 使用echarts生成海友网企业全国分布地图
不分类别的效果 不同分类的分布效果图 从海友网获取各个企业名单保存进mysql cmfishhelper.py 从下列网址得到各个企业名片的网址保存进表cmfish cds = get_cds() h ...
- lixuxmint系统定制与配置(2)-输入法
小书匠Linux RIME的官网在这里 1.安装 刚开始是使用ibus-rime,后来使用过程感觉不舒服,就换回fcitx-rime.使用以下命令安装fcitx-rime sudo apt insta ...
- 【概率论】5-7:Gama分布(The Gamma Distributions Part II)
title: [概率论]5-7:Gama分布(The Gamma Distributions Part II) categories: - Mathematic - Probability keywo ...