美文网首页我爱编程
侧边工具条开发

侧边工具条开发

作者: 不要变成发抖的小喵喵喵喵喵喵 | 来源:发表于2018-03-19 17:23 被阅读0次

    使用Sass、RequireJS

    样式实现方式 使用Sass

    • 使用背景图片:精灵图,通过改变background-position

      1. HTML结构简单
      2. 兼容性良好,可以兼容到IE6
      3. 使用了大量的图片,对性能有一定的影响,并且不利于修改
        预览
    • 使用图标字体
      下载字体

      1. 避免了图片的使用,节约了性能,并且修改方便
      2. HTML结构稍显复杂
      3. 不兼容IE6和IE7
        预览
    • 利用befor和after伪类的方式

      1. 避免了图片的使用,节约了性能,并且修改方便
      2. HTML结构简单,但CSS稍显复杂
      3. 不兼容IE6和IE7
        预览

    逻辑实现 使用requirejs,jQuery

    1. 依赖jQuery,定义可以灵活设置滚动距离的scrollto模块
    // scrollto.js
    define(['jquery'], function($) {
        'use strict';
        function ScrollTo(opts){
            this.opts = $.extend({}, ScrollTo.DEFAULTS, opts);
            this.$el = $('html, body');
        }
        ScrollTo.DEFAULTS = {
            dest: 0,
            speed: 800
        };
        ScrollTo.prototype.move = function(){
            console.log('move')
            var opts = this.opts,
                dest = opts.dest;
            if($(window).scrollTop() != dest){
                if(!this.$el.is(':animated')){
                    this.$el.animate({
                        scrollTop: dest 
                    }, opts.speed);
                }
            }
        };
        ScrollTo.prototype.go = function(){
            var opts = this.opts.dest;
            if($(window).scrollTop() != dest){
                this.$el.scrollTop(dest);
            }
        };
        return {
            ScrollTo: ScrollTo
        }
    });
    
    1. 依赖jQuery、scrollto模块,定义返回顶部组件
    // backtop.js
    define(['jquery', 'scrollto'], function($, scrollto) {
        'use strict';
        function BackTop(el, opts){
            this.opts = $.extend({}, BackTop.DEFAULTS, opts);
            this.$el = $(el);
            this.scroll = new scrollto.ScrollTo({
                dest: 0,
                speed: this.opts.speed
            });
            if(this.opts.mode === 'move'){
                this.$el.on('click', $.proxy(this._move, this));
            }else{
                this.$el.on('click', $.proxy(this._go, this));
            }
            $(window).on('scroll', $.proxy(this._checkPosition, this));
        }
        BackTop.DEFAULTS = {
            mode: 'move',
            pos: $(window).height(),
            speed: 800
        };
        BackTop.prototype._move = function(){
            this.scroll.move();
        };
        BackTop.prototype._go = function(){
            this.scroll.go();
        };
        BackTop.prototype._checkPosition = function(){
            var $el = this.$el;
            if($(window).scrollTop() > this.opts.pos){
                $el.fadeIn();
            }else{
                $el.fadeOut();
            }
        };
        // jquery插件写法
        $.fn.extend({
            backtop: function(opts){
                return this.each(function(){
                    new BackTop(this, opts);
                });
            }
        })
        return {
            BackTop: BackTop
        };
    });
    
    1. 调用
    requirejs(['jquery', 'backtop'], function($, backtop){
    
        // 构造函数调用方式
        // new backtop.BackTop($('#backTop'), {
        //     mode: 'move',
        //     pos: 100,
        //     speed: 2000
        // });
    
        // jquery插件的写法
        $('#backTop').backtop({
            mode: 'move'
        });
    });
    

    预览

    Sass的基础知识

    • 安装koala支持编译sass文件
      可以设置中文,和编译后的方式

    使用

    • 嵌套:后代选择器
    ul{
        li{
            a{
    
            }
        }
    }
    ul li a{}
    
    • 变量: $符号开头;运算符两侧要有空格
    $toolbar-size: 52px;
    
    // 使用
    .toolbar{
        margin-left: -$toolbar-size / 2;
    }
    
    • 方法 @mixin用来定义; @include用来引用
    @mixin transition($transition){
        -webkit-transition: $transition;
        -moz-transition: $transition;
        -o-transition: $transition;
        -ms-transition: $transition;
        transition: $transition;
    }
    
    // 使用
    .toolbar-layer{
        @include transition(all 1s);
    }
    
    • @import引入外部文件 _mixin.scss 文件导入: 不需要_和后缀名
    @import "mixin";
    
    • 继承
    @extend .icon-wechat;
    

    RequireJS

    • 有效防止命名冲突
    • 声明不同js文件之间的依赖
    • 模块化的方式组织

    RequireJS常用的方法

    1. requirejs.config
    2. requirejs
    // main.js
    requirejs.config({
        // 直接改变基目录
        baseUrl: "js/lib",
        // 指定各个模块的加载路径。
        paths: { // 定义别名
            jquery: 'jquery.min'
        },
        // 专门用来配置不兼容的模块。没有采用AMD规范编写
        shim: {
         'jquery.scroll': {
              deps: ['jquery'],
              exports: 'jQuery.fn.scroll'
          }
       }
    });
    
    // 模块引入, 并调用
    requirejs(['jquery', 'validate'], function ($, validate) {
        $('body').css('background-color', 'red');
        console.log(validate.isEqual('1','2'));
    });
    
    1. define
    // validate.js
    define([
        'jquery' // 添加依赖
    ], function($) {
        'use strict';
        return {
            isEqual: function(str1, str2){
                return str1 === str2;
            }
        }
    });
    
    1. html中引入
    <script src="js/require.js" data-main="js/main"></script>
    
    • 在html文件里引入下载好的require.js,然后设置他的data-main为入口文件main.js
    • main.js里面先是设置了引入资源的别名等
    • 我们自己定义了一个validate.js的方法,并且把isEqual方法return了出去,所以在main里就可以引入,并且调用

    相关文章

      网友评论

        本文标题:侧边工具条开发

        本文链接:https://www.haomeiwen.com/subject/efuuqftx.html