• jQuery滚屏插件XSwitch.js


    1、需要有基本的HTML结构

    <div style="margin-top: 124px;" id="container" data-XSwitch>
        <div class="sections">
            <div class="main_about_product common_height section" ></div>
             <div class="main_product_trait common_height section" ></div>
             <div class="marin_system_show common_height section" ></div>
             <div class="marin_system_show common_height section" ></div>
            <div class="main_footer common_height section relative"></div>
        </div>
    </div>    

    2、引入需要的样式

    @charset "UTF-8";
     /*简单reset*/
            * {
                margin: 0;
                padding: 0;
            }
            /*必须,关系到单个page能否全屏显示*/
            html,
            body {
                height: 100%;
                overflow: hidden;
            }
            /*以下样式用来设置slider样式,可自行修改*/
            .pages {
                display:none;
                position:fixed;
                right: 10px;
                top: 49%;
                list-style: none;
            }
            .pages li {
                width: 8px;
                height: 8px;
                border-radius: 10%;
                background: #2aff00;
                margin: 8px 0px 0px 7px;
            }
            .pages li.active {
                margin-left: 0;
                width: 14px;
                height: 14px;
                border: 4px solid #2aff00;
                background: none;
            }
            #container,.sections,.section {
                /*必须,兼容,在浏览器不支持transform属性时,通过改变top/left完成滑动动画*/
                position: relative;
                /*必须,关系到单个page能否全屏显示*/
                height: 100%;
            }
            .section {
                /*有背景图时必须,关系到背景图能够全屏显示*/
                background-size: cover;
                background-position: 50% 50%;
            }

    3、引入滚屏插件XSwitch.js

    (function ($) {
        $.fn.XSwitch = function (options) {
            return this.each(function () {
                var _this = $(this),
                    instance = _this.data('XSwitch');
    
                if (!instance) {
                    instance = new XSwitch(_this, options);
                    _this.data('XSwitch', instance);
                }
    
                if ($.type(options) === 'string') {
                    return instance[options]();
                }
            });
        }
    
        $.fn.XSwitch.defaults = {
            selectors: {
                sections: '.sections',
                section: '.section',
                page: '.pages',
                active: '.active'
            },
            index: 0,
            easing: 'ease',
            duration: 500,
            loop: false,
            pagination: true,
            keyboard: true,
            direction: 'vertical',
            callback: ''
        }
    
    
        var _prefix = (function (temp) {
            var aPrefix = ['webkit', 'moz', 'o', 'ms'],
                props = '';
            for (var i = 0, len = aPrefix.length; i < len; i ++) {
                props = aPrefix[i] + 'Transition';
                if (temp.style[props] !== undefined) {
                    return '-' + aPrefix[i].toLowerCase() + '-';
                }
                return false;
            }
        })(document.createElement('div'));
    
        var XSwitch = (function () {
            function XSwitch(element, options) {
    
                this.settings = $.extend(true, $.fn.XSwitch.defaults, options);
                this.element = element;
                this.init();
            }
            XSwitch.prototype = {
    
                init: function () {
                    var _this = this;
                    this.selectors = this.settings.selectors;
    
                    this.sections = this.element.find(this.selectors.sections);
                    this.section = this.sections.find(this.selectors.section);
    
    
                    this.direction = this.settings.direction === 'vertical' ? true : false;
    
                    this.pagesCount = this.pagesCount();
    
                    this.index = (this.settings.index >=0 && this.settings.index < this.pagesCount) ? this.settings.index : 0;
    
                    this.canScroll = true;
    
    
                    if (!this.direction) {
                        _initLayout(_this);
                    }
    
                    if (this.settings.pagination) {
                        _initPaging(_this);
                    }
    
                    _initEvent(_this);
                },
    
                pagesCount: function () {
                    return this.section.size();
                },
    
                switchLength: function () {
                    return this.duration ? this.element.height() : this.element.width();
                },
    
                prve: function () {
                    var _this = this;
    
                    if (this.index > 0) {
                        this.index --;
                    } else if (this.settings.loop) {
                        this.index = this.pagesCount - 1;
                    }
                    _scrollPage(_this);
                },
    
                next: function () {
                    var _this = this;
                    if (this.index < this.pagesCount) {
                        this.index ++;
                    } else if (this.settings.loop) {
                        this.index = 0;
                    }
                    _scrollPage(_this);
                }
            };
    
            function _initLayout(_this) {
                var width = (_this.pagesCount * 100) + '%',
                    cellWidth = (100 / _this.pagesCount).toFixed(2) + '%';
    
                _this.sections.width(width);
                _this.section.width(cellWidth).css('float', 'left');
            }
    
            function _initPaging(_this) {
    
                var pagesClass = _this.selectors.page.substring(1),
                    pageHtml = '<ul class="' + pagesClass + '">';
                _this.activeClass = _this.selectors.active.substring(1);
    
                for (var i = 0, len = _this.pagesCount; i < len; i ++) {
                    pageHtml += '<li></li>';
                }
                pageHtml += '</ul>';
    
                _this.element.append(pageHtml);
                var pages = _this.element.find(_this.selectors.page);
                _this.pageItem = pages.find('li');
                _this.pageItem.eq(_this.index).addClass(_this.activeClass);
                if (_this.direction) {
                    pages.addClass('vertical');
                } else {
                    pages.addClass('horizontal');
                }
            }
    
            function _initEvent(_this) {
    
                _this.element.on('click', _this.selectors.page + ' li', function () {
                    _this.index = $(this).index();
                    _scrollPage(_this);
                });
    
                _this.element.on('mousewheel DOMMouseScroll', function (e) {
    
                    if (!_this.canScroll) {
                        return;
                    }
    
                    var delta = -e.originalEvent.detail || -e.originalEvent.deltaY || e.originalEvent.wheelDelta;
    
                    if (delta > 0 && (_this.index && !_this.settings.loop || _this.settings.loop)) {
                        _this.prve();
                    } else if (delta < 0 && (_this.index < (_this.pagesCount - 1) && !_this.settings.loop || _this.settings.loop)) {
                        _this.next();
                    }
                });
    
                if (_this.settings.keyboard) {
                    $(window).on('keydown', function (e) {
                        var keyCode = e.keyCode;
                        if (keyCode === 37 || keyCode === 38) {
                            _this.prve();
                        } else if (keyCode === 39 || keyCode === 40) {
                            _this.next();
                        }
                    });
                }
    
                $(window).resize(function () {
                    var currentLength = _this.switchLength(),
                        offset = _this.settings.direction ? _this.section.eq(_this.index).offset().top : _this.section.eq(_this.index).offset().left;
    
                    if (Math.abs(offset) > currentLength / 2 && _this.index < (_this.pagesCount - 1)) {
                        _this.index ++;
                    }
                    if (_this.index) {
                        _scrollPage(_this);
                    }
                });
                            if(index ==0){
                                _this.index = 0;
                            }else if(index == 1 || index == 2){
                                _this.index = index + 1;
                            }
                            _scrollPage(_this);
                        });
                });
    
                _this.sections.on('transitionend webkitTransitionEnd oTransitionEnd otransitionend', function () {
                    _this.canScroll = true;
                    if (_this.settings.callback && type(_this.settings.callback) === 'function') {
                        _this.settings.callback();
                    }
                });
                
            }
    
            function _scrollPage(_this) {
                var dest = _this.section.eq(_this.index).position();
                if (!dest) {
                    return;
                }
                _this.canScroll = false;
                if (_prefix) {
                    _this.sections.css(_prefix + 'transition', 'all ' + _this.settings.duration + 'ms ' + _this.settings.easing);
                    var translate = _this.direction ? 'translateY(-' + dest.top + 'px)' : 'translateX(-' + dest.left + 'px)';
                    _this.sections.css(_prefix + 'transform', translate);
                } else {
                    var animateCss = _this.direction ? {top: -dest.top} : {left: -dest.left};
                    _this.sections.animate(animateCss, _this.settings.duration, function () {
                        _this.canScroll = true;
                        if (_this.settings.callback && type(_this.settings.callback) === 'function') {
                            _this.settings.callback();
                        }
                    });
                }
                
                var screenIndex = _this.index;
                if(screenIndex ==0){
                    $('.header_tab_content li:eq('+ (screenIndex)+')').addClass("textColor_blue bottom_line");
                    $('.header_tab_content li:eq('+ (screenIndex)+')').siblings().removeClass("textColor_blue bottom_line");
                }else if(screenIndex == 1 || screenIndex == 2 || screenIndex == 3){
                    $('.header_tab_content li:eq('+ (screenIndex - 1)+')').addClass("textColor_blue bottom_line");
                    $('.header_tab_content li:eq('+ (screenIndex-1)+')').siblings().removeClass("textColor_blue bottom_line");
                }
    
                if (_this.settings.pagination) {
                    _this.pageItem.eq(_this.index).addClass(_this.activeClass).siblings('li').removeClass(_this.activeClass);
                }
            }
            
         
            return XSwitch;
        })();
    
    })(jQuery);
    
    $(function () {
        $('[data-XSwitch]').XSwitch();
    })

    4、通过给div#container添加属性data-XSwitch调用,插件将会使用默认配置

    5、若每个屏的高度刚好是整个屏幕高度,则不需要强制对每个屏幕设置高度。因为遇到的页面还有一个头部,使得高度没有沾满整个屏幕。需要手动给每个屏设置高度

    $(document).ready(function() {
        setCommonHgt();
    });
    /*设置每屏高度一致*/
    function setCommonHgt() {
        var windowHgt = $(document.body).outerHeight(true);
        var headerHgt = $('.main_header').height();
        var commonHgt = windowHgt - headerHgt;
        $('.common_height').css('height', commonHgt);
    }
    
    $(function() {
        // 添加监控页面窗口变化的方法
        $(window).resize(function() {
            location.reload();
            setCommonHgt();
        });
        
    });
  • 相关阅读:
    代码记录——phase16,block36
    代码记录——phase16,block32
    旋转中建立一个新的数组来存原图数据,测试
    微信小程序:工具配置 project.config.json
    微信小程序:全局配置app.json
    Python3:Requests模块的异常值处理
    微信小程序:本地资源图片无法通过 WXSS 获取,可以使用网络图片或者 base64或者使用image标签
    快速制作一款高逼格词云图
    jQuery事件
    jQuery:$(document).ready()用法
  • 原文地址:https://www.cnblogs.com/zhaomeizi/p/8478846.html
Copyright © 2020-2023  润新知