轮播图---左右切换无长滚动效果轮播图-中级难度版

左右切换无长滚动轮播图
思路:首先设有全局变量position(确定当前图片是第几张),arr数组:存放图片地址,方向:direction,

及lis小圆点数组,prev,记录小圆点的前一个, moveBool是否进入运动函数等
1、点击事件:点击左边的leftBn,设置direction="right",position--,在这要确定position不能超出数组长度范围,

超出要重新赋值,点击小圆点把小圆点的当前是lis数组中的第几个赋值给position,然后图片生成
2、图片生成:图片根据当前direction值以及position来确定插入当前图片的前面和后面,如果direction=”right“,

插在当前图片的前面,并把装图片的盒子宽度乘以2倍,设置控制图片运动的moveBool为true,
3、图片运动:根据当前direction值运动,如果值为right,则让装图片的盒子的left值为offset.left+40,即向右运动,

当运动完成后设置相关属性停止进入运动函数并设置其他相关属性
4、自动运动:设置控制自动运动的变量,初值为0,每次进入定时器++,当等于一定值时,给direction赋值,position++,

生成图片,当点击事件发生时,则给这个变量的值设成负值,让其时间更久才能再次生成图片。
5、关于小圆点及其它琐碎事情。每次清空之前prev的属性设置,然后给prev设置当前的li所在的position,再重新设置背景属性。

易错点:插入图片位置,给装图片的大盒子定位及运动。及图片生成和图片运动这一块。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>中级轮播图重构</title>
    <style>
        *{margin: 0;  padding: 0;  }
        #carousel,#imgCon img{width: 1200px;  height: 400px;  }
        #carousel {position: relative;  margin: auto;  overflow: hidden;  }
        #imgCon{width: 1200px;  height: 400px;  position: absolute;  left: 0;  font-size: 0;  }
        #leftBn,#rightBn {position: absolute;  top:170px;  cursor: pointer;  }
        #leftBn{left: 20px;}
        #rightBn {right: 20px;  }
        ul{position: absolute;  bottom: 20px;  list-style: none;  margin: auto;  }
        li {width: 20px;  height: 20px;  border: 1px solid red;  border-radius: 10px;
         float: left;  margin-left: 8px;  cursor: pointer;  }
    </style>
    <script src="../universalMethod.js"></script>
</head>
<body>
<div id="carousel">
    <div id="imgCon">
        <img src="img/a.jpeg">
    </div>
    <ul>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
    <img src="img/left.png" id="leftBn">
    <img src="img/right.png" id="rightBn">
</div>
<script>
    var imgCon,leftBn,rightBn,ul,lis,prev
    var arr=["img/a.jpeg","img/b.jpeg","img/c.jpeg","img/d.jpeg","img/e.jpeg"]
    var position=0
    var direction
    var autoNum=0
    var moveBool=false
    const WIDTH=1200
    const HEIGHT=400
    init()
    function init(){
        imgCon=document.getElementById("imgCon")
        leftBn=document.getElementById("leftBn")
        rightBn=document.getElementById("rightBn")
        ul=document.getElementsByTagName("ul")[0]
        leftBn.addEventListener("click",clickHandler)
        rightBn.addEventListener("click",clickHandler)
        lis=ul.children
        for(var i=0;i<lis.length;i++){
            lis[i].index=i
            lis[i].addEventListener("click",liClickHandler)
        }
        ul.style.left=(WIDTH-ul.clientWidth)/2+"px"
        liBG()
        setInterval(animation,16)

    }
    function createImg(){
        var data1=new Date()
        var img=Method.createElem("img",null,{
            width:WIDTH+"px",
            height:HEIGHT+"px"
        })
        img.src=arr[position]
        imgCon.style.width=WIDTH*2+"px"
        if(direction==="left"){
            imgCon.appendChild(img)
        }
        if(direction==="right"){
            imgCon.insertBefore(img,imgCon.lastElementChild)
            imgCon.style.left=-WIDTH+"px"
        }
        var data2=new Date()
        moveBool=true
        console.log(data2-data1)
        liBG()
    }
    function moveImg(){
        if(!moveBool) return
        if(direction==="left"){
            if(imgCon.offsetLeft<=-WIDTH){
                imgCon.style.left=0+"px"
                imgCon.firstElementChild.remove()
                imgCon.style.width=WIDTH+"px"
                moveBool=false
                return
            }
            imgCon.style.left=(imgCon.offsetLeft-40)+"px"
        }
        if(direction==="right"){
            if(imgCon.offsetLeft>=0){
                imgCon.lastElementChild.remove()
                imgCon.style.width=WIDTH+"px"
                moveBool=false
                return
            }
            imgCon.style.left=(imgCon.offsetLeft+40)+"px"
        }
    }
    function animation(){
        moveImg()
        autoMove()

    }
    function autoMove(){
        autoNum++
        if(autoNum===240){
            autoNum=0
            position++
            if(position>arr.length-1) position=0
            direction="left"
            createImg()
        }
    }
    function clickHandler(){
        if(moveBool) return
        autoNum=-120
        if(this===leftBn){
            position--
            if(position<0) position=arr.length-1
            direction="right"
            createImg()
            return
        }
        position++
        if(position>arr.length-1) position = 0
        direction="left"
        createImg()
    }
    function liClickHandler(){
        if(moveBool) return
        autoNum=-120
        if(this.index>position) direction="left"
        if(this.index<position) direction="right"
        position=this.index
        createImg()

    }
    function liBG(){
        if(prev){
            prev.style.background="rgba(255,0,0,0)"
        }
        prev=lis[position]
        prev.style.background="rgba(255,0,0,0.5)"
    }
</script>
</body>
</html>

  

原文地址:https://www.cnblogs.com/qinghao-qin/p/10158668.html

时间: 2024-10-01 14:17:36

轮播图---左右切换无长滚动效果轮播图-中级难度版的相关文章

JavaScript js无间断滚动效果 scrollLeft方法 使用模板

<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"/> <title> 无间断滚动scrollLeft套用模板 </title> <meta name="Keywords" content=""> <meta name="Description" content=""

【前端】javascript+jQuery实现旋转木马效果轮播图slider

实现效果: 实现原理: 技术栈: javascript+jQuery+html+css 实现步骤: // 0. 获取元素 // 1. 鼠标放置到轮播图上,显示两侧的控制按钮,移开后隐藏 // 2. 为两侧控制按钮绑定事件(调用同一个方法,只有一个参数,true为正向旋转,false为反向旋转) 实现代码: <!DOCTYPE html> <html> <head> <title>旋转木马效果轮播图</title> <meta charset

HDU 3249 Test for job (有向无环图上的最长路,DP)

 解题思路: 求有向无环图上的最长路,简单的动态规划 #include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <algorithm> #include <vector> #include <cmath> #define LL long long using namespace std; const int

JQuery图片轮播滚动效果(网页效果--每日一更)

今天,带来的是一个图片的轮播滚动效果! 先来看一下效果展示:http://webfront.verynet.cc/pc/index.html 原理很简单,设置一个定时器,使图片列表在每隔一段时间后滚动一次.而循环效果,就是在每一滚动的时候,将第一张图片放到最后一张的后面,详细请看代码. HTML结构代码如下: 1 <div class="content"> 2 <div class="box"> 3 /*滚动的盒子*/ 4 <ul id

介绍两个JQuery插件 — 滚动和轮播

1.滚动组件. 有时候需要在网页中的各个部分跳转,类似于回到首页的功能,给点动画当然是极好的.JQuery插件AnimateScroll就是解决这个问题的. 使用方法类似这样: $('#use').animatescroll({scrollSpeed:1500, easing:'easeOutCubic'}); //跳转到#use处 更多方法请访问项目主页. 2.轮播组件 这款轮播组件同样基于JQuery,可以用来做个牛逼哄哄的3D相册神马的. demo地址:http://tympanus.ne

小程序 - swiper除了左右切换还有上下滚动超出屏幕的内容

本来呢,我是有专门整理小程序恶心bug的文章的,每次只要添加汇总就好, 但是呢,鉴于这个问题的恶心程度,所以我把他单独拿出来说了. ----------------------------------------------------------------产品经理都说恶心的需求-------------------------------------------------------------------------- 要知道,在小程序里边是有一个封装好的swiper组件,专门用于轮播图

利用原生JS实现网页1920banner图滚动效果

内容描述:随着PC设备硬件性能的进步和分辨率的不断提高,现在主流网站逐渐开始采用1920banner图,为适应这一趋势,博主设计了1920banner图的滚动效果,代码利用了原生JS实现了1920banner图的切换效果,并针对低分辨率电脑设备进行了适配,实现了JS代码与HTML代码的完全分离,符合w3c的标准使用规范,希望能给各位开发者朋友以帮助和参考.如发现有缺陷和不足,欢迎大家予以指正,如有更好的意见或解决方法,可在评论区交流互动.一下为代码内容: <!DOCTYPE html> <

基于jquery多种切换效果的焦点图(兼容ie6)

随着html5和css3的诞生.各种非常酷.非常炫的网页焦点图在各个前端技术网上满天飞.基于html5和css3技术的焦点图有一个弊端就是要在ie9以上才支持.这让需兼容ie6到ie8的页面又爱又恨.下面为大家介绍一款完全基于juery的焦点图,而且这款插件完美支持ie6,多种百叶窗切换,效果还是相当赏目的.无图无真相,还是先上图 点击这里在线预览 点击这里下载源码 使用教程 这款插件代码很简洁,使用也非常简单.看截图 ok.今天就和大家分享到这里.周末好快,作为一名码农真是苦逼,明天还要早起,

Jquery 实现banner图滚动效果

html代码: <div id="focus"> <ul> <li><p>禅的修行应要无欲无求1</p><a href="http://www.jiyun360.com/topic/201405/index.aspx" target="_blank" title="浓情初夏,感恩回馈!"> <img src="images/shenxiao