① 前端开发的基本方法
CSS部分
盒子边倾斜
clip-path: polygon(12% 0, 100% 0, 100% 100%, 0 100%);
禁止点击事件/鼠标事件“穿透”
div * { pointer-events: none; /*链接啊,点击事件啊,都没有效果了*/ }
用来控制元素在移动设备上使用滚动回弹效果
.main{
-webkit-overflow-scrolling: touch;
}
可解决在IOS中使用overflow:auto 形成的滚动条,滚动不流畅的情况
文字渐变效果
.text-gradient{ background-image: linear-gradient(135deg, deeppink, deepskyblue);
-webkit-background-clip: text; color: transparent;
}
css三角形
#triangle-up { width: 0; height: 0; border-left: 50px solid transparent; border-right: 50px solid transparent; border-bottom: 100px solid red;
}
实现圆弧
clip-path: ellipse(80%60% at50%40%);
JS部分
JavaScript中检测数组的方法
(1)、typeof操作符
这种方法对一些常用的类型检查没有问题,但对array和null 都判断为object
(2)、instanceof操作符
这个操作符是检测对象的原型链是否指向构造函数的prototype对象的
(3)、对象的constructor属性
const arr = []
console.log(arr.constructor === Array) // true
(4)、Object.prototype.toString
constarr=[]console.log(Object.prototype.toString.call(arr)==='[objectArray]')//true
(5)、Array.isArray()
常用的字符串操作
字符串转化toString()
字符串分隔split()
字符串替换replace()
获取长度length
查询子字符串 indexOf
返回指定位置的字符串或字符串编码 charAt charCodeAt
字符串匹配 match
字符串拼接concat
字符串的切割或提取slice() substring() substr()
字符串大小写转化 toLowerCase toUpperCase
字符串去空格 trim() 用来删除字符串前后的空格
- const str = '11122223333'const uniqueStr = [...new Set(str)].join('')
- arr.rece(callback,[initialValue])
- 跳过第一个索引。如果提供initialValue,从索引0开始。
- const arr = [1, 2, 3, 1, 2, 3]const uniqueArr = [...new Set(arr)]
- var a = {};Object.defineProperty(a, 'name', { value : 'kong', enumerable : true //该属性是否可枚举})
- function a(){}
- var b = new a();console.log(a.prototype.isPrototypeOf(b));//true
- if (/Android/gi.test(navigator.userAgent)) { window.addEventListener('resize', function () { if (document.activeElement.tagName === 'INPUT' || document.activeElement.tagName === 'TEXTAREA') { window.setTimeout(function () { document.activeElement.scrollIntoViewIfNeeded();
- }, 0);
- }
- });
- };
- /**
- * 向URL追加参数
- * @function stringifyUrlArgs
- * @param {string} url - URL路径
- * @param {object} params - 参数对象
- * @return {string}
- const stringifyUrlArgs = (url, params) => {
- url += (/?/).test(url) ? '&' : '?'
- url += Object.keys(params).map(key => `${key}=${params[key]}`).join('&') return url
- }
- /**
- * 解析URL参数
- * @function parseUrlArgs
- * @param {string} url - 字符串
- * @return {object}export const parseUrlArgs = url => { const arr = url.match(/([^?=&]+)(=([^&]*))/g) || [] const args = arr.rece((a, v) => {
- a[v.slice(0, v.indexOf('='))] = v.slice(v.indexOf('=') + 1) return a
- }, {}) return args
- }
- NP.strip(num) // strip a number to nearest right numberNP.plus(num1, num2, num3, ...) // addition, num + num2 + num3, two numbers is required at least.NP.minus(num1, num2, num3, ...) // subtraction, num1 - num2 - num3NP.times(num1, num2, num3, ...) // multiplication, num1 * num2 * num3NP.divide(num1, num2, num3, ...) // division, num1 / num2 / num3NP.round(num, ratio) // round a number based on ratio
其中第9中三者的区别如下:
(1)slice(), 参数可以是负数,负数表示从字符串最后一个位置开始切割到对应结束位置
(2)substring(),参数不可为负数,切割第一个位置到第二个位置的字符串
(3)substr(), 参数可以是负数,第一个参数是开始位置,第二个参数为切割的长度
字符串去重
常用的数组操作
1、Array.map()
此方法是将数组中的每个元素调用一个提供的函数,结果作为一个新的数组返回,并没有改变原来的数组
2、Array.forEach()
此方法是将数组中的每个元素执行传进提供的函数,没有返回值,注意和map方法区分
3、Array.filter()
此方法是将满足条件的元素作为一个新数组返回
4、Array.every()
此方法将数组所有元素进行判断返回一个布尔值,如果所有元素都符合判断条件,则返回true,否则返回false
5、Array.some()
此方法将数组所有元素进行判断返回一个布尔值,如果有一个元素满足判断条件,则返回true,所有元素都不满足则返回false
6、Array.rece()
此方法为所有元素调用返回函数
7、Array.push()
在数组最后面添加新元素
8、Array.shift()
删除数组第一个元素
9、Array.pop()
删除数组最后一个元素
10、Array.unshift()
在数组最前面增加元素
11、Array.isArray()
判断是否为一个数组
12、Array.concat()
数组拼接
13、Array.toString()
数组转化为字符串
14、Array.join()
数组转化为字符串,并用第一个参数作为连接符
15、Array.splice(开始位置,删除个数,元素)
其中rece使用方法为:
callback (执行数组中每个值的函数,包含四个参数)
1、previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))
2、currentValue (数组中当前被处理的元素)
3、index (当前元素在数组中的索引)
4、array (调用 rece 的数组) initialValue (作为第一次调用 callback 的第一个参数。)
如果没有提供initialValue,rece 会从索引1的地方开始执行 callback 方法,
数组去重:
常用对象方法
1、Object.assign()
用于克隆,两个参数,将第二个对象分配到第一个中
2、Object.is()
用于判断两个值是否相同
//注意,该函数与==运算符不同,不会强制转换任何类型, 应该更加类似于===,但值得注意的是它会将+0和-0视作不同值
3、Object.keys()
用于返回对象可枚举的属性和方法的名称,返回一个属性或方法名称的字符串数组。
4、Object.defineProperty()
劫持变量的set和get方法,将属性添加到对象,或修改现有属性的特性
5、Object.defineProperties()
可添加多个属性,与Object.defineProperty()对应,
6、isPrototypeOf
安卓监听可视区域变化,让输入框移动至可视区域
vue中平滑滚动到某个位置
this.$refs.rule.scrollIntoView({ block: 'start', behavior: 'smooth' })
向URL追加参数
解析URL参数
好用的JavaSrcipt库与模块(包)
日期时间处理库
1、monent.js
2、day.js
day相对于monent要轻量许多
高精度数学运算
number-precision
实用工具库
Lodash
lodash 是一个 JavaScript 实用工具库,提供一致性,及模块化、性能和配件等功能。
Lodash 消除了处理数组的麻烦,从而简化了 JavaScript、 数字、对象、字符串等
② 前端基础(问答21)
keywords: jQuery、常用方法、Ajax。
$(document).ready() 和 window.onload 的作用类似,都是在页面加载完成后调用绑定的函数,但也有一些区别。
$node.html(): 获取集合中第一个匹配元素的 html 内容,或设置每一个元素的html内容。
$node.text(): 获取匹配元素集合中每个元素的合并文本,包括它们的后代,或设置匹配元素集合中每个元素的文本内容为指定的文本内容。
ps:.text()方法不能使用在 input 元素或scripts元素上。input或textarea需要使用 .val() 方法获取或设置文本值。得到scripts元素的值,使用.html()方法
作用:将两个或更多对象的内容合并到第一个对象。
用法:
jQuery 的链式调用是指执行完一个方法之后就返回当前对象,被返回的对象继续执行后面的方法。
通过对$.ajax()中传入的cache控制,具体规则如下:
.data():在匹配元素上存储任意相关数据 或 返回匹配的元素集合中的第一个元素的给定名称的数据存储的值。
用法:
DEMO:
1、给元素 $node 添加 class active,给元素 $noed 删除 class active
添加class:$node.addClass('.active')
移除class:$node.removeClass('active')
切换class:$node.toggleClass('active')
2、展示元素$node, 隐藏元素$node
显示:$node.show()
隐藏:$node.hide()
切换显示/隐藏:$node.toggle()
3、获取元素$node的属性: id、src、title, 修改以上属性
获取:$node.attr('id'),$node.attr('src'),$node.attr('title')
修改:
修改一处属性:$node.attr('id','header')
修改多处属性:$node.attr({'id':'header','title':'task16'})
4、给$node 添加自定义属性data-src
$node('data-src','images/01.jpg')
5、在$ct 内部最开头添加元素$node
$ct.prepend($node)
6、在$ct 内部最末尾添加元素$node
$ct.append($node)
7、删除$node
$node.remove()
8、把$ct里内容清空
$node.empty()
$ct.text("")
$ct.html("")
9、在$ct 里设置 html <div class="btn"></div>
$ct.html('<div class="btn"></div>')
10、获取、设置$node 的宽度、高度(分别不包括内边距、包括内边距、包括边框、包括外边距)
获取:1、$node.width()、$node.height()
2、$node.innerWidth()、$node.innerHeight()
3、$node.outerWidth()、$node.outerHeight()
4、$node.outerWidth(true)、$node.outerHeight(true)
11、获取窗口滚动条垂直滚动距离
$(window).scrollTop()
12、获取$node 到根节点水平、垂直偏移距离
水平:$node.offset().left
垂直:$node.offset().top
13、修改$node 的样式,字体颜色设置红色,字体大小设置14px
$node.css({
color:'red',
font-size:ཊpx'
})
14、遍历节点,把每个节点里面的文本内容重复一遍
$node.each(function() {
console.log($(this).text())
})
15、从$ct 里查找 class 为 .item的子元素
$ct.find('.item')
16、获取$ct 里面的所有孩子
$ct.children()
17、对于$node,向上找到 class 为’.ct’的父亲,再从该父亲找到’.panel’的孩子
$node.parent('.ct').children('.panel')
18、获取选择元素的数量
$nodes.length
19、获取当前元素在兄弟中的排行
$node.index()
1、当点击$btn 时,让 $btn 的背景色变为红色再变为蓝色
2、当窗口滚动时,获取垂直滚动距离
3、当鼠标放置到$div 上,把$div 背景色改为红色,移出鼠标背景色变为白色
4、当鼠标激活 input 输入框时让输入框边框变为蓝色,当输入框内容改变时把输入框里的文字小写变为大写,当输入框失去焦点时去掉边框蓝色,控制台展示输入框里的文字
5、当选择 select 后,获取用户选择的内容
效果
效果