作者: admin

  • css3文本文章分段

    文章分段效果类似于:

    fenduan

    -moz-column-count:4;
    -webkit-column-count:4;
    column-count:4;

    http://www.myexception.cn/HTML-CSS/1437425.html

  • js获取选中的文本或者字符串

    HTML:

    <p>4月13日消息,据台湾媒体报道,32岁的孙燕姿(Sng Ee Tze)和后天将满34岁的荷兰籍印度尼西亚男友纳迪姆(Nadim Van Der Ros)交往5年,曾说过"有空就结婚"的她,果然趁着宣传期尾声,于3月31日在新加坡登记注册了!昨消息传开,她未否认,仅说会选择适当时间公布喜讯,所属"美妙音乐"则表示她个性低调,婚礼只会邀请双方亲友,也不会透露细节,但据新加坡可靠消息指出,婚宴订在5月初。</p>
    <button id="button">选中一些文字,然后点击本按钮</button>

     

    JS代码:

    var oBtn = document.getElementById("button");
    oBtn.onclick = function() {
     var userSelection, text;
     if (window.getSelection) { 
     //现代浏览器
       userSelection = window.getSelection();
     } else if (document.selection) { 
     //IE浏览器 考虑到Opera,应该放在后面
       userSelection = document.selection.createRange();
     }
     if (!(text = userSelection.text)) {  //IE支持有text属性来获取值
       text = userSelection.toString();   //现代浏览器有toString()获取值
     }
     alert(text);
    };

    注意:火狐不支持input  textarea 这些输入框的文本字符串选中获取,只能获取到选中在div p span的上的文本字符串上

    效果:http://www.zhangxinxu.com/study/201104/get-selection-text.html

  • js部分文本字符串默认被选中

    jstext

    文字的选中功能是不太常用的功能,多出现在文本编辑器中,或是文本域之类的光标处理上。所以呢,使用的一些属性也并不是常见的。在IE浏览器下使用的是createTextRange而Firefox/chrome等现代浏览器下使用的是setSelectionRange。

    假设文本域对象的名称是obj,则在IE及非IE浏览器下实现指定文字选中的代码如下:

    IE浏览器下:

    var range = obj.createTextRange(); 
    range.moveStart("character", 开始序号); 
    range.moveEnd("character", 结束序号);
    range.select();

     

    非IE浏览器下:

    obj.setSelectionRange(开始序号, 结束序号);
    obj.focus();

     

    所以,为了在各个浏览器下都能实现效果,我们需要将上面的两段代码组合一下,结果如下:

    if(obj.createTextRange){//IE浏览器
     var range = obj.createTextRange(); 
     range.moveEnd("character",结束序号);
     range.moveStart("character", 起始序号);
     range.select();
    }else{//非IE浏览器
     obj.setSelectionRange(起始序号, 结束序号);
     obj.focus();
    }

     

    代码进一步封装:

    https://sdeno.com/wp-content/uploads/2016/11/text_select.html

     

     http://www.zhangxinxu.com/wordpress/?p=755

     

  • gulp笔记|gulp案例教程

    gulp1

    前端自动化工具现在是五花八门,例举:grunt、gulp、webpack、yeoman、Bower还有百度的fis。东西多但是大致的功能就是帮我们减少一些重复性的工作。这里重点就结合下gulp,如果对grunt感兴趣可以参考《grunt入门教程》,网上都说gulp比grunt优秀其实它们的用法感觉也差不多。

     

    将以下内容保存为gulpfile.js

    var gulp = require('gulp');
    var cssmin = require('gulp-minify-css'); //压缩,删除注释、换行,合并选择器
    var cssver = require('gulp-make-css-url-version'); //为css的url背景图片添加mdb5,防止缓存
    var concat = require('gulp-concat');//合并css、js
    var uglify = require('gulp-uglify'); //js压缩
    var notify = require('gulp-notify'); //任务执行成功提示
    var htmlmin = require('gulp-htmlmin');//对html页面压缩处理
    var postcss = require('gulp-postcss'); //自动添加css前缀
    var autoprefixer = require('autoprefixer-core');//自动添加css前缀
    var rev = require('gulp-rev-append'); //为html的js、css添加版本号
    var cheerio = require('gulp-cheerio'); //操作html的dom,目的合并多个js或者css链接
    var useref = require('gulp-useref'); //将html中多个link和script各自合并成一个
    var del = require('del'); //删除文件
    var gulpif = require('gulp-if');
    var imageMin = require('gulp-imagemin'); //图片压缩
    var babel = require("gulp-babel");
    var fileinclude = require('gulp-file-include');
    var runSequence = require('run-sequence'); //同步执行
    
     
    
    gulp.task('fileinclude', function() {
    // 适配page中所有文件夹下的所有html,排除page下的include文件夹中html
      gulp.src(['view/**/*.html'])
        .pipe(fileinclude({
           prefix: '@@',
           basepath: '@file'
         }))
        .pipe(gulp.dest('src'))
        .on('end', function () {
          gulp.src('src/*.html')
        .pipe(useref())
        .pipe(gulpif('*.js', babel({presets: ['es2015']})))
        .pipe(gulpif('*.js', uglify()))
        .pipe(gulpif('*.css', cssmin({
           advanced: false,//类型:Boolean 默认:true [是否开启高级优化(合并选择器等)]
           compatibility: 'ie7',//保留ie7及以下兼容写法 类型:String 默认:''or'*' [启用兼容模式; 'ie7':IE7兼容模式,'ie8':IE8兼容模式,'*':IE9+兼容模式]
           keepBreaks: false,//类型:Boolean 默认:false [是否保留换行]
           keepSpecialComments: '*'//保留所有特殊前缀 当你用autoprefixer生成的浏览器前缀,如果不加这个参数,有可能将会删除你的部分前缀
         })))
         .pipe(gulpif('*.css',postcss([ autoprefixer({ browsers: ["> 0%"] }) ])))
         .pipe(gulpif('*.css',cssver()))
         .pipe(gulpif('*.html',htmlmin({
            removeComments: true,//清除HTML注释
            collapseWhitespace: true,//压缩HTML
            collapseBooleanAttributes: true,//省略布尔属性的值 <input checked="true"/> ==> <input />
            removeEmptyAttributes: true,//删除所有空格作属性值 <input id="" /> ==> <input />
            removeScriptTypeAttributes: true,//删除<script>的type="text/javascript"
            removeStyleLinkTypeAttributes: true,//删除<style>和<link>的type="text/css"
            minifyJS: true,//压缩页面JS
            minifyCSS: true//压缩页面CSS
         })))
         .pipe(gulpif('*.html',rev()))
       //.pipe(gulpif('*.html',cheerio(function ($, file) {
         // $('link').eq(0).remove();
         // $('head').append('<link rel="stylesheet" href="css/css.min.css?rev='+Math.random()+'">');
         // $('script').eq(0).remove();
         // $('head').append('<script src="js/all.min.js?rev='+Math.random()+'"></script>');
       //})))
        .pipe(gulp.dest('dist'))
    
       });
    });
    
     
    
    //把独立的js复制到dist/js的根目录下
    gulp.task('copy', function() {
       gulp.src('src/js/*.js')
         .pipe(gulp.dest('dist/js'))
    });
    
     
    
     
    
    //图片压缩
    gulp.task('img', function () {
      gulp.src('src/images/*.*')
       .pipe(imageMin({progressive: true}))
       .pipe(gulp.dest('dist/images'));
          console.log('33333333333');
    });
    
     
    
    //为此任务命名为watch
    // gulp.task('watch',function(){
    // gulp.watch('src/**/*.css',['sync']); //在css目录下的所有文件夹的后缀是css的文件,一旦修改就自动执行testCssmin任务
    // gulp.watch('src/**/*.js',['sync']);
    // });
    
     
    
    //修改view目录下的html就自动在src根目录下生成html
    gulp.task('watch_html',function(){
      gulp.watch('view/**/*.html',['fileinclude']); //在css目录下的所有文件夹的后缀是css的文件,一旦修改就自动执行testCssmin任务
    });
    
     
    
    //gulp的默认执行的任务就是watch任务
    //gulp.task('default',['testCssmin','js','html','watch'], function() {
    // // 将你的默认的任务代码放在这
    //});
    
     
    
    gulp.task('default',['fileinclude','img','copy'], function() {
    // 将你的默认的任务代码放在这
    });
    

    在命令环境中直接输入:gulp,就能到达以下效果:

    按先后顺序依次执行fileinclude、 img 、copy

    ———————————————以下是本人的前端自动化构建包—————————————————————-

    链接: https://pan.baidu.com/s/1Qcd69Vb9i9At2lZIXN3D7g 提取码: m9i7

    https://sdeno.com/wp-content/uploads/2017/09/gulp.rar

    使用步骤:

    1,解压目录后执行: npm install

    2,编辑html文件在view目录,推荐开启监听view目录里面的html变化后自动生成更新html到src根目录下

    ———————————————API学习—————————————————————-

    通配符路径匹配示例:

     “src/a.js”:指定具体文件;
     “*”:匹配所有文件 例:src/*.js(包含src下的所有js文件);
     “**”:匹配0个或多个子文件夹 例:src/**/*.js(包含src的0个或多个子文件夹下的js文件);
     “{}”:匹配多个属性 例:src/{a,b}.js(包含a.js和b.js文件) src/*.{jpg,png,gif}(src下的所有jpg/png/gif文件);
     “!”:排除文件 例:!src/a.js(不包含src下的a.js文件);
    
    案例:
    var gulp = require('gulp'),
        less = require('gulp-less');
     
    gulp.task('testLess', function () {
      //gulp.src('less/test/style.less')
      gulp.src(['less/**/*.less','!less/{extend,page}/*.less'])
        .pipe(less())
        .pipe(gulp.dest('./css'));
    });

     

     

    gulp.task(name[, deps], fn)

    说明:task定义一个gulp任务;
     name: 类型(必填):String 指定任务的名称(不应该有空格);
     deps: 类型(可选):StringArray,该任务依赖的任务(注意:被依赖的任务需要返回当前任务的事件流,请参看下面示例);
     fn: 类型(必填):Function 该任务调用的插件操作;

    gulp.task('testLess', function () {
      return gulp.src(['less/style.less']) //这里要注意,添加了return
      .pipe(less())
      .pipe(gulp.dest('./css'));
    });
     
    gulp.task('minicss', ['testLess'], function () { //执行完testLess任务后再执行minicss任务
      gulp.src(['css/*.css'])
      .pipe(minifyCss())
      .pipe(gulp.dest('./dist/css'));
    });

     

     

    gulp.watch(glob [, opts], tasks) or gulp.watch(glob [, opts, cb])
    说明:watch方法是用于监听文件变化,文件一修改就会执行指定的任务;
    glob: 需要处理的源文件匹配符路径。类型(必填):String or StringArray;
    opts: 类型(可选):Object 具体参看https://github.com/shama/gaze;
    tasks: 类型(必填):StringArray 需要执行的任务的名称数组;
    cb(event): 类型(可选):Function 每个文件变化执行的回调函数;

    gulp.task('watch1', function () {
      gulp.watch('less/**/*.less', ['testLess']);
    });
     
    gulp.task('watch2', function () {
      gulp.watch('js/**/*.js', function (event) {
          console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
      });
    });

     

     http://www.ydcss.com/archives/424

     

  • node.js网站发布器—forever

    类似的还有pm2,《node.js网站发布工具模块—pm2

    Github地址:https://github.com/nodejitsu/forever

    forever安装
    // 记得加-g,forever要求安装到全局环境下
    sudo npm install forever -g

     

     

    forever使用说明
    // 1. 简单的启动
    forever start app.js
    
    // 2. 指定forever信息输出文件,当然,默认它会放到~/.forever/forever.log
    forever start -l forever.log app.js
    
    // 3. 指定app.js中的日志信息和错误日志输出文件,
    //  -o 就是console.log输出的信息,-e 就是console.error输出的信息
    forever start -o out.log -e err.log app.js
    
    // 4. 追加日志,forever默认是不能覆盖上次的启动日志,
    //  所以如果第二次启动不加-a,则会不让运行
    forever start -l forever.log -a app.js
    
    // 5. 监听当前文件夹下的所有文件改动
    forever start -w app.js

     

     

    显示所有运行的服务
    forever list
    文件改动监听并自动重启
    // 1. 监听当前文件夹下的所有文件改动(不太建议这样)
    forever start -w app.js
    停止操作
    // 1. 停止所有运行的node App
    forever stopall
    
    // 2. 停止其中一个node App
    forever stop app.js
    // 当然还可以这样
    // forever list 找到对应的uid,然后:
    forever stop uid
    重启操作

    重启操作跟停止操作保持一致。

    // 1. 启动所有
    forever restartall

     http://blog.csdn.net/jbboy/article/details/35281225