精华内容
下载资源
问答
  • word文档中把几图形组合在一起

    千次阅读 2018-05-15 17:38:00
    word文档中把几图形组合在一起 在文档中绘制图形时,想把多图形组合在一起成为一整体。这需要用到组合命令。下面,我们来看下操作步骤。 下面文档,已绘制出三图形; 现在...

    word文档中把几个图形组合在一起

    1. 在文档中绘制图形时,想把多个图形组合在一起成为一个整体。这需要用到组合命令。下面,我们来看下操作步骤。

      word文档中,如何把几个图形组合在一起?

       

      下面中的文档,已绘制出三个图形;

      现在需要把这三个图形给组合在一起。

    2.  

      我们先把这三个图形摆放好位置;

      如下图所示。

    3.  

      点选一个图形,再按SHIFT键,加选另一个图形。

      看,两个图形都同时选中了。

    4.  

      继续按SHIFT键不放手,再点第三个图形。

      这时三个图形都在选中的状态。

    5.  

      接着,点开格式选项卡;

      在下方展开的功能组中,找到组合的按钮

    6.  

      点击此按钮;

      弹出菜单再点:组合

    7.  

      现在,这三个图形已组合在一起;成为一个整体。

      看,图形外围的框也改变了形式,鼠标点住,移动,三个图形都一起移动。

      word文档中,如何把几个图形组合在一起?
    posted @ 2018-05-15 17:38 stujike123456 阅读( ...) 评论( ...) 编辑 收藏
    展开全文
  • 那么分享两个免费图片转PDF的方法给大家。 方法1:PDF编辑器合并 其实PDF编辑器除了编辑PDF格式的文档外,也可以对图片进行一些简单处理,比如我们就可以用PDF合并的方法,来将图片进行合并。 首先打开极速PDF编辑器...

    我们都知道图片只能一张张查看,如果数量较多就比较麻烦了,所以经常会将图片合并转成PDF文件更方便。那么分享两个免费图片转PDF的方法给大家。

    方法1:PDF编辑器合并

    其实PDF编辑器除了编辑PDF格式的文档外,也可以对图片进行一些简单处理,比如我们就可以用PDF合并的方法,来将图片进行合并。

    首先打开极速PDF编辑器后,点击右上角文件中的“合并”进入下一步操作。
    在这里插入图片描述

    点击合并文件设置窗口右侧工具栏中添加文件上传所有需要合并图片后,点击“合并”就可以啦。(注意提前设置好图片顺序即为合并后PDF页面顺序)
    在这里插入图片描述

    方法2:我们也可以使用在线合并的方法。首先搜索speedpdf找到并打开这款在线免费转换工具后,选择JPG to PDF进入转换。(电脑端可在页面任意处右击翻译成中文,手机也可使用转换哦)
    在这里插入图片描述

    接着将所有需要合并的图片上传到转换区域,注意顺序,添加完成后,点击下方的convert开始转换,完成后直接下载就可以啦。
    在这里插入图片描述

    展开全文
  • a.js可以直接嵌入在html页面,由浏览器解释执行,不进行预编译 b.用于向页面添加动态交互行为 c.具有与java语言类似的语法,一种网页编程语言 操作方向: —操作DOM元素(html元素) —操作BOM元素(浏览器对象) ...

    1.JS概述
    1)概念
    js全程:JavaScript(一门客户端脚本语言)
    a.js可以直接嵌入在html页面中,由浏览器解释执行,不进行预编译
    b.用于向页面添加动态交互行为
    c.具有与java语言类似的语法,一种网页编程语言

    操作方向:
    —操作DOM元素(html元素)
    —操作BOM元素(浏览器对象)

    2)js特点:
    1.解释执行:不需要预编译,逐行执行
    2.基于对象:内置了大量的现成对象

    3)作用
    a.实现客户端数据简单计算
    b.客户端表单合法性验证
    c.添加浏览器事件的突发
    d.网页特殊显示效果的制作
    e.实现服务器的异步数据提交

    4)遵循es规范(es6)
    a.严格区分大小写
    b.数字、字母、下划线、$组成,不能用数字开头
    c.驼峰命名法

    5)写法
    a.行内式(定义事件)
    在事件中定义操作,直接写js代码
    alert(); 弹出警告框
    事件:
    onclick 鼠标点击
    ondblclick 鼠标双击
    onmouseover 鼠标移入
    onmouseout 鼠标移出
    onkeydown 键盘按下
    onkeyup 键盘抬起
    onblur 失去焦点
    onfocus 获取焦点
    写法:
    οnclick=“函数()”; 事件=“事件触发的函数”;

    b.内部式(嵌入式)
    嵌入在页面的

    c.外部式(文件调用)
    js代码位于单独的.js文件中(注意保存的编码)
    写法:
    step1:在js文件中写js代码(定义行数)
    step2:将.js文件引入到当前页面中

    step3:在html行内添加事件,调用函数

    js注释
    单行://注释文字
    多行:/注释文字/

    js控制台:
    不需要页面也可以直接在控制台(console)写js代码
    F12(右击检查)---->打开控制台
    Enter回车键:执行
    Shift+Enter:换行

    console.log(内容);//将内容打印到控制台

    2.js组成
    1)变量(var let const 无)
    js是弱类型语言,使用var关键字声明变量
    刑如:
    var a = 1;
    var s = “李四”;

    拆:
    var a;//a没有类型
    var a=1;//初始化a才会有类型,a为number类型
    a=“李四”;//a为String类型

    typeof 变量名;//用来验证变量名

    注意:
    1.js是弱类型语言,不同的变量类型会根据数值自动给定类型
    2.变量没有类型,统一用关键字var声明,变量值是有类型的
    3.使用“=”进行赋值,没有初始化的变量自动取值为undefined
    4.js存在变量声明提升(js会根据不同的值自动转换为对应的数据类型)

    js数据类型
    a.基本类型number、string,boolean
    number:不区分整数和小数

     string:一对引号包裹的字符串(单双引都可以)
     ----单双引号只能交替引用,特殊字符需要转义   \n  \t  \s
     常用函数:
     str.indexof("",from[int index]);
     返回指定字符串在str中第一次出现的位置(从from开始第一次出现的位置)
     str.replace("","");
     将指定字符串替换为指定字符串,只替换第一个,属于不完全替换
     
     boolean:仅有两个值,true、false
     可以参与运算,自动作为数值,true值为1,false为0
    

    b.特殊类型undefined、null
    undefined
    变量声明未初始化,该变量的值和类型均为undefined
    null
    代表"无值"或者"无对象",可以通过一个变量赋值null来清空变量内容

    c.对象类型object
    内置对象 外部对象 自定义对象

    数据类型转换:
    a.自动转换(直接转换属于默认规则)
    number+string=string
    boolean+string=string
    boolean+number=number
    boolean+boolean=number

    b.强制转换(利用类型转换函数)
    toString();任何类型转换成string类型

    parseInt();强转为整数,全局函数,具有截取功能

    parseFloat();强转为小数,全局函数,具有截取功能

    NaN:Not a Number(不是数字,不能转换成数字)

    isNaN();全局函数,判断是否为非数字(true表示非数字,false表示数字)

    案例1:
    验证用户输入的是否位数字,若是数字则求平方,若不是数字则给出提示。

    运算符
    a.数学运算符 + - * / % ++ –
    +:表示数学加法,或者字符串连接运输
    -、*:若字符串参与,将数值字符串以数字参与运算
    /:java中7/2=3,js中7/2=3.5

    b.关系运算  > >= < <= == !=
    ==:只比较值,不比较类型
    ===:比较类型和值
     
    c.逻辑运算符&&(与) ||(或) !(非) 
     短路逻辑:结果为boolean类型,true或者false
     非短路逻辑:结果为number类型(1或者0)
     
    d.三元运算符(三目)
    语法:判断表达式?表达式1:表达式2;
    
    注意:js中出现的判断表达式或者调解表达式可以为任意表达式,可以为任何类型
    转换规则:
    非0数字、非空字符串、{}、对象----->true
    0、null、“”、undefined、NaN------->false
    

    案例2:
    用户在页面输入一个值,判断是否为50,要求提升用户输入大,小,对?

    js的流程控制
    a.分支流程if-else ,switch-case

    b.循环流程	for,while,do-while
    

    案例3:
    统计输入框重点敏感字(gun)出现的次数,将敏感字替换为"***"

    调错方式:
    1.在js代码中添加console.log()或者alert()
    2.检查浏览器缓存的js文件,看错误信息
    3.浏览器自带的断点debugger调试

    内置对象:
    简单内置对象:Number String
    组合内置对象:Math Date Array
    复杂内置对象:Funtion RegExp

    1.Number:对象
    var age=10;
    var salary=new Number(10);//不常用
    
    常用函数:
    num.toFixed(n);
    将数值转成为字符串,并通过四舍五入保留小数点后n位,如果位数不够补0
     
    2.String:对象
    var str1="abc";
    var str2=new String("abc");	//不常用
    
    常用属性与函数:
    length;返回字符串长度
    toUpperCase();小转大
    toLowerCase();大转小
    charAt(index);返回指定位置的字符串
    indexOf(findStr,[fromIndex]);从指定下标位置查找字符串第一次出现的位置
    lastIndexOf(findStr);返回一个指定字符串最后一次出现的位置
    substring(start,[end]);截取指定下标位置的字符串(前包括后不包括)
    split(byStr,[howmany]);将字符串进行拆分,得到字符串数组(几个)
    replace(findStr,toStr);字符串替换(不完全替换)
    

    组合内置对象:Math Date Array
    复杂内置对象:Funtion RegExp

    3.Math对象
    常用函数:
    Math.sqrt(a);//返回数字a的平方根
    pow(a,b);//返回a的b次幂(方)
    random();//返回0-1之间的随机数
    round(x);//返回数字x四舍五入最接近的整数
    max(x,y,z…);//找出其中最大值
    min(x,y,z…);//找出其中最小值
    abs(x);//返回x的绝对值
    floor();//向下取整
    ceil();//向上取整

    4.Date对象
    var date=new Date();//当前系统时间
    var date1=new Date(“2009/02/05”);//指定日期时间

    常用函数:
    getTime();//获取当前时间的毫秒值
    getDate();//获取当前日期
    getDay();//获取当前一周的第几天
    getFullYear();//获取当前的年份
    toLocalString();//转换成字符串数据(当前时间)
    setDate();//修改日期本身的值

    5.Array对象(数组的数据类型可以不一致)
    var arr1=[10,“张三”,30,true];//常用
    var arr2=new Array(10,“张三”,30,true);
    var arr3=new Array();
    var arr4=new Array(5);//指定数组长度

    注意:数组长度是可变的,由内部元素撑开大小

    常用属性和函数:
    length;获取数组长度
    reverse();翻转数组
    sort([函数名]);数组排序,默认规则:数组的数据首个字母排序;自定义规则:根据传的函数名排序。


    6.Function对象
    js中函数就是Function对象,函数名就是指向Function对象的引用,
    可以直接使用函数名访问函数对象,函数名()是调用函数。

    函数定义:
    方式一,使用function关键字声明一个函数	
    function 函数名([参数]){
       函数体;
       return 返回值;
    }
    函数的返回值默认返回undefined,可以使用return返回具体的值
    
    方式二,匿名函数
    var 函数名=function([参数]){
        函数体;
       return 返回值;
    }
    
    方式三,创建一个Function对象
    var 函数名=new Function("参数1","参数2","函数体;");
    ps:小括号里面前面是函数的参数,后面是函数体
    
    补充:
    方式四,箭头函数(c6以后)
    var 函数名=([参数])=>{函数体;}
    
    注意:在js中没有类似于java的重载,如果方法名相同,则以最后一个为准
    
    
    js如果需要实现类似于java的重载效果,可以使用arguments对象实现
    arguments代表当前方法被传入的所有参数形成的参数数组
    arguments.length:函数的参数个数
    arguments[i]:取第i个下标的元素
    
    补充:变量的作用域(var 无 let const)
     1.var声明的变量,可以修改,不初始化输出undefined,有作用域
            定义在函数内部--->私有变量--->整个函数体
    		定义在函数外部--->全局变量--->整个js(存在变量提升)
     2.let是块级作用域,函数内部使用let定义后,对函数外部无影响
     3.const定义的变量初始化以后不可以修改--->类似于java常量
     4.没有任何关键字声明的变量--->全局变量
    

    全局函数:所有js对象都可以使用
    parseInt(); parseFloat(); isNaN();
    eval(“js代码”);-----执行函数
    只接受合法的表达式和语句/只接受原始的字符串


    7.RegExp正则对象
    var reg=/正则表达式/tag;
    var reg=new RegExp(“正则表达式”,“tag”);

    tag标识:
    g(globel):设定当前匹配为全局匹配
    i(ignore):忽略匹配中的大小写检查

    正则表达式的常用组成部分:
    () 普通
    [] 枚举,范围 [12345]/[1-5]
    {} 次数,个数

    /a/:不完全匹配
    /^a/:以a开头
    /a / : 以 a 结 尾 / a /:以a结尾 /^a /:a/a/:完全匹配

    常用函数:
    正则对象.text(字符串);
    判断一个字符串是否匹配该正则表达式,符合返回true,不符合返回false

    String对象中适用正则的函数:
    str.replace(reg,toStr);//替换
    str.match(reg);//返回匹配字符串匹配正则的内容,形成数组
    str.search(reg);//返回字符串第一次匹配正则的下标

    外部对象:
    BOM(Broswer Object Model):浏览器对象模型
    用来访问和操作浏览器窗口,是js有能力和浏览器对话,
    执行操作不与页面内容发生直接关系,没有相关标准,但被广泛支持和使用


    DOM(Document Object Model):文档对象模型(html文档)
    用来操作文档,定义了访问和操作html文档的标准方法,应用程序通过DOM操作,
    来实现对html文档数据的操作,当页面被加载时,浏览器会创建页面的文档对象模型(DOM树),
    通过可编程的对象模型,js能够创建动态的html(元素、属性、样式、事件)。
    DOM常用操作:读取节点的信息、修改节点的信息、创建新节点、删除节点

    1.BOM对象
    window是前台最大的对象,用来表示浏览器窗口。全部的js都是全局变量、全局对象和全局函数。
    比如:alert(111);等价于window.alert(111);

    5个属性:
    document:窗口中显示的html文档
    history:浏览器窗口的历史记录
    location:窗口文件地址
    screen:浏览器当前屏幕
    navigator:浏览器相关信息

    5个对象:
    Document:
    History:
    length:返回访问的地址个数
    back();返回上一个地址
    forward();进入下一个地址
    go(index:index<0 回退,index>0 前进)
    Location:
    href:当前窗口正在浏览的网页地址
    reload();重新载入当前页面
    Screen:
    width;实际的屏幕宽度
    height;实际屏幕的高度
    availWidth;可用的屏幕宽度
    availHeight;可用的屏幕高度
    Navigator:
    userAgent;获取浏览器相关信息的属性

    全局函数:
    对话框:
    window.alert(msg);//提示对话框(警告框)
    window.confirm(msg);//确认对话框
    window.prompt();//文本输入框

    打开新窗口:
    window.open(url);//打开新窗口
    

    定时器:
    a.一次性定时器
    在一个设定的事件间隔后执行代码,不是函数被调用之后立即执行
    var t=window.setTimeout(执行语句|函数名,time);
    t表示返回已经启动的定时器对象
    time表示时间间隔,单位毫秒
    
    停止定时器:clearTimeout(t);
    
    b.周期性定时器
    以一定的时间间隔循环执行代码
    var t=setInterval(执行语句|函数名,time);
    
    停止计时器:clearInterval(t);
    
    案例:
    显示时间按钮,启动时间按钮,停止时间按钮
    

    DOM对象(DOM树)在页面加载时候由浏览器生成的整个html文档,
    操作文档中任何内容,都需要通过document

    js可以创建动态的html(元素(节点)、属性、样式、事件)
    js对DOM操作:查找、读取、修改、新增、删除
    

    查找(节点):
    1.通过id查找
    document.getElementById(“id名”);
    如果id值错误,则返回null

    2.通过标签名查找
         document.getElementsByTagName("标签名");
    	 根据指定标签名返回全部元素组成数组,
    	 如果标签名错误,返回长度为0的节点数组,根据下标定位具体的节点
    	 
    3.通过添加name属性查找
        document.getElementsByName("name属性");
    	根据指定的name返回全部的元素组成数组
    	
    4.通过层次查找节点
        ele.parentNode
    	遵循文档的上下层次结构,查找单个父节点
    	
    	ele.childNodes
        遵循文档的上下层次结构,查找多个子节点
    
    5.根据选择器查找节点
        document.querySelector("选择器");
    	选择符合选择器的第一个节点
    	
    	document.querySelectorAll("选择器");
    	选择符合选择器的所有节点
    
    6.根据class属性查找
        document.getElementsByClassName("选择器");
    	根据指定的class返回全部的元素组成的数组
    

    读取、修改(文本、属性、样式…)
    innerHTML属性:
    设置或者获取位于对象起始和结束标签内的文本
    不解析html文本,将文本内容当成字符串打印

    innerText属性:
    设置或者获取位于对象起始和结束标签内的文本
    只能获取解析之后的文本内容

     读取:ele.innerHTML       ele.innerText
     修改:ele.innerHTML=值    ele.innerText=值
    

    读取、修改样式
    读取:ele.style
    修改:ele.style=“样式:样式值”;
    ele.style.样式属性=“样式”;

    注意:样式属性的写法 font-size改成fontSize(驼峰写法)
    

    读取、修改属性
    读取:ele.属性;
    修改:ele.属性=值;

      读取:ele.getAttribute(属性名);	  
      修改:ele.setAttribute(属性名,属性值);	  
    

    获取、修改节点class(推荐)
    ele.className
    ele.className=值;

    案例:
    图片的显示和隐藏

    轮播图

    新增节点:
    1.通过innerHTML属性给页面添加节点
    ele.innerHTML=“html代码”;

    2.通过函数给页面添加节点
    a.创建节点
    document.createElement(“节点名称”);

     b.添加新节点到指定位置
     追加:新节点作为父节点的最后一个子节点添加
     父节点.appendChild(新节点);
     
     旧节点为参考点,新节点位于此节点之前添加
     父节点.insertBefore(新节点,旧节点);
    

    删除节点:
    父节点.removeChild(删除的指定节点);


    js的事件:
    事件是指页面元素状态改变,用户在操作鼠标或者键盘时触发的动作

    鼠标事件:
    onclick; 鼠标单机
    ondblclick; 鼠标双击
    onmouseover; 鼠标移入
    onmouseout; 鼠标移出
    onmousedown; 鼠标按下
    onmouseup; 鼠标抬起

    键盘事件: e.keyCode 键盘键码值
    onkeydown 键盘按键按下
    onkeyup 键盘按键抬起

    状态事件:
    onfocus 获取焦点
    onblur 失去焦点
    onchange 选择(下拉框、单选框、复选框)
    onsubmit 表单提交
    onload 加载

    事件的定义:
    方式一,在元素上添加对应的事件
    如:

    方式二,在js中直接给元素节点添加事件
    元素节点.事件名=function(){}

    方式三,元素节点.事件名=函数名;

    event对象
    任何事件触发之后都会产生一个event对象

    事件冒泡:
    若子节点和父节点有相同的事件,子节点会向上触发父节点的同名事件

    取消事件冒泡:e.cancelBubble=true;

    **
    js自定义对象
    自定义对象是一种特殊的数据类型,有属性和方法封装而成

    属性:指与对象有关的值,访问方式:对象名.属性名
    方法:指对象可以执行的行为或者可以完成的功能
    访问方式:对象名.方法名

    创建自定义对象的三种方式:
    方式一:直接创建对象(直接创建Object对象)
    var user=new Object();

    方式二:"构造器"创建对象

    方式三:JSON创建对象(JSON是一个轻量级数据交换格式)
    JSON使用属性名:属性值的方式定义,所有的名称都要用双引号引起来,多个属性直接用逗号隔开

    展开全文
  • 2021年前端面试题及答案

    万次阅读 多人点赞 2020-02-11 19:29:34
     所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。 它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。 3 如何解决跨域? 能说1...

    前端面试汇总(2020年)

    大纲

    1、前言

    2、前端工程化

    3、前端设计模式

    4、前端安全性问题

    5、前端跨域问题

    6、前端数据加密

    7、前端http相关问题

    8、*前端基础知识点面试题

    9、前端技术栈问题

    前言

    由于新冠肺炎疫情,现在成天呆在家里,加上也要准备面试,就在家里看面试题,看着网上一堆面试题,决定收集常见题目汇总一下。关于面试大纲,我认为每个人都是千差万别的。因为面试官都是对简历所写的项目经验进行深挖或者对你所掌握的基本技能进行考察。

    前端工程化

    1

    什么是"前端工程化"?

    前端工程化是使用软件工程的技术和方法来进行前端的开发流程、技术、工具、经验等规范化、标准化,其主要目的为了提高效率和降低成本,即提高开发过程中的开发效率,减少不必要的重复工作时间,而前端工程本质上是软件工程的一种,因此我们应该从软件工程的角度来研究前端工程。

    2

    如何做"前端工程化"?

    前端工程化就是为了让前端开发能够“自成体系”,个人认为主要应该从模块化组件化规范化自动化四个方面思考。

    前端设计模式

    前端常见的设计模式主要有以下几种,具体设计模式查看这篇文章
    1. 单例模式
    2. 工厂模式
    3. 策略模式
    4. 代理模式
    5. 观察者模式
    6. 模块模式
    7. 构造函数模式
    8. 混合模式

    前端安全性问题

    这个是老的话题,有的在初中级前端面试中可能不会提到。但是在高级面试的时候,你要说出前端安全性问题防御,及前端常见安全性问题的攻击原理是什么。

    1

    xss跨站脚本攻击原理?如何进行?防御手段?

    如何进行:如何XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去。使别的用户访问都会执行相应的嵌入代码。从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。

    主要原理:过于信任客户端提交的数据!

    防御手段:不信任任何客户端提交的数据,只要是客户端提交的数据就应该先进行相应的过滤处理然后方可进行下一步的操作。

    2

    CSRF跨站请求伪造原理?如何进行?防御手段?

    如何进行:当你在某网页登录之后,在没有关闭网页的情况下,收到别人的链接。例如:http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=1&password_conf=1&Change=Change#

    点击链接,会利用浏览器的cookie把密码改掉。

    主要原理:在没有关闭相关网页的情况下,点击其他人发来的CSRF链接,利用客户端的cookie直接向服务器发送请求。

    防御手段:

    检测Referer

    Anti-CSRF token机制

    业务上要求用户输入原始密码(简单粗暴),攻击者在不知道原始密码的情况下,无论如何都无法进行CSRF攻击。

    3

    Sql脚本注入原理?如何进行?防御手段?  

    如何进行:利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

    主要原理:通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令

    防御手段:

    使用预编译,绑定变量(推荐)。

    检查数据类型。

    过滤特殊字符和语句。

    页面不错误回显。

    4

    web上传漏洞原理?如何进行?防御手段?  

    如何进行:用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。

    主要原理:当文件上传时没有对文件的格式和上传用户做验证,导致任意用户可以上传任意文件,那么这就是一个上传漏洞。

    防御手段:

    1. 最有效的,将文件上传目录直接设置为不可执行,对于Linux而言,撤销其目录的'x'权限;实际中很多大型网站的上传应用都会放置在独立的存储上作为静态文件处理,一是方便使用缓存加速降低能耗,二是杜绝了脚本执行的可能性;
    2. 文件类型检查:强烈推荐白名单方式,结合MIME Type、后缀检查等方式;此外对于图片的处理可以使用压缩函数或resize函数,处理图片的同时破坏其包含的HTML代码;
    3. 使用随机数改写文件名和文件路径,使得用户不能轻易访问自己上传的文件;
    4. 单独设置文件服务器的域名;

    前端跨越问题

    1

    什么是跨域?  

    由浏览器同源策略限制的一类请求场景,当不同地址,不同端口,不同级别,不同协议就会构成跨域。

    2

    什么是同源策略?  

    所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。

    它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。

    3

    如何解决跨域? 能说1,2,7,8就行。

    1、 通过jsonp跨域

    2、CORS

    3、 document.domain + iframe跨域

    4、 location.hash + iframe

    5、 window.name + iframe跨域

    6、 postMessage跨域

    7、 nginx代理跨域

    8、 nodejs中间件代理跨域

    9、 WebSocket协议跨域

    前端数据加密问题

    1

    一般如何处理用户敏感信息?  

    前端一般使用md5、base64加密、sha1加密,想要了解详情请自行百度。

    前端http相关问题

    1

    HTTP常用状态码及其含义?  

    1xx:指示信息--表示请求已接收,继续处理

    100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新)

    101 Switching Protocols 服务器将遵从客户的请求转换到另外一种协议(HTTP 1.1新)

    2xx:成功--表示请求已被成功接收、理解、接受

    200 OK 一切正常,对GET和POST请求的应答文档跟在后面。

    201 Created 服务器已经创建了文档,Location头给出了它的URL。

    202 Accepted 已经接受请求,但处理尚未完成。

    203 Non-Authoritative Information 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝(HTTP 1.1新)。

    204 No Content 没有新文档,浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。

    205 Reset Content 没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容(HTTP 1.1新)。

    206 Partial Content 客户发送了一个带有Range头的GET请求,服务器完成了它(HTTP 1.1新)。

    3xx:重定向--要完成请求必须进行更进一步的操作

    300 Multiple Choices 客户请求的文档可以在多个位置找到,这些位置已经在返回的文档内列出。如果服务器要提出优先选择,则应该在Location应答头指明。

    301 Moved Permanently 客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。

    302 Found 类似于301,但新的URL应该被视为临时性的替代,而不是永久性的。注意,在HTTP1.0中对应的状态信息是“Moved Temporatily”。出现该状态代码时,浏览器能够自动访问新的URL,因此它是一个很有用的状态代码。注意这个状态代码有时候可以和301替换使用。例如,如果浏览器错误地请求http://host/~user(缺少了后面的斜杠),有的服务器返回301,有的则返回302。严格地说,我们只能假定只有当原来的请求是GET时浏览器才会自动重定向。请参见307。

    303 See Other 类似于301/302,不同之处在于,如果原来的请求是POST,Location头指定的重定向目标文档应该通过GET提取(HTTP 1.1新)。

    304 Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。

    305 Use Proxy 客户请求的文档应该通过Location头所指明的代理服务器提取(HTTP 1.1新)。

    307 Temporary Redirect 和302(Found)相同。许多浏览器会错误地响应302应答进行重定向,即使原来的请求是POST,即使它实际上只能在POST请求的应答是303时 才能重定向。由于这个原因,HTTP 1.1新增了307,以便更加清除地区分几个状态代码:当出现303应答时,浏览器可以跟随重定向的GET和POST请求;如果是307应答,则浏览器只能跟随对GET请求的重定向。(HTTP 1.1新)

    4xx:客户端错误--请求有语法错误或请求无法实现

    400 Bad Request 请求出现语法错误。

    401 Unauthorized 客户试图未经授权访问受密码保护的页面。应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在填写合适的Authorization头后再次发出请求。

    403 Forbidden 资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。

    404 Not Found 无法找到指定位置的资源。这也是一个常用的应答。

    405 Method Not Allowed 请求方法(GET、POST、HEAD、DELETE、PUT、TRACE等)对指定的资源不适用。(HTTP 1.1新)

    406 Not Acceptable 指定的资源已经找到,但它的MIME类型和客户在Accpet头中所指定的不兼容(HTTP 1.1新)。

    407 Proxy Authentication Required 类似于401,表示客户必须先经过代理服务器的授权。(HTTP 1.1新)

    408 Request Timeout 在服务器许可的等待时间内,客户一直没有发出任何请求。客户可以在以后重复同一请求。(HTTP 1.1新)

    409 Conflict 通常和PUT请求有关。由于请求和资源的当前状态相冲突,因此请求不能成功。(HTTP 1.1新)

    410 Gone 所请求的文档已经不再可用,而且服务器不知道应该重定向到哪一个地址。它和404的不同在于,返回407表示文档永久地离开了指定的位置,而404表示由于未知的原因文档不可用。(HTTP 1.1新)

    411 Length Required 服务器不能处理请求,除非客户发送一个Content-Length头。(HTTP 1.1新)

    412 Precondition Failed 请求头中指定的一些前提条件失败(HTTP 1.1新)。

    413 Request Entity Too Large 目标文档的大小超过服务器当前愿意处理的大小。如果服务器认为自己能够稍后再处理该请求,则应该提供一个Retry-After头(HTTP 1.1新)。

    414 Request URI Too Long URI太长(HTTP 1.1新)。

    416 Requested Range Not Satisfiable 服务器不能满足客户在请求中指定的Range头。(HTTP 1.1新)

    5xx:服务器端错误--服务器未能实现合法的请求

    500 Internal Server Error 服务器遇到了意料不到的情况,不能完成客户的请求。

    501 Not Implemented 服务器不支持实现请求所需要的功能。例如,客户发出了一个服务器不支持的PUT请求。

    502 Bad Gateway 服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。

    503 Service Unavailable 服务器由于维护或者负载过重未能应答。例如,Servlet可能在数据库连接池已满的情况下返回503。服务器返回503时可以提供一个Retry-After头。

    504 Gateway Timeout 由作为代理或网关的服务器使用,表示不能及时地从远程服务器获得应答。(HTTP 1.1新)505 HTTP Version Not Supported 服务器不支持请求中所指明的HTTP版本。(HTTP 1.1新)

    2

    websocket和轮询及长轮询区别  

    轮询如下:

    客户端:啦啦啦,有没有新信息(Request)服务端:没有(Response)客户端:啦啦啦,有没有新信息(Request)服务端:没有。。(Response)客户端:啦啦啦,有没有新信息(Request)服务端:你好烦啊,没有啊。。(Response)客户端:啦啦啦,有没有新消息(Request)服务端:好啦好啦,有啦给你。(Response)客户端:啦啦啦,有没有新消息(Request)服务端:。。。。。没。。。。没。。。没有(Response) ---- loop

    长轮询如下:

    客户端:啦啦啦,有没有新信息,没有的话就等有了才返回给我吧(Request)服务端:额。。 等待到有消息的时候。。来 给你(Response)客户端:啦啦啦,有没有新信息,没有的话就等有了才返回给我吧(Request) -loop

    websocket如下:

    websocket解决了HTTP的这几个难题。 首先,被动性,当服务器完成协议升级后(HTTP->Websocket),服务端就可以主动推送信息给客户端啦。

    所以上面的情景可以做如下修改。

    客户端:啦啦啦,我要建立Websocket协议,需要的服务:chat,Websocket协议版本:17(HTTP Request)服务端:ok,确认,已升级为Websocket协议(HTTP Protocols Switched)客户端:麻烦你有信息的时候推送给我噢。。服务端:ok,有的时候会告诉你的。服务端:balabalabalabala服务端:balabalabalabala服务端:哈哈哈哈哈啊哈哈哈哈服务端:笑死我了哈哈哈哈哈哈哈

    3

    Http和Https的区别?  

    1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

    2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

    3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

    4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

    *前端基础知识点面试题

    1

    HTML/5、CSS/3相关  

    一、html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 HTML5?

      新特性:

      HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加。
      拖拽释放(Drag and drop) API
      语义化更好的内容标签(header,nav,footer,aside,article,section)
      音频、视频API(audio,video)
      画布(Canvas) API
      地理(Geolocation) API
      本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;
      sessionStorage 的数据在浏览器关闭后自动删除
      表单控件,calendar、date、time、email、url、search
      新的技术webworker, websocket, Geolocation

      移除元素:
      纯表现的元素:basefont,big,center,font, s,strike,tt,u;
      对可用性产生负面影响的元素:frame,frameset,noframes;
      h5新标签兼容:
      IE8/IE7/IE6支持通过document.createElement方法产生的标签,
      可以利用这一特性让这些浏览器支持HTML5新标签,
      当然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架
     
      如何区分:
      DOCTYPE声明\新增的结构元素\功能元素

    二、CSS 选择符有哪些?哪些属性可以继承?优先级算法如何计算? CSS3新增伪类有那些?

      CSS 选择符:

      1.id选择器( # myid)

       2.类选择器(.myclassname)

      3.标签选择器(div, h1, p)

      4.相邻选择器(h1 + p)

      5.子选择器(ul > li)

      6.后代选择器(li a)

      7.通配符选择器( * )

      8.属性选择器(a[rel = "external"])

      9.伪类选择器(a: hover, li:nth-child)

      可以继承的属性:

      可继承的样式: font-size font-family color, UL LI DL DD DT;

      不可继承的样式:border padding margin width height ;

      优先级:

      !important > id > class > tag

      important 比 内联优先级高,但内联比 id 要高

      CSS3新增伪类举例:

      p:first-of-type 选择属于其父元素的首个 <p> 元素的每个 <p> 元素。

      p:last-of-type 选择属于其父元素的最后 <p> 元素的每个 <p> 元素。

      p:only-of-type 选择属于其父元素唯一的 <p> 元素的每个 <p> 元素。

      p:only-child 选择属于其父元素的唯一子元素的每个 <p> 元素。

      p:nth-child(2) 选择属于其父元素的第二个子元素的每个 <p> 元素。

      :enabled :disabled 控制表单控件的禁用状态。

      :checked 单选框或复选框被选中。

    三、CSS3有哪些新特性?

    更详细的请见:https://www.cnblogs.com/qianduantuanzhang/p/7793638.html

      CSS3实现圆角(border-radius),阴影(box-shadow),

      对文字加特效(text-shadow、),线性渐变(gradient),旋转(transform)

      transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);//旋转,缩放,定位,倾斜

      增加了更多的CSS选择器 多背景 rgba

      在CSS3中唯一引入的伪元素是::selection.

      媒体查询,多栏布局

      border-image

    四、解释盒模型宽高值得计算方式,边界塌陷,负值作用,box-sizing概念? 

      1. 盒模型:IE 678 下(不添加doctype) 使用ie盒模型,宽度 = 边框 + padding + 内容宽度; chrom、IE9+、(添加doctype) 使用标准盒模型, 宽度 = 内容宽度。 
      2. box-sizing : 为了解决标准黑子和IE盒子的不同,CSS3增添了盒模型属性box-sizing,content-box(默认),border-box 让元素维持IE传统盒子模型, inherit 继承 父盒子模型; 
      3. 边界塌陷:块元素的 top 与 bottom 外边距有时会合并(塌陷)为单个外边距(合并后最大的外边距),这样的现象称之为 外边距塌陷。 
      4. 负值作用:负margin会改变浮动元素的显示位置,即使我的元素写在DOM的后面,我也能让它显示在最前面。

    五、BFC(Block Formatting Context) 是什么?应用? 

      1. BFC 就是 ‘块级格式上下文’ 的格式,创建了BFC的元素就是一个独立的盒子,不过只有BLock-level box可以参与创建BFC,它规定了内部的Bloc-level Box 如何布局,并且与这个独立盒子里的布局不受外部影响,当然它也不会影响到外面的元素。 
      2. 应用场景: 
      1. 解决margin叠加的问题 
      2. 用于布局(overflow: hidden),BFC不会与浮动盒子叠加。 
      3. 用于清除浮动,计算BFC高度。

    六、如何实现浏览器内多个标签页之间的通信?

      调用localstorge、cookies等本地存储方式

    七、简要说一下CSS的元素分类

      块级元素:div,p,h1,form,ul,li;
      行内元素 : span,a,label,input,img,strong,em;

    八、解释下浮动和它的工作原理?清除浮动的方法

      浮动元素脱离文档流,不占据空间。浮动元素碰到包含它的边框或者浮动元素的边框停留。

      1.使用空标签清除浮动。

      这种方法是在所有浮动标签后面添加一个空标签 定义css clear:both. 弊端就是增加了无意义标签。

      2.使用after伪对象清除浮动

     该方法只适用于非IE浏览器。具体写法可参照以下示例。使用中需注意以下几点。一、该方法中必须为需要清除浮动元素的伪对象中设置 height:0,否则该元素会比实际高出若干像素;

        #parent:after{

      content:".";

      height:0;

      visibility:hidden;

      display:block;

      clear:both;

     }

      3.设置overflow为hidden或者auto

      4.浮动外部元素

    九、CSS隐藏元素的几种方法(至少说出三种)

      Opacity:元素本身依然占据它自己的位置并对网页的布局起作用。它也将响应用户交互;
      Visibility:与 opacity 唯一不同的是它不会响应任何用户交互。此外,元素在读屏软件中也会被隐藏;
      Display:display 设为 none 任何对该元素直接打用户交互操作都不可能生效。此外,读屏软件也不会读到元素的内容。这种方式产生的效果就像元素完全不存在;
      Position:不会影响布局,能让元素保持可以操作;
      Clip-path:clip-path 属性还没有在 IE 或者 Edge 下被完全支持。如果要在你的 clip-path 中使用外部的 SVG 文件,浏览器支持度还要低;

    十、如何让一个盒子水平垂直居中

    复制代码

    复制代码

    //已知宽高<div class="div1"></div><style>
        .div1{
            width:400px;
            height:400px;
            position:absolute;
            left:50%;
            top:50% 
            margin:-200px 0 0 -200px;    }   
    </style>//未知宽高<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Document</title>    <style>
            .div1{
                position: absolute;
                left: 0;
                top: 0;
                bottom: 0;
                right: 0;
                margin: auto;
                border: 1px solid #000;
                width: 400px;
                height: 400px;        }    </style></head><body>    <div class="div1"></div></body></html>//未知宽高方法二:<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Document</title>    <style>
            .div1{
                position: absolute;
                left: 50%;
                top: 50%;
                transform: translate(-50%,-50%);
                border: 1px solid #000;
                width: 400px;
                height: 400px;        }    </style></head><body>    <div class="div1"></div></body></html>

    2

    JS部分

    1、cookie、localStorage、sessionStorage的区别和使用?

    cookie:是存储在本地的数据,有时候也用cookies,通常经过加密,应用最经典的就是判断注册用户是否已经登录过该网站。   localStorage:仅在客户端保存(即浏览器),不参与和服务器的通信;没有时间限制,即使浏览器关闭,数据依然存在;
       创建和访问localStorage:
            1)、设置数据:
            var forgetData = {phone:vm.phone};        localStorage.setItem("forgetData",JSON.Stringfy(forgetData));    //forgetData是存储在localStorage里边的本地数据;JSON.Stringfy(forgetData)是将数据转化为字符串格式;
                获取数据:
            vm.forgetData=JSON.parse(localStorage.getItem("forgetData"));  //将字符串转化为JSON化;
            2)、设置:localStorage.name = "zhao";
                 获取:localStorage.name    //zhao        localStorage.setItem(key,value);//设置数据        localStorage.getItem(key);//获取数据        localStorage.removeItem(key);//删除单个数据        localStorage.clear();//清除所有localStorage的数据
    
        sessionStorage:当用户的浏览器窗口关闭时,数据会被清除;
        
        共同点:都是保存在浏览器端,且同源的。
        区别:
            cookie数据始终在同源的http请求中携带9即使不需要),即cookie在浏览器和服务器之间来回传递;cookie数据还有路径的概念,可以限制cookie只属于某个路径下。存储大小限制也不同,cookie数据大小不能超过4K,同时因为每次http请求都会携带cookie,所以cookie只能保存很小的数据。
            sessionStorage和localStorage不会自动把数据发给服务器,只在本地保存,虽然也有大小限制,但是要比cookie大得多,可以达到5M或者更大。
            数据有效期不同,sessionStorage仅在当前浏览器窗口关闭前有效,不能持久保存;localStorage:始终有效,浏览器窗口关闭也一直保存;cookie:只在cookie设置的过期时间之前保存,即使浏览器窗口关闭。
            作用域不同,sessionStorage在不同浏览器窗口的数据不能共享,即使是同一个页面;localStorage在所有的同源窗口中都是共享的;cookie也是在同源窗口中共享的,

    2、如何实现浏览器多标签页之间的通信?

        调用localStorage、cookie本地存储方式。

    3、JavaScript的typeof返回类型有哪些?

    Object(null和Array)、number、undefined、string、Boolean、function

    4、类型转换

    强制转换:parseInt();parseFloat();number();

    5、数组的方法

    var list = [1,2,3];list.pop();//删除数组的最后一个元素 var list = [1,2];list.unshift(0,1);//头部添加  var list = [0,1,1,2,3];list.push(4,5);//尾部添加   var list = [1,2,3,4,5];var arr = list.concat(4,[5,6]);//把两个数组连接起来 //var arr = [1,2,3,4,5];  //var list = [1,2,3];list.join("-");    //1-2-3list.reverse();//3,2,1list.slice(1);//var list = [2,3];list.slice(1,2);//var list = [2];list.slice(1,-2);//设置了两个参数,终止下标为负数,当出现负数时,将负数加上数组长度的值来替换该位置的数。var arr = list.splice(0,1);//删除 var list = [2,3];  var arr = [1];可以删除任意数量的项,只需指定2个参数;要删除的第一项的位置和要删除的项数。例如splice(0,2);会删除当前数组的前两项list.splice(2,0,4,6);//插入,var list = [1,2,4,6,3]; 可以向指定位置插入任意数量的项,需要3个参数,起始位置、0(要删除的项数)、要插入的任意数量的项。例如splice(2,0,4,6);会从第二个位置插入4和6;list.splice(2,1,4,6);//替换,var list = [1,2,6,3]; 可以向指定位置插入任意数量的项,同时删除任意数量的项,需要3个参数,起始位置、要删除的项数、要插入的任意数量的项。例如splice(2,1,4,6);会从位置 2 开始插入4和6。list.sort();//按照第一个数字大小进行排序;function compare(a,b){
        return a-b;//正序;
        return b-a;//倒序;}list.sort(compare);

    6、ajax请求时get和post的区别?

    get:从服务器上获取数据,传送数据量小,安全性低,请求会被缓存,缓存是针对URL进行缓存的,get请求参数直接加在URL地址后面,一种参数组合就会产生一种URL的缓存,重复的请求结果是相同的;post:向服务器发送数据;传送数据量大,请求不会被缓存,参数封装在二进制的数据体中,服务器也不会记录参数,相对安全,所以涉及用户隐私的数据都要用post传送;

    7、ajax请求时,如何解释json数据?

    使用eval方法解析的时候,eval();不会去判断该字符串是否合法,而且json对象里的js方法也会被执行,这是非常危险的;推荐使用JSON.parse(); JSON.parse();把字符串转化成json。

    8、call和apply的区别?

    共同点:
        都可以用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由thisObj指定的新对象。
        另一种说法,都能够改变方法的执行上下文(执行环境),将一个对象的方法交给另一个对象来执行,并且是立即执行。
    不同点:
        apply();//最多只能有两个参数--新this对象和一个数组argArray,如果给该方法传递多个参数,则把参数都写进这个数组里边,当然,即使只有一个参数,也要写进数组里边。
        call();//可以接收多个参数,第一个参数apply()一样,后面则是一串参数列表。
        实际上,apply和call的功能是一样的,只是传入的参数列表的形式不同。

    9、http常用状态码?

        100  Continue  继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息    200  OK   正常返回信息    201  Created  请求成功并且服务器创建了新的资源    202  Accepted  服务器已接受请求,但尚未处理    301  Moved Permanently  请求的网页已永久移动到新位置。    302 Found  临时性重定向。    303 See Other  临时性重定向,且总是使用 GET 请求新的 URI。    304  Not Modified  自从上次请求后,请求的网页未修改过。    400 Bad Request  服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。    401 Unauthorized  请求未授权。    403 Forbidden  禁止访问。    404 Not Found  找不到如何与 URI 相匹配的资源。    500 Internal Server Error  最常见的服务器端错误。    503 Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)。

    10.你有哪些性能优化的方法?

        (详情请看雅虎14条性能优化原则)。
    
          (1) 减少http请求次数:CSS Sprites, JS、CSS源码压缩、图片大小控制合适;网页Gzip,CDN托管,data缓存 ,图片服务器。
    
          (2) 前端模板 JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求,减少请求次数
    
          (3) 用innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能。
    
          (4) 当需要设置的样式很多时设置className而不是直接操作style。
    
          (5) 少用全局变量、缓存DOM节点查找的结果。减少IO读取操作。
    
          (6) 避免使用CSS Expression(css表达式)又称Dynamic properties(动态属性)。
    
          (7) 图片预加载,将样式表放在顶部,将脚本放在底部  加上时间戳。

    11.深拷贝和浅拷贝

        基本类型指的是简单的数据段,引用类型指的是多个值构成的对象;    var name = "John"; // 基本类型值
    
        var obj = new Object(); 
        obj.name = "John"; 
        // obj 为引用类型值
        
        在复制变量中,对于基本类型来说,两者互不影响,    var num = 1;    var num1 = num; // num1 = 1;
    
        var num1 = 3; // num还是1,不会变
        
        浅拷贝和深拷贝的区别:
        对于浅拷贝来说,对于一个数组(数组是一个对象),只要我们修改了一个拷贝数组,原数组也会跟着改变。
        因为他们引用的是同一个地址的数据,拷贝的时候并没有给b数组创造独立的内存,只是把a数组指向数据的指针拷贝给了b;
        而深拷贝就与其相反,将会给b数组创造独立的内存,并且将a数组的内容一一拷贝进来,两者互不影响。
        
        实现深拷贝:
        一:层级拷贝,用递归实现;
        二:JSON解析        var b = JSON.parse(JSON.stringify(a));        

    3

    其他  

    一、怎么让Chrome支持小于12px 的文字?

    这个我们在做移动端的时候,设计师图片上的文字假如是10px,我们实现在网页上之后。往往设计师回来找我们,这个字体能小一些吗?我设计的是10px?为啥是12px?其实我们都知道,谷歌Chrome最小字体是12px,不管你设置成8px还是10px,在浏览器中只会显示12px,那么如何解决这个坑爹的问题呢?

    我们的做法是:

    针对谷歌浏览器内核,加webkit前缀,用transform:scale()这个属性进行缩放!

    <style>pspan{font-size:10px;-webkit-transform:scale(0.8);display:block;}</style><p><span>haorooms博客测试10px</span></p>

    二、IOS手机浏览器字体齿轮

    修改-webkit-font-smoothing属性,结果是:-webkit-font-smoothing:none:无抗锯齿-webkit-font-smoothing: antialiased | subpixel-antialiased |default:灰度平滑

    三、如何修改chrome记住密码后自动填充表单的黄色背景?

    大体可以通过input : -webkit-autofill来进行修改!

    input:-webkit-autofill {background-color:#FAFFBD;background-image: none;color:#000;}

    四、谷歌浏览器运行下面代码,并解释!

    [].forEach.call($$("*"),function(a){ a.style.outline="1px solid #"+(~~(Math.random()*(1<<24))).toString(16)})

    运行上面代码之后,会发现HTML层都被使用不同的颜色添加了一个高亮的边框。为什么会这样呢?

    首先我们来看

    [].forEach.call(),关于call()和apply(),我前面有文章也写过,具体可以看http://www.haorooms.com/post/js_constructor_pro

    [].forEach.call()等价于Array.prototype.forEach.call()

    其次我们来看$$("*")

    你可以在你的Chrome浏览器控制台中输入$$('a'),然后你就能得到一个当前页面中所有锚元素的列表。

    $$函数是许多现代浏览器命令行API中的一个部分,它等价于document.querySelectorAll,你可以将一个CSS选择器作为这个函数的参数,然后你就能够获得当前页面中所有匹配这个CSS选择器的元素列表。如果你在浏览器控制台以外的地方,你可以使用document.querySelectorAll('')来代替$$('')

    为元素添加颜色

    为了让元素都有一个漂亮的边框,我们在上面的代码中使用了CSS属性outline。outline属性位于CSS盒模型之外,因此它并不影响元素的属性或者元素在布局中的位置,这对于我们来说非常有用。这个属性和修改border属性非常类似,因此下面的代码应该不会很难理解:

    a.style.outline="1px solid #"+ color

    真正有趣的地方在于定义颜色部分:

    (~~(Math.random()*(1<<24))).toString(16)

    ~~的作用相当于parseInt,和我前面讲解的“|”功能类似,关于运算符“I” ,可以去看看!

    通过上面代码可以获取到一个随机的颜色值!

    五、input [type=search] 搜索框右侧小图标如何美化?

    美化效果如下图:

    enter image description here

    右侧默认的比较难看的按钮,美化成右侧效果。

    input[type="search"]::-webkit-search-cancel-button{-webkit-appearance: none;height:15px;width:15px;border-radius:8px;background:url("images/searchicon.png")no-repeat 00;background-size:15px15px;}

    用到的是伪元素::-webkit-search-cancel-button,关于什么是伪类和为元素,请看:http://www.haorooms.com/post/css_wl_wys

    六、iOS safari 如何阻止“橡皮筋效果”?

    可以参考一下知乎上的回答 https://www.zhihu.com/question/22256539 。

    但是,我们遇到的问题不是这样,我是要解决弹跳导致弹出层(position:absolute)的覆盖层高度小于100%;

    针对这个问题,我想到的解决方案如下:

    方法一: 把position:absolute改成position:fixed,并在弹出层之后,设置body的高度是100%;overflow是hidden。

    方法二:

    思路是获取苹果浏览器导航栏的高度。然后滚动的时候,重新获取其高度。在导航栏高度变小的时候,给弹出层增加高度的百分比!

    代码如下:

    //ios safari 伸缩判断var topbarHeight=window.outerHeight-window.innerHeight,agent=navigator.userAgent,globleflag=true;
            $(window).scroll(function(){if(agent.indexOf("iPhone")!=-1|| agent.indexOf("iPad")!=-1){var topbarHeightNow=window.outerHeight-window.innerHeight;if(topbarHeightNow<topbarHeight){
                        globleflag=false//此处写处理逻辑}else{
                     globleflag=true//此处写处理逻辑}}});

    七、实现点击文字,文字后面radio选中效果

    这个效果是前端很经常用到和遇到的效果了,实现这个效果的方式也很多,很多朋友用js和jquery来实现,但是最简单的,我们可以直接用lable标签的 for 属性来实现。

    看下下面例子:

    <form><labelfor="male">Male</label><inputtype="radio"name="sex"id="male"/><br/><labelfor="female">Female</label><inputtype="radio"name="sex"id="female"/></form>

    label 的for属性后面跟着input的id,就可以点击label,来触发input效果了,大家可以试一试!

    八、网站中,图片文件(jpg,png,gif),如何点击下载?而非点击预览?

    我们平时在网站中的图片,假如我们要下载,如下写:

    <ahref="haorooms博客.jpg">下载</a>

    我们点击下载按钮,只会预览“haorooms博客.jpg”这张图片,并不会出现下载框,另存为那种?那么我们如何做呢?

    我们只需要如下写

    <ahref="haorooms博客.jpg"download>下载</a>

    就可以下载了。点击如下进行尝试吧!下载

    不但如次,我们还可以指定文件名称,如下写法:

    <ahref="haorooms博客.jpg"download="haoroom前端博客图片下载">下载</a>

    测试如下:下载

    上面就是指定下载的写法!

    九、Math.min()比Math.max()大

    Math.min()<Math.max()// falseMath.min()>Math.max()// true

    因为Math.min() 返回 Infinity, 而 Math.max()返回 -Infinity。

    前端技术栈问题

    1

    vue相关问题?  

    更多前端技能请关注公众号”极致简文“

    往期精彩回顾

    React组件与生命周期

    React函数组件和Class组件以及Hooks

    2020年最火爆的Vue.js面试题

    Redux使用之我要买个女朋友(入门篇)

    关注公众号,精彩不间断

    展开全文
  • 近期总结一一些面试题 都是企业的面试题笔记题 感觉薪资10k下的都会出笔试题 ...同时分享一自己录制的CSS3动画特效经典案例【推荐教程】--后期会更新vue框架 微信小程序等内容。 https://ke.qq.com/cou...
  • js面试题

    千次阅读 多人点赞 2019-04-09 19:42:32
    DOM(文档对象模型):规定了访问 HTML 和 XML 的接口 BOM(浏览器对象模型):提供了浏览器窗口之间进行交互的对象和方法 JS 的基本数据类型和引用数据类型 基本数据类型:undefined、null、boolean、number、...
  • 前端面试题

    万次阅读 多人点赞 2019-08-08 11:49:01
    HTML文件里开头都有很重要的东西,Doctype,知道这是干什么的吗? 21 Quirks模式是什么?它和Standards模式有什么区别 21 div+css的布局较table布局有什么优点? 22 img的alt与title有何异同? strong与em的...
  • 前端面试锦集

    千次阅读 多人点赞 2019-07-20 13:41:45
    5.标明高度和宽度(如果浏览器没有找到这两个参数,它需要一边下载图片一边计算大小,如果图片很多,浏览器需要不断地调整页面。这不但影响速度,也影响浏览体验。当浏览器知道了高度和宽度参数后,即使图片暂时无法...
  • 测试开发笔记

    万次阅读 多人点赞 2019-11-14 17:11:58
    环境搭建 195 其他 196 输入域 196 输出域 196 异常分析 196 错误猜测 196 第一阶段 第一章 测试基础 什么是软件测试: 两个依据(需求、测试用例),两个方法(手工、自动),一个对比(预期结果和实际结果的对比)...
  • 双系统 Win10下安装Linux(单/双硬盘)

    千次阅读 多人点赞 2019-09-12 07:32:34
    因为我们只安装了两个系统,并且都在固态盘上,显然这个不知名设备正是我们的Ubuntu系统,选择进入,成功进入Ubuntu。 双硬盘 双硬盘安装即固械混合安装系统,是Ubuntu系统的引导分区\boot存放在固态硬盘(系统盘...
  • C#基础教程-c#实例教程,适合初学者

    万次阅读 多人点赞 2016-08-22 11:13:24
    C#语言程序总是从Main()方法开始执行,一个程序不允许出现两个两个以上的Main()方法。请牢记C#Main()方法必须被包含在一个类,Main第一个字母必须大写,必须是一个静态方法,也就是Main()方法必须使用static...
  • 压力测试工具

    万次阅读 多人点赞 2018-12-20 16:06:28
    TcpCopy顾名思义,就是一可以tcp流量复制的工具(其实也可以复制UDP)。有了这样一工具,我们就可以真实的复制线上流量,然后这些流量复制到我们的测试服务器上。这样就可以很容易模拟线上真实用户的访问,做...
  • HTML学习

    千次阅读 多人点赞 2016-10-08 17:31:27
    元素定义了 HTML 文档中的一段落。 这元素拥有一开始标签 < p > ,以及一结束标签 p > 。 元素内容是:This is my first paragraph。 < body > 元素: < body > < p > This is my first paragraph....
  • WPF开发教程

    万次阅读 多人点赞 2019-07-02 23:13:20
    要讨论 WPF 的并发,首先必须真正理解两个核心概念 – 调度程序和线程关联。 在 WPF 的设计阶段,目标趋向于单一线程的执行,但这不是一种与线程“关联的”模型。当一个组件使用执行线程的标识来存储某种类型的...
  • 软件测试入门知识了解

    万次阅读 多人点赞 2018-09-05 14:59:58
    一.概述 1.软件测试定义两面性 2.测试的生命周期 测试需求分析--&...需求评审和设计评审是验证软件产品的需求定义和设计实现,验证所定义的产品特性是否...这阶段主要通过对需求文档、设计文档等阅读、讨...
  • office2019专业增强版64位和32位安装包收集整理

    万次阅读 多人点赞 2019-05-18 17:59:10
    Office2019专业增强版提供了很多适用性很强的功用,比如增加了多显现器显现优化功用,当我们运用两个显现器的时分,不能完好保证这两个显现器的分辨率是分歧的,所以在不同显现器上显现文档时会有差别,假定运用多...
  • 这篇博文,我们会介绍不同的短clip,展示如何创建他们,以及如何它们导出到文件。关于修改和处理vedio clip的信息点这里。关于clips合成点这里。关于在生成文件之前预览clip点这里。  接下来的代码是总结好...
  • ffmpeg中文文档

    千次阅读 2019-06-13 19:13:35
    1简介 ffmpeg [global_options] {[input_...ffmpeg是一非常快速的视频和音频转换器,也可以从现场音频/视频源获取。它还可以在任意采样率之间进行转换,并使用高质量的多相滤波器动态调整视频大小。 ffmpeg从-...
  • 如何复制百度文档中的内容

    万次阅读 2019-05-16 11:19:18
    如何复制百度文档中的内容使用打印预览功能代码复制法方法1,手动查找复制快速查找Word文档助你复制直接修改复制内容使用选择性粘贴 有些小伙伴系不系对百度文档不能复制而感到烦恼呢?接下来我分享下学到的几小...
  • Android Drawable Shape 组合画田字格 我们常用Android Drawable Shape来创建Android的背景、圆角...以前我对Android Drawable shape的了解并不深放,经过在网上不断寻找,最后找到了较全面的文档 Android Drawable
  • 中文 Appium API 文档

    万次阅读 2016-09-06 09:56:40
    文档是Testerhome官方翻译的 源地址:https://github.com/appium/appium/tree/master/docs/cn 官方网站上的:http://appium.io/slate/cn/master/?ruby#about-appium 中文Appium API 文档 第一章:关于appium 1.1...
  • UE4 中文文档阅读

    千次阅读 多人点赞 2019-04-29 07:38:18
    第一步:控制权的切换至少需要两个物体 加载ThirdPersonCharacter和Vehicle模板 并且首先使得小白人为第一控制权 进行如下设置 第二步:编写蓝图 第三步:play 优化:如果使得一个对象在...
  • 基于物品的协同过滤算法实现图书推荐系统

    万次阅读 多人点赞 2019-09-14 21:20:24
    摘 要 在当下这信息爆炸的时代,各种各样的书籍条目繁多,浩如烟海;相应地,为满足用户需求,电商平台需要推荐系统来帮助用户找到自己可能需要的书籍。...在该系统,主要功能分为用户功能和图书推荐功能...
  • MATLAB画折线图:plot函数的简单用法

    万次阅读 多人点赞 2019-05-10 21:13:47
    MATLABplot函数常常被用于绘制各种二维图像,其用法也是多种多样,本文仅介绍plot函数的基本用法——使用plot函数绘制二维点图和线图。plot函数的一般调用形式如下: plot(X, Y, LineSpec) 其中X由所有输入点坐标...
  • Metronic是一套基于Twitter Bootstrap 3.x的高级管理控制面板主题,是一完全响应式管理模板,它是收费的但是价格不贵。 Metronic可用于任意类型的网页应用:商城后台、CMS、CRM、SAAS和一些前端模板包括商业网站...
  • [274]用python对比图片的不同

    万次阅读 2018-07-08 14:08:05
    from PIL import Image from PIL import ImageChops def compare_images(path_one, path_... 比较图片,如果有不同则生成展示不同的图片 @参数一: path_one: 第一张图片的路径 @参数二: path_two: 第二张图片的...
  • selenium中文文档

    千次阅读 2017-07-17 19:43:53
    欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 ...
  • FusionCharts_API_中文帮助文档

    万次阅读 2016-09-08 17:59:36
    bgRatio='1-100'(如果背景色有两个,该属性设置差异的比例) bgAngle='0-360'(转变背景颜色的角度,设置一个倾斜度) bgSWF='String'(用做背景的swf路径) bgSWFAlpha='0-100'(背景swf的透明度) ...
  • 如果有任何问题欢迎提出,我会及时修改的~同时这里需要声明一点,官方的中文文档已经有很久没有更新(当前文档的版本应该是4.7以前的),如果需要的话,我可能会当前的英文官方文档(当前是4.9版本)翻译出来。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 78,547
精华内容 31,418
关键字:

怎么将文档中两个图片组合