• 自己写的carousel


    可以 

    function appendRight() {
    
      //alert("right");
    
      lastItem = itemsRight[urls.length - 1];
    
      firstItem = itemsRight[1];
    
      now = parseInt(($(lastItem).attr("id")).split("_")[1]);
    
     
    
      $(".slidePics").prepend(itemsRight[urls.length - 2]);
    
      moveRight();
    
      itemsRight.unshift(firstItem); //新元素添加到数组开始
    
      itemsRight.pop(); //移除最后一个元素
    
     }

     

    太奇怪了吧!!!!!!!!!!!!!!!!!

     

     

    不可以

     

    function appendRight() {
    
      //alert("right");
    
      lastItem = itemsRight[urls.length - 2];
    
      firstItem = itemsRight[1];
    
      now = parseInt(($(lastItem).attr("id")).split("_")[1]);
    
     
    
      $(".slidePics").prepend(lastItem);
    
      moveRight();
    
      itemsRight.unshift(firstItem); //新元素添加到数组开始
    
      itemsRight.pop(); //移除最后一个元素
    
     }

    完整的分步加载:

    //起点值start
    var start;
    
    $('.slidePics').on("touchstart", getStart, this);
    $('.slidePics').on("touchmove", getDirection, this);
    $('.slidePics').on("touchend", updateUrl, this);
    
    var urls = ["img/t4_01.jpg", "img/t4_02.jpg", "img/t4_03.jpg", "img/t4_04.jpg", "img/t4_05.jpg"];
    var itemsLeft = [];
    var itemsRight = [];
    var left = false;
    var firstItem = null;
    var lastItem = null;
    var now;
    var switchLeft = false;
    var switchRight = false;
    var touched = false;
    
    if (urls.length > 1) {
        for (var i = 1; i <= urls.length; i++) {
            var itemleft = '<div class="event_one animate" style="left:800px;" id="event_' + i + '">' +
                '<div class="imgInfo">' + i + '/' + urls.length + '</div>' +
                '<div class="mediaSelf">' +
                '<img src="' + urls[i - 1] + '">' +
                '</div>' +
                '</div>' +
                '</div>';
            var itemright = '<div class="event_one animate" style="left:-800px;" id="event_' + i + '">' +
                '<div class="imgInfo">' + i + '/' + urls.length + '</div>' +
                '<div class="mediaSelf">' +
                '<img src="' + urls[i - 1] + '">' +
                '</div>' +
                '</div>' +
                '</div>';
            itemsLeft.push(itemleft);
            itemsRight.push(itemright);
        }
    
    }
    
    
    function getStart(e) {
        start = parseInt(e.targetTouches[0].pageX);
    }
    
    function getDirection(e) {
        var move = parseInt(e.targetTouches[0].pageX);
        if (start < move) {
            left = false;
        } else if (start > move) {
            left = true;
        }
    }
    
    function updateUrl() {
        if (!touched) {
            touched = true;
            //这个不能一起隐藏,会使初始化的3个div也被取消动画
            //$(".event_one").removeClass("animate");
            if ($('.event_one').length < urls.length) {
                if (left) {
                    appendLeft();
                } else {
                    appendRight();
                }
            } else {
                //alert("finished");
                if (left) {
                    moveLeft();
                } else {
                    moveRight();
                }
            }
        }
    }
    
    function appendLeft() {
        //alert("left");
        lastItem = itemsLeft[urls.length - 1];
        firstItem = itemsLeft[1];
    
        if (!switchRight) {
            now = parseInt(($(firstItem).attr("id")).split("_")[1]);
            $(".slidePics").append(itemsLeft[2]);
            switchLeft = true;
        } else {
            $(".slidePics").append(itemsRight[2]);
            switchLeft = false;
        }
    
    
        //动作在append计数之前
        moveLeft();
    
        itemsLeft.shift(); //移除最前一个元素 
        itemsLeft.push(lastItem); //新元素添加到数组结尾
    
    
    
    }
    
    function appendRight() {
    
        lastItem = itemsRight[urls.length - 1];
        firstItem = itemsRight[1];
        if (!switchLeft) {
            now = parseInt(($(lastItem).attr("id")).split("_")[1]);
            $(".slidePics").prepend(itemsRight[urls.length - 2]);
    
    
            switchRight = true;
        } else {
    
            $(".slidePics").prepend(itemsLeft[urls.length - 2]);
            switchRight = false;
        }
    
    
        //动作在append计数之前
        moveRight();
    
        itemsRight.unshift(firstItem); //新元素添加到数组开始
        itemsRight.pop(); //移除最后一个元素
    
    
    }
    
    
    function moveLeft() {
        var next = now > urls.length - 1 ? 1 : now + 1;
        var pre = now <= 1 ? urls.length : now - 1;
    
        console.log("pre", pre, "now", now, "next", next, switchRight, "touched", touched);
    
    
        //准备下一张
        $("#event_" + next).addClass("animate");
        $("#event_" + next).css("left", "800px");
    
        //移入
        //$("#event_"+now).css("left","800px");
        $("#event_" + now).addClass("animate");
        $("#event_" + now).css("left", "0px");
    
    
        //移出正常
        //$("#event_" + pre).addClass("animate");
        $("#event_" + pre).css("left", "-800px");
        //经测试,以下两句即可避免使用全部remove
        $("#event_" + (pre - 1)).removeClass("animate");
        $("#event_" + (next + 1)).removeClass("animate");
    
        touched = false;
        now++;
        if (now > urls.length) {
            now = 1;
        }
    }
    
    function moveRight() {
        var pre = now > urls.length - 1 ? 1 : now + 1;
        var next = now <= 1 ? urls.length : now - 1;
        console.log("pre", pre, "now", now, "next", next, switchLeft, "touched", touched);
    
    
    
        //准备下一张
        $("#event_" + next).addClass("animate");
        $("#event_" + next).css("left", "-800px");
    
        //移入
        //$("#event_"+now).css("left","-800px");
        $("#event_" + now).addClass("animate");
        $("#event_" + now).css("left", "0px");
    
        //移出正常
        //$("#event_" + pre).addClass("animate");
        $("#event_" + pre).css("left", "800px");
        //经测试,以下两句即可避免使用全部remove
        $("#event_" + (pre + 1)).removeClass("animate");
        $("#event_" + (next - 1)).removeClass("animate");
    
        touched = false;
        now--;
        if (now < 1) {
            now = urls.length;
        }
    }
    本地分步carousel

    双向切换的时候有一步延迟,连续点击还没有很有效的屏蔽。

    就是由于上面那个奇怪的不同,搞了很多天。

    苦逼的没有animate()方法,硬生生的用css3:

    html一开始就加载3张图片:

    <div class="slidePics">
        <div class="event_one event_5 animate" style="left:-800px;" data-id="event_5">
                <div class="imgInfo">5/5</div>
                <div class="mediaSelf">
                    <div style="background-image:url(img/t4_05.jpg)"></div>
                </div>
        </div>
        <div class="event_one event_1 animate" data-id="event_1">
                <div class="imgInfo">1/5</div>
                <div class="mediaSelf">
                    <div style="background-image:url(img/t4_01.jpg)"></div>
                </div>
        </div>
        <div class="event_one event_2 animate" style="left:800px;" data-id="event_2">
                <div class="imgInfo">2/5</div>
                <div class="mediaSelf">
                    <div style="background-image:url(img/t4_02.jpg)"></div>
                </div>
        </div>
    </div>
    <div class="slideBack">
        <div></div>
    </div>
    初始模板

    下面那个back独立在外面absolute,index较高,用来接受返回按钮的事件。

    .event_one{
        position: absolute;
        left: 0;
         800px;
        height: 480px;
        display: none;
    }
    .animate{
        display: block;
        -webkit-transition: 0.7s ease-out all;
    }

    图片的居中问题用img tag或者背景做分别是:

    .mediaSelf div{
         800px;
        height: 394px;
        display: block;

      background-size: contain;
      background-repeat: no-repeat;
      background-position: center;

    
    }
    .mediaSelf img{
        position: relative;
        height: 100%;
         auto;
        margin: 0 auto;
    }

    如果用img tag,需要js把图片等比例缩放以后,除以二居中。

    css的比较简单,background-size: contain;但也做不到垂直居中,只是把图片完整显示出来。

  • 相关阅读:
    超酷震撼 HTML5/CSS3动画应用及源码
    精美jQuery插件及源码 前端开发福利
    web前端炫酷实用的HTML5应用和jQuery插件
    8个web前端的精美HTML5 & CSS3效果及源码下载
    分享web前端七款HTML5 Loading动画特效集锦
    7款超酷HTML5 3D动画精选应用及源码
    8个WEB前端创意HTML5动画应用精选
    让人心动的jQuery插件和HTML5动画
    华丽的HTML5/jQuery动画和应用 前端必备
    炫酷实用的jQuery插件 涵盖菜单、按钮、图片
  • 原文地址:https://www.cnblogs.com/haimingpro/p/4149991.html
Copyright © 2020-2023  润新知