关于使用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">&lt;</span>
<span id="right">&gt;</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>

最新文章

  1. jQuery ui 框架
  2. python入门到精通[三]:基础学习(2)
  3. 一些不错的学习资料(node)
  4. thinkphp 配合mongodb
  5. 跨站脚本攻击XSS
  6. .NET框架体系结构
  7. 利用Jquery的load函数实现页面的动态加载
  8. [ASP.NET MVC]: - EF框架学习手记
  9. DOS中如何删除文件夹
  10. JAVA 调用matlab 出错总结
  11. IA32与x86
  12. Cocos2d-x CCProgressTimer
  13. 恶意软件Mirai换了个马甲 瞄上我国2亿多台IoT设备
  14. ngx-bootstrap使用02 Accordion组件的使用
  15. BZOJ 4698: Sdoi2008 Sandy的卡片 [后缀自动机]
  16. 前端构建工具之gulp的安装和配置
  17. iOS开发-LayoutGuide(从top/bottom LayoutGuide到Safe Area)
  18. javascript DOM编程艺术(检测与性能优化)
  19. Linux Input子系统浅析(二)-- 模拟tp上报键值【转】
  20. Java开发知识之Java中的泛型

热门文章

  1. go中三个点(...)用法
  2. spice在桌面虚拟化中的应用系列之二(Linux平台spice客户端的编译安装,支持USB映射)
  3. 从零开始部署Django生产环境(适用:《跟老齐学Python Django实战》)
  4. zabbix-web界面显示中文
  5. mysql 5.6 rpm安装启动、配置参数、字符集修改等
  6. mysql.jdbc.Driver异常总结
  7. Web开发技术---简单的登录验证
  8. CloudCompare 的简单的使用说明
  9. MySql数据库导出完整版(导出数据库,导出表,导出数据库结构)
  10. IDEA 中tomcat图片储存和访问虚拟路径(图片和程序分家)