作者: admin

  • js判断用户是否停留在当前页面

    使用情景:我发现视频网站只有当我们切换到当前的页面时,广告才播放;如果偷偷切换到其他页面了广告就暂停了,必须要重新切换回来广告才会重新播放。

    直接上代码:

    var a=0;
    
    document.addEventListener("visibilitychange", function() {
      ++a;
      document.title=a;
      //document.title=document.hidden; //如果页面隐藏值true ,用户在当前页值为false
      //document.title=document.visibilityState; //显示visible 隐藏hide
    }, false);

     

    效果:

    当我们停留在当前页是不会触发的,只要我们切换到其他页面就会触发:

     

    在当我们切回来时候,也会触发一次,更新状态

     

     

    兼容性写法:

    var hidden, visibilityChange;
    
    if (typeof document.hidden !== "undefined") {
       hidden = "hidden";
       visibilityChange = "visibilitychange";
    } else if (typeof document.mozHidden !== "undefined") {   //火狐
       hidden = "mozHidden";
       visibilityChange = "mozvisibilitychange";
    } else if (typeof document.msHidden !== "undefined") {    //ie10
       hidden = "msHidden";
       visibilityChange = "msvisibilitychange";
    } else if (typeof document.webkitHidden !== "undefined") {  //谷歌
       hidden = "webkitHidden";
       visibilityChange = "webkitvisibilitychange";
    }
    
    // 添加监听器
    document.addEventListener(visibilityChange, function() {
       console.log("当前页面是否被隐藏:" + document[hidden]);
    }, false);

    (注意:这个方法有一个bug,如果把页面独立出来不看页面函数也不会触发)

     

     

    推荐:

    用焦点和失去焦点 的方法,监听整个window

    var count = 1;
    var interval_output = null;
    
    function output_number() {
       count++;
       document.title=count;
    }
    
    
    // window 失去焦点,停止输出
    window.onblur = function() {
       clearInterval(interval_output);
    };
    
    
    // window 每次获得焦点
    window.onfocus = function() {
    // 每 1 秒在页面输出一个数
      interval_output = setInterval(function() {
          output_number();
      }, 1000);
    }

     

     

     

     

  • apply、call和bind区别

    这三者的共同作用都是改变函数的环境,也就是改变函数里面的this。

    var name='张'
    var age=18
    
    var obj={
     name:'三',
     age:17,
    }
    
    function test(c1='',c2='') {
        console.log(this.age+c1+c2)
    }
    
    test(); //18,直接调用this是

     

    :它们第一参数都是要传入一个对象

    test.call(obj);  //17
    test.apply(obj); //17
    test.bind(obj)();//17, bind返回的是一个函数,所以也可以这么写 (test.bind(obj))()

     

     

    :传递的参数不同

    test.call(obj,'a','b');     //17ab
    test.apply(obj,['a','b']);  //17ab
    test.bind(obj,'a','b')();   //17ab

     

    总结:

    第一个参数都传对象;

    bind返回的是一个函数,剩下和call没什么区别;

    apply和其他两个传递的参数不同,它是传一个数组;

     

     

     

  • 三星s8虚拟一键锁屏取代物理按键

    打开辅助功能—敏捷度和互动—悬浮菜单–设为开—悬浮菜单选项—-把所有选项都删除,只留下一个锁定

    http://tieba.baidu.com/p/5134164284

  • grid布局笔记

    有点类似table布局,但是比table更灵活更优于flex布局。

     

    案例:

    .container {
      display: grid;
      grid-template-columns: 30px 30px 30px; //3列每列30px宽
      grid-template-rows: 30px 30px 30px;  //3行每行30px高
    }
    
    <div class="container">
      <!--无需在里面定义div元素,单元表格完全可以使用css来操作-->
    </div>

     

     

    网格容器(可以理解为<table>):

    以下是容器拥有的属性

    display: grid | inline-grid; //必须声明,为一个容器定义grid才能使用以下属性功能,块状|内联
    //显示表格
    grid-template-columns: 25% 25% 25% 25%; //列,多少个参数就多少个列
    grid-template-rows: 25% 100px auto; //行,多少个参数就多少行
    grid-template: //是grid-template-columns、grid-template-rows、grid-template-areas三个属性的简写
    //隐示表格
    grid-auto-columns:30px  //如果一个单元表格的位移超出了原来容器,那么布局会被破坏掉,可以预先设置好单元表格的宽度,此时超出的部分会自动生成列表且宽度为30px
    grid-auto-columns / grid-auto-rows
    grid-column-gap: 10px; //列之间的间距
    grid-row-gap: 15px; //行间距
    grid-gap: //grid-row-gap和grid-column-gap的缩写
    justify-items:start | end | center | stretch(默认); //水平方向对齐(类似操作<td>里面的元素对齐),
    左对齐|右对齐|居中|填满表 格(类似width:100%)
    
    align-items: start | end | center | stretch;//垂直方向对齐(类似操作<td>里面的元素对齐),
    顶部对齐|底部对齐|居中|填满表格(类 似height:100%)
    
    place-items //<align-items> 和 <justify-items>的缩写
    justify-content: start | end | center | stretch | space-around | space-between | space-evenly; //整个容器水平对齐
    align-content: start | end | center | stretch | space-around | space-between | space-evenly; //整个容器垂直对齐
    place-content:<align-content> <justify-content>的简写
    grid-auto-flow: row(默认) | column | row dense | column dense //row时以行为准自动填满,column时以列为准自动往左填满
    grid: 是grid-template-rows, grid-template-columns, grid-template-areas, grid-auto-rows, grid-auto-columns, 和 grid-auto- 
    flow的缩写

    grid-template-areas: //不常用,需要看案例,要多个值配合才行

     

     

    网格项(可以理解为<tr><td>):

    以下是单元格拥有的属性

    单个表单的合并和位移,以下4个属性需要同时配合(需看案例配合):
    grid-column-start
    grid-column-end
    grid-row-start
    grid-row-end
    
    等同以下
    
    grid-column //grid-column-start和grid-column-end缩写
    grid-row //grid-row-start和grid-row-end缩写
    justify-self: start | end | center | stretch; //单个表格的水平方向对齐
    align-self: start | end | center | stretch; //单个表格的垂直方向对齐
    place-self: //align-self 和 justify-self 的简写形式

    grid-area//不常用

     

     

    repeat()函数

    display不能为 inline-grid;

    案例1
    grid-template-columns: 1fr 1fr 1fr;
    等同
    grid-template-columns: repeat(3, 1fr); //3个1fr列,一个3列
    案例2
    grid-template-columns: repeat(5, 1fr 2fr); //5个 1fr 2fr,也就是一个10列
    案例3
    grid-template-columns: 10px repeat(8, 1fr) 20px; //第一列为10px,第二到第9列为1fr,最后一列为20px
    案例4
    grid-template-columns: repeat(auto-fill或者auto-fit, 20px); //auto-fill、auto-fit会以容器的宽度和20px为准,来决定重复的次数

     

    minmax()

    display不能为 inline-grid;

    minmax(最小值,如果小于最小值就会触发该值)

    grid-template-columns: repeat(3,minmax(50px,1fr)); //3个以大于或等于50px的列宽
    
    grid-template-columns: repeat(3,minmax(50px,1fr));

     

    自适应效果:

    display不能为 inline-grid;

    grid-template-columns: repeat(auto-fill,minmax(50px,1fr)); //自适应布局

     

    参考:

    www.css88.com/archives/8510

  • xshell5工具包

    ssh工具

    一些列破解工具

    链接: https://pan.baidu.com/s/1AF4ohmmR3yC7Ea1Bke4LqQ 提取码: a4rg 复制这段内容后打开百度网盘手机App,操作更方便哦