ネイティブJSの完全なカルーセル図

ネイティブJSによって書かれた比較的完全なカルーセル画像を共有し、フォーカスを追跡し、フォーカスを入力して画像を切り替え、矢印をクリックして画像を切り替えます。これは比較的完全なカルーセル画像です
。1つ目はレイアウトの問題です。1つのボックスを使用してすべての画像をインストールし、1つ使用してくださいUL LIには6つの画像が含まれています。決められた配置を使用して、すべての画像をボックスの左側に配置します。次に、ULをボックスの右側に配置します。画像を右から1つずつ切り取り、ボックス内の画像を同時に左に切り取ります。最後の画像がカットされると、最初の画像がボックスの右側にすばやく引っ張られてから、画像が切り取られます。最初の画像が入ります。ループし続けます。以下はレイアウトです。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <link rel="stylesheet" type="text/css" href="css/轮播图.css"/>
    </head>
    <body>
        <div id="box">
            <ul id="imglist">
                <li><a href="#"><img src="img/1.jpg"/></a></li>
                <li><a href="#"><img src="img/2.jpg"/></a></li>
                <li><a href="#"><img src="img/3.jpg"/></a></li>
                <li><a href="#"><img src="img/4.jpg"/></a></li>
                <li><a href="#"><img src="img/5.jpg"/></a></li>
                <li><a href="#"><img src="img/6.jpg"/></a></li>
            </ul>
            <div id="btn">
                <p id="left"></p>
                <p id="right"></p>
            </div>
            <div id="sprilt">
                <p id="num">
                <!--<span class="active">1</span>
                <span>2</span>
                <span>3</span>
                <span>4</span>
                <span>5</span>
                <span>6</span>
                </p>-->
            </div>
        </div>
    </body>
    <script src="js/myjquery.js" type="text/javascript" charset="utf-8"></script>
    <script src="js/轮播图.js" type="text/javascript" charset="utf-8"></script>
</html>

CSSスタイル

*{
    padding: 0;
    margin: 0;
}
li{
    list-style: none;
}
#`box{
    
    `
    width:310px;
    height:220px;
    border: 1px solid #999;
    margin: 50px auto;
    position: relative;
    cursor: pointer;
    overflow: hidden;
}
#box #imglist li{
    width:310px;
    height:220px;
    float:left;
    position: absolute;
    left:0;
    top:0;
    cursor: pointer;
}
#box #imglist li img{
    width:310px;
    height:220px;
    cursor: pointer;
}
#btn{
    width:100%;
    height:36px;
/*  background: red;*/
    position: absolute;
    left:50%;
    margin-left: -155px;
    top:50%;
    margin-top: -18px;
    display: none;
}
#btn #left{
    width:20px;
    height:36px;
    position: absolute;
    left:6px;
    top:0;
    background: url(../img/icon.png) no-repeat 0 0;
    cursor: pointer;
}
#btn #right{
    width:20px;
    height:36px;
    position: absolute;
    right:6px;
    top:0;
    background: url(../img/icon.png) no-repeat -10px -44px;
    cursor: pointer;
}
#sprilt{
    width:100%;
    height:18px;
    /*background: #999999;*/
    position: absolute;
    left:0;
    bottom:0;
}
#num{
    width:132px;
    height:18px;
    margin: 0 auto;
    background: #d8d8d8;
    padding-left: 4px;
    border-radius: 8px; 
}
#sprilt span{
    display: block;
    width:18px;
    height:18px;
    line-height:18px;
    text-align:center;
    border-radius: 50%;
    background:#999999;
    float:left;
    margin-right: 4px;
    color:#FFFFFF;
    cursor:pointer;
}
#sprilt span.active{
    background:red;
}

最後に、JSの特殊効果があります
/ *
原則:
1.画像の数と同じフォーカスマップを作成します;
2.すべての画像の位置:ボックスの右側に配置すると、最初の画像が最初に表示されます
3.フォーカスを追跡し、クリックしますフォーカスが対応する画像に切り替わり
ます。4.上ボタンと下ボタンで対応する画像に切り替えることができます
5.タイマーがオンになっています:自動カルーセル(シームレス)、マウスが停止し、マウスを離れるとカルーセルを続行します
* /

var oBox = getid('box');
var oImglist = getid('imglist');
var aLis = oImglist.getElementsByTagName('li');
var oLeft = getid('left');
var oRight = getid('right');
var oNum = getid('num');
var aSpans = oNum.getElementsByTagName('span');
var scrollW=aLis[0].offsetWidth;
var oBtn = getid('btn');
//将所有图片置于可视区右边,并将第一张图片放到可视区中
for(var i = 0; i < aLis.length; i++) {
    css(aLis[i], 'left', aLis[0].offsetWidth + 'px');
}
aLis[0].style.left = 0;

//创键焦点
function creatSpan() {
    
    
    var html = '';
    for(var i = 0; i < aLis.length; i++) {
        html += '<span>' + (i + 1) + '</span>';
    }
    oNum.innerHTML = html;
    aSpans[0].className = 'active';
}
creatSpan();

//开启定时器进行轮播
var timer = null;
clearInterval(timer);
timer = setInterval(autoPlay, 2000);
var num=0;//轮播图片当前的下标

//正常情况(往右轮播)
function autoPlay() {
    
    
        //将旧的图片移出可视区
        startMove(aLis[num],{
   
   'left':-scrollW});
        //判断是都到达最后一张图片
        num=++num>aLis.length-1?0:num;//
        //将图片快速扯到可视区右边
        css(aLis[num],'left',scrollW+'px');
        //将新的图片移入,即从右往左移入就是left从scrollW变为0进入到可视区位置
        startMove(aLis[num],{
   
   'left':0});
//      console.log('ok');
        light();
}
//切换上一张图片
function prev() {
    
    
        //将旧的图片往右移出可视区
        startMove(aLis[num],{
   
   'left':scrollW});
        //判断是都到达第一张图片
        num=--num<0?aLis.length-1:num;
        css(aLis[num],'left',-scrollW+'px');
        //将新的图片移入
        startMove(aLis[num],{
   
   'left':0});
//      console.log('ok');
        light();
}

//将焦点变为高亮,并且跟随图片
function light(){
    
    

    for(var i = 0; i < aSpans.length; i++) {
        aSpans[i].className='';
    }
    aSpans[num].className='active';
}

//鼠标经过停止轮播
oBox.onmouseenter=function(){
    
    
    clearInterval(timer);
    css(oBtn,'display','block');
}
oBox.onmouseleave=function(){
    
    
    clearInterval(timer);
    timer=setInterval(autoPlay, 2000);
    css(oBtn,'display','none');
}
//箭头控制轮播
//控制点击箭头的时间间隔
var oldtime=new Date();
oLeft.onclick=function(){
    
    
    //符合每两次点击时间超过半秒,否则点击作废
    if(new Date()-oldtime>500){
        prev();
        oldtime=new Date();//重新将最新时间赋予它
    }
}
oRight.onclick=function(){
    
    
    //符合每两次点击时间超过半秒,否则点击作废
    if(new Date()-oldtime>500){
        autoPlay(); 
        oldtime=new Date();//重新将最新时间赋予它
    }
}

//鼠标移到哪个焦点就显示对应的图片
for(var i=0;i<aSpans.length;i++){
    aSpans[i].index=i;//当前触摸到的焦点位置
    aSpans[i].onmouseenter=function(){
    
    
        var index=this.index;
        if(index>num){
   
   //当前焦点位置跟当前轮播图片位置比较
            //从右边切进来
        //将焦点位置图片快速放到可视区右边
        css(aLis[index],'left',scrollW+'px');
        //将当前轮播的图片往左边移出可视区
        startMove(aLis[num],{
   
   'left':-scrollW});
        //将新的图片移入
        startMove(aLis[index],{
   
   'left':0});
//      console.log('ok');
        num=index;
        light();
        }

        if(index<num){
   
   //当前焦点位置跟当前轮播图片位置比较
            //从左边切进来
        //将焦点位置图片快速放到可视区左边
        css(aLis[index],'left',-scrollW+'px');
        //将当前轮播的图片往右边移出可视区
        startMove(aLis[num],{
   
   'left':scrollW});
        //将新的图片移入
        startMove(aLis[index],{
   
   'left':0});
//      console.log('ok');
        num=index;
        light();
        }
    }
}

以下は操作のレンダリングです
ランニング効果チャート

おすすめ

転載: blog.csdn.net/Smell_rookie/article/details/82024616