• 移动web中的幻灯片切换效果


    百度或者谷歌下类似的插件有很多,原理都差不多,关键适合自己的项目,如果移动端要引入jquery这么大的插件,只能呵呵了....

    下面是工作中针对webkit内核的浏览器写的,html很简单:

    <section id="banner" class="banner z-c" >
                <ul class="z-c-w">
             <li class="z-c-i"></li>
           </
    ul> </section>

    上面的li标签实际都可以动态生成的,这里只是为了方便阅读才加上。

    css:

    .banner {
            position:relative;
            overflow:hidden;
            border-bottom:1px solid #FFFDFB;
            font-size:0;
        }
        .z-c-w {
            display:-webkit-box;
            width:100%;
            height:100%;
        }
        .z-c-w.transitionable {
            -webkit-transition:-webkit-transform 0.25s ease;
        }
        .z-c-i {
            display:block;
            width:100%;
        }
        .z-c-p {
            position: absolute;
            margin-top: -13px;
            width: 100%;
            text-align: center;
        }
        .z-c-p span {
            display:inline-block;
            width:6px;
            height:6px;
            margin:0 4px;
            border-radius:50%;
            border:1px solid #7cca26;
        }
        .z-c-p span.active {
            background-color:#7cca26;
        }
        .z-c-i .img-wrapper{
            display: inline-block;
            width:100%;
            height:100%;
            background: #fafafa url('../images/cart_icon.png') no-repeat center center;
        }
        .z-c-i a{display: block;}
        .z-c-i .img-wrapper img{width:100%;}

    javascript:需要引入zepto,zepto压缩后不到10k,是移动端开发不错的js库。

    /*
     * carousel
     */
    ;(function($) {
        $.extend($.fn, {
            carousel : function(obj) {
                this.each(function(){
                    // 当前Zepto对象
                    var $self = $(this);
    
                    var dom = {
                        wrap : $self.find(".z-c-w"),
                        items : $self.find(".z-c-i"),
                        pageControl : null,
                        pageItems : null
                    };
                    var settings = {
                        width : dom.wrap.width(),
                        count : dom.items.size(),
                        index : 0,
                        startX : 0,
                        startY : 0,
                        movingX : false,
                        movingY : false,
                        distance : 0,
                        pageControl : obj ? (obj.showControl ? true : false) : true,
                        autoScroll : obj ? (obj.autoScroll ? true : false) : false
                    };
                    var funs = {
                        init : function() {
                            funs.initUI();
                            funs.bindEvent();
                            if (settings.autoScroll) {
                                settings.interval = setInterval(funs.autoScroll, 5000);
                            }
                        },
                        bindEvent : function() {
                            dom.wrap.off().on({
                                "touchstart" : function(e) {

                                    e.stopPropagation();
                       e.preventDefault();

                                    settings.width = dom.wrap.width();
                                    settings.distance = settings.width / 4;
                                    
                                    settings.startX = e.touches[0].pageX;
                                    settings.startY = e.touches[0].pageY;
    
                                    if (settings.autoScroll){
                                        clearInterval(settings.interval);
                                        //隐藏最后一个循环页
                                        dom.dupItem.css("visibility", "hidden");
                                    }
                                },
                                "touchmove" : function(e) {
                                    e.stopPropagation();
                       e.preventDefault();
    var currentX = e.touches[0].pageX; var currentY = e.touches[0].pageY; var dX = currentX - settings.startX; var dY = currentY - settings.startY; if (settings.movingX) { e.stopPropagation(); e.preventDefault(); var x = 0; if (settings.index == 0 && dX > 0 || settings.index == settings.count - 1 && dX < 0) { x = -settings.index * settings.width + dX / 3; } else { x = -settings.index * settings.width + dX; } dom.wrap.css("-webkit-transform", "translate3d(" + x + "px,0,0)"); } else if (!settings.movingY) { e.stopPropagation(); var dX = Math.abs(dX); var dY = Math.abs(dY); if (dX > 10 && dX/dY > 1) { settings.movingX = true; settings.movingY = false; } else if(dY > 10 && dX/dY < 1) { settings.movingY = true; settings.movingX = false; } } }, "touchend" : function(e) { e.stopPropagation();
                       e.preventDefault();
    settings.movingY = false; if (settings.movingX) { settings.movingX = false; var currentX = e.changedTouches[0].pageX; var distance = currentX - settings.startX; if (Math.abs(distance) >= settings.distance) { settings.index = settings.index - Math.abs(distance) / distance; settings.index = settings.index < 0 ? 0 : (settings.index > (settings.count - 1) ? (settings.count - 1) : settings.index); } funs.continueMove(); } if (settings.autoScroll) { settings.interval = setInterval(funs.autoScroll, 5000); setTimeout(function(){ dom.dupItem.css("visibility", "visible"); },250); } }, "webkitTransitionEnd" : function() { dom.wrap.removeClass("transitionable"); if(settings.index >= settings.count){ settings.index %= settings.count; dom.wrap.css("-webkit-transform", "translate3d(" + -settings.index * settings.width + "px,0,0)"); } } }); dom.pageControl.off().on("touchstart", function(e) { settings.width = dom.wrap.width(); settings.distance = settings.width / 4; var touchX = e.touches[0].pageX; var currentX = $(dom.pageItems[settings.index]).offset().left; if (touchX > currentX && settings.index < (settings.count - 1)) { settings.index += 1; funs.continueMove(); } else if (touchX < currentX && settings.index > 0) { settings.index -= 1; funs.continueMove(); } }); $(window).on({ "resize" : function() { funs.adjustPOS(); }, "orientationchange" : function() { funs.adjustPOS(); } }); }, adjustPOS : function() { settings.width = dom.wrap.width(); settings.distance = settings.width / 5; dom.wrap.css("-webkit-transform", "translate3d(" + -settings.index * settings.width + "px,0,0)"); }, continueMove : function() { dom.wrap.addClass("transitionable"); dom.pageItems.removeClass("active"); $(dom.pageItems[settings.index % settings.count]).addClass("active"); dom.wrap.css("-webkit-transform", "translate3d(" + -settings.index * settings.width + "px,0,0)"); }, initUI : function() { settings.distance = settings.width / 4; if (settings.pageControl) { $self.append(funs.createPageDOM()); } dom.pageControl = $self.find(".z-c-p"); dom.pageItems = $self.find(".z-c-p>span"); if(settings.autoScroll){ //重复第一个页面用作尾部的循环 funs.dupFirstItem(); } }, dupFirstItem : function() { dom.dupItem = $self.find(".z-c-i:first-child").clone(); $(dom.wrap).append(dom.dupItem); }, createPageDOM : function() { var pageControlToRemove = $self.find(".z-c-p"); if (pageControlToRemove.length) { pageControlToRemove.remove(); } var pageFragment = document.createDocumentFragment(); var pageDiv = document.createElement("div"); pageDiv.setAttribute("class", "z-c-p"); pageFragment.appendChild(pageDiv); var pageItemSpan = document.createElement("span"); pageItemSpan.setAttribute("class", "active"); pageDiv.appendChild(pageItemSpan); for (var i = 1; i < settings.count; i++) { pageItemSpan = document.createElement("span"); pageDiv.appendChild(pageItemSpan); } return pageFragment; }, clear : function() { var pageControlToRemove = $self.find(".z-c-p"); if (pageControlToRemove.length) { pageControlToRemove.remove(); } dom.wrap.empty().css("-webkit-transform", "translate3d(0,0,0)"); }, autoScroll : function() { if(dom.wrap.width() > 0 && dom.items.width() > 0){ settings.index++; settings.width = dom.wrap.width(); funs.continueMove(settings.index); } } }; funs.init(); $self.clear = funs.clear; }); return this; } }); })(Zepto);

     调用方法:

    $("#banner").carousel({
                    showControl: true,
                    autoScroll: true
    });

     ps:切记在触屏事件的时候加上e.stopPropagation();和e.preventDefault,不然在android低端浏览器会有卡顿现象
     

  • 相关阅读:
    数据字典的应用实例
    数据字典动态性能表(视图)
    MySQL exists的用法介绍
    Don’t Assume – Per Session Buffers
    MySQL 5.5: InnoDB Change Buffering
    Fixing Poor MySQL Default Configuration Values
    A quest for the full InnoDB status
    MySQL : interactive_timeout v/s wait_timeout
    Mydumper & Myloader Documentation
    InnoDB Plugin文件格式(概述)
  • 原文地址:https://www.cnblogs.com/hutuzhu/p/4316248.html
Copyright © 2020-2023  润新知