$(document).on("click", "选择器", function(){});
以上绑定可能会出现点击失效的状况。解决方法就是在这些代码前加一串代码:css
$(body>*).bind("click", function(){....});
在移动端页面开发时,咱们有时候常常会用到本身定义的输入键盘,而不想自带键盘弹出,那么能够在点击事件中加入如下代码:html
$("选择器").click(function(){ document.activeElement.blur(); });
这个在Android上使用如下代码就能够解决,可是iOS不起做用。vue
border: none; outline: none; background-color: 颜色;
可是在iOS上须要加一个:node
-webkit-appearance: none;
这个属性一样适用于Android。android
这个我在网上找到许多解决方案,这里就直接放连接了webpack
移动端 Retina屏 各大主流网站1px的解决方案
如何在Vue项目中使用vw实现移动端适配
overflow: scroll;
后滑动不流畅,感受像是卡顿这个目前在Android和PC上没得问题,可是iOS上有问题,解决方法就是加上属性:ios
-webkit-overflow-scrolling: touch;
参考资料:git
【兼容性】ios上设置overflow: scroll不滚动bug
iOS Safari浏览器上overflow: scroll元素没法滑动bug解决方法整理
iOS safari浏览器上overflow: scroll元素没法滚动bug深究
解决页面使用overflow: scroll在iOS上滑动卡顿的问题
display:inline-block;
后元素之间会产生间距解决方法就是在包含这些元素的父元素上设置CSS属性font-size: 0;
github
- 对于ng,在
package.json
的build
后面改为ng build --base-href ./
。- 对于Vue,若是CLI工具是3.3如下版本,在
vue.config.js
中加入如下代码:
module.exports = { baseUrl: process.env.NODE_ENV === 'production' ? '/henjievue/' : '/' }
3.3以上的版本加入如下代码:
module.exports = { publicPath: process.env.NODE_ENV === 'production' ? '/henjievue/' : '/' }
assets文件夹里面的内容在build后不参与打包,仅仅完整复制,因此在开发过程当中路径的写法按绝对路径写就行了,以下代码:web
<img src="assets/index/ng.png">
//如下代码是为了解决在iOS 10系统以后设置meta来禁止缩放失效的问题 window.onload = function() { // 阻止双击放大 document.addEventListener('touchstart', function(event) { if (event.touches.length > 1) { event.preventDefault(); } }); var lastTouchEnd = 0; document.addEventListener('touchend', function(event) { var now = (new Date()).getTime(); if (now - lastTouchEnd <= 300) { event.preventDefault(); } lastTouchEnd = now; }, false); // 阻止双指放大 document.addEventListener('gesturestart', function(event) { event.preventDefault(); }); }
在安装好最新的vue脚手架状况下,使用如下命令来安装一个额外工具:
npm install -g @vue/cli-init
以后就可使用如下命令生成老的项目目录:
vue init webpack 项目名
在vue.config.js中加一句话:
module.exports = { baseUrl: process.env.NODE_ENV === 'production' ? '/henjievue/' : '/', lintOnSave: false //加这句话能够关闭ESlint }
这个不能用循环来解决,应该用递归来实现,或者用Promise.all来实现,这里仅提供递归解决方法。
(function loop(index){ axios.get("http://192.168.12.101:3000/news/list"+"?pageNum="+page[index]).then((response)=>{ console.log(response); if(++index < page.length){ loop(index); } else{ console.log("所有执行完毕") } }).catch((error)=>{ console.log(error); }) })(0)
这个钩子函数里不能直接使用this来获取vue实例,或者报undefined错误,解决方法以下:
const Foo = { template: `...`, beforeRouteEnter (to, from, next) { // 在渲染该组件的对应路由被 confirm 前调用 // 不!能!获取组件实例 `this` // 由于当钩子执行前,组件实例还没被建立 }, beforeRouteUpdate (to, from, next) { // 在当前路由改变,可是该组件被复用时调用 // 举例来讲,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候, // 因为会渲染一样的 Foo 组件,所以组件实例会被复用。而这个钩子就会在这个状况下被调用。 // 能够访问组件实例 `this` }, beforeRouteLeave (to, from, next) { // 导航离开该组件的对应路由时调用 // 能够访问组件实例 `this` } } //以上为解释。如下为解决方法 beforeRouteEnter(to, from, next){ next((vm)=>{ console.log(vm); if(from.path == '/'){ vm.isShowAppr = false; } }); },
解决方法以下,添加一段css代码便可:
img[src=""], img:not([src]){ opacity: 0; }
问题:当v-if绑定一个数组变量,改变变量的值并无使v-if起做用。引出个问题因为 JavaScript 的限制,Vue 不能检测如下变更的数组:
1.当你利用索引直接设置一个项时
2.当你修改数组的长度时
缘由:网上总结:
解决: 第一类问题: Vue.set(vm.items, indexOfItem, newValue) vm.items.splice(indexOfItem, 1, newValue) vm.$set(vm.items, indexOfItem, newValue) eg: this.$set(this.isShowOKimg, index, true); 第二类问题: vm.items.splice(newLength)
input输入框的onchange事件,要在 input 失去焦点的时候才会触发;在输入框内容变化的时候不会触发change,当鼠标在其余地方点一下才会触发;onchange 事件也可用于单选框与复选框改变后触发的事件。
onchange event 全部主要浏览器都支持;
onchange 属性可使用于:<input>, <select>, 和 <textarea>。
oninput 事件在用户输入时触发,它是在元素值发生变化时当即触发;该事件在 <input> 或 <textarea> 元素的值发生改变时触发。
onpropertychange会实时触发,会在元素的属性改变时就触发事件。当元素disable=true时不会触发。缺陷:只在IE 下支持,其余浏览器不支持,用oninput来解决。
一、this.$router
全局的路由实例,是router构造方法的实例。在 Vue 实例内部,你能够经过 $router 访问路由实例,
- 注意this.$route和this.$router均不能在使用Vue.extend()构造器所构造的弹框等实例里面取到
有go、push、replace、forward等方法
一、this.$router.push() // 字符串 this.$router.push('home') // 对象 this.$router.push({ path: 'home' }) // 命名的路由 this.$router.push({ name: 'user', params: { userId: 123 }}) // 带查询参数,变成 /register?plan=123 this.$router.push({ path: 'register', query: { plan: '123' }}) 二、this.$router.replace() 一样是跳转到指定的url,可是这个方法不会向history里面添加新的记录,点击返回,会跳转到上上一个页面。上一个记录是不存在的。 三、this.$router.go() 相对于当前页面向前或向后跳转多少个页面,相似 window.history.go(n)。n可为正数可为负数。正数返回上一个页面
二、this.$route
表示当前激活的路由的状态信息,包含了当前 URL 解析获得的信息,还有 URL 匹配到的 route records(路由记录)。路由信息对象:即$router会被注入每一个组件中,能够利用它进行一些信息的获取。
**1.$route.path** 字符串,对应当前路由的路径,老是解析为绝对路径,如 "/foo/bar"。 **2.$route.params** 一个 key/value 对象,包含了 动态片断 和 全匹配片断, 若是没有路由参数,就是一个空对象。 **3.$route.query** 一个 key/value 对象,表示 URL 查询参数。 例如,对于路径 /foo?user=1,则有 $route.query.user == 1, 若是没有查询参数,则是个空对象。 **4.$route.hash** 当前路由的 hash 值 (不带 #) ,若是没有 hash 值,则为空字符串。锚点 **5.$route.fullPath** 完成解析后的 URL,包含查询参数和 hash 的完整路径。 **6.$route.matched** 数组,包含当前匹配的路径中所包含的全部片断所对应的配置参数对象。 **7.$route.name 当前路径名字** **8.$route.meta 路由元信息 router.beforeEach((to, from, next) => { // to 和 from 都是 路由信息对象 }) watch: { $route(to, from) { // to 和 from 都是 路由信息对象 } }
this.$router的内容就是new VueRouter({})实例出来的对象(这个在router.js里面会建立并导出),他们两个是相同的。
在input的上加一个blur时间,这里以vue为例,其它相似
<input @blur="autoscrollBack" v-model="code" type="text" placeholder="请输入6位验证码"> autoscrollBack(){ window.scroll(0, 0); //自动滚回 }
一、节流代码
function throttle(callback, timeSolt){ var last_time = 0; return function(){ let context = this; let args = arguments; let now = new Date(); if(now - last_time >= timeSolt){ last_time = now; callback.apply(context, arguments); } } } document.addEventListener('scroll', throttle((e)=>{ console.log(e.target) //输出#document console.log(this) //输出window对象 }, 2000), false); 注:其实上面addEventListener的回调函数最终执行的是throttle返回的函数
二、防抖代码
function debounce(callback, timeSolt){ let timer; return function(){ let context = this; let args = arguments; if(timer){ clearTimeout(timer); } timer = setTimeout(function(){ callback.apply(context, args); }, timeSolt) } } document.addEventListener('scroll', debounce((e)=>{ console.log(e.target) //输出#document console.log(this) //输出window对象 }, 2000), false)
三、防抖节流结合版
function throttle_and_debounce(callback, timeSolt){ let last_time; let timer; return function(){ let context = this; let args = arguments; let now = new Date(); if(now - last_time < timeSolt){ clearTimeout(timer); timer = setTimeout(function(){ last_time = now; callback.apply(context, args); }, timeSolt) }else{ last_time = now; callback.apply(context, args); } } } document.addEventListener('scroll', throttle_and_debounce((e)=>{ console.log(e.target) //输出#document console.log(this) //输出window对象 }, 2000), false)
一、无滚动条时,dom对象的offsetWidth、clientWidth和scrollWidth等
二、有滚动条时,dom对象offsetWidth、clientWidth 和 scrollWidth等
三、window对象的 outerWidth、innerWidth、pageXOffset 和 screenLeft(screenX)
参考资料
一、命令面板(Ctrl+Shift+P)中,输入select选如图所示的选项
二、以后选择目标Shell。
参考资料
一、为git设置代理,这里以设置http协议为例,ssh暂未研究
在须要使用代理的项目下面使用 git bash 以下命令进行设置,我这里代理是127.0.0.1:8080
git config http.proxy http://127.0.0.1:8080 # 也能够是uri:port形式
这个是不须要鉴权的代理设置,若是须要鉴权,可能须要添加用户名密码信息:
git config http.proxy http://username:password@127.0.0.1:8080
若是git的全部项目都须要启用代理,那么能够直接启用全局设置:
git config --global http.proxy http://127.0.0.1:8080
为了确认是否已经设置成功,可使用 --get 来获取:
git config --get --global http.proxy
这样能够看到你设置在global的 http.proxy 值。 须要修改的时候,再次按照上面的方法设置便可,git默认会覆盖原有的配置值。当咱们的网络出现变动时,可能须要删除掉原有的代理配置,此时须要使用 --unset 来进行配置:
git config --global --unset http.proxy
在命令以后,指定位置的设置值将会被清空,你能够再次使用 --get 来查看具体的设置状况。若是使用了HTTPS,肯呢个会碰到HTTPS 证书错误的状况,好比提示: SSL certificate problem 。。。,此时,能够尝试将 sslVerify 设置为 false :
git config --global http.sslVerify false
到此设置完毕。
二、为github desktop设置代理
这个设置起来相对简单,以win 10为例,找到如下路径C:\Users\你的用户名
,找到名为.gitconfig
文件,添加如下内容:
[http] proxy = http://127.0.0.1:8080
设置完成后保存便可。
参考资料
一、单行省略号
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
注:这种方式通常都须要给固定宽度
二、多行省略号(这个属性只合适WebKit浏览器)
dispaly: -webkit-box; -webkit-box-orient: vertical; text-overflow: ellipsis; -webkit-line-clamp: 2; //这个显示几行 overflow: hidden;
三、多浏览器兼容方案
p { position:relative; line-height:1.4em; //要显示三行的话那么元素的高度就是行高的3倍,其它状况以此类推。 /* 3 times the line-height to show 3 lines */ height:4.2em; overflow:hidden; } p::after { content:"..."; font-weight:bold; position:absolute; bottom:0; right:0; padding:0 20px 1px 45px; }
首先要了解几个函数
一、Math.random()
生成[0, 1)
之间的数。
二、Math.round()
将小数四舍五入。
三、Math.floor()
下取整。
四、Math.ceil()
上取整。
一、生成[min, max]之间的整数。
var result = Math.round(Math.random() * (max - min)) + min;
二、生成[min, max)之间的整数。
var result = Math.floor(Math.random() * (max - min)) + min;
三、生成(min, max]之间的整数。
var result = Math.ceil(Math.random() * (max - min + 1)) + min;
三、生成(min, max)之间的整数。
var result = Math.floor(Math.random() * ((max-1) - (min+1))) + (min+1);至关于 min+1 ≤ r ≤ max - 1
一、@babel/core与babel-core区别
@babel/core是babel 7事后的版本标识,babel-core是之前版本的标识。
二、.babelrc和babel.config.js
.babelrc和babel.config.js均是babel的配置文件,babel.config.js是bebel 7引入的新的方式。
三、@babel/polyfill和@babel/plugin-transform-runtime和@babel/runtime和@babel/runtime-corejs2(都是用来转换新Api的)
//使用方法一在entry中添加 module.exports = { entry: { main: ["@babel/polyfill", path.resolve(__dirname, "./src/index.js")] } } //使用方式二babel.config.js中设置 module.exports = { presets: [ "@babel/preset-env", { "useBuiltIns": true } ] }
module.exports = { preset: ["@babel/preset-env"], plugins: [ "@babel/plugin-transform-runtime", { corejs: 2 } ] }
一、corejs 是一个给低版本的浏览器提供接口的库,如 Promise, map, set 等。在 babel 中你设置成 false 或者不设置,就是引入的是 corejs 中的库,并且在全局中引入,也就是说侵入了全局的变量。
二、若是你的全局有一个引入,不要让引入的库影响全局,那你就须要引把 corejs 设置成 2。
因此一旦你使用了2这个参数就必须引入@babel/runtime-corejs2
三、@babel/plugin-transform-runtime是必须装的,若是corejs设置为2的话安装@babel/runtime-corejs2来代替@babel/runtime,反正设置为false的话就须要@babel/runtime,根据你的设置来安装便可。
在babel 7下:
默认状况下.babelrc不做用于子包,那么在babel.config.js下加入一下babelrcRoots来指定便可。
module.exports = { babelrcRoots: ['.', './frontend', './backend'] // 容许这两个子 package 加载 babelrc 相对配置 }
一文读懂 babel7 的配置文件加载逻辑
对babel-transform-runtime,babel-polyfill的一些理解
babel7中 corejs 和 corejs2 的区别
babel preset env配置
babel学习笔记
1.scrollTo()是绝对位置滚动,每次都是相对初始位置(0, 0)位置滚动。
2.scrollBy()是相对位置滚动,相对于上次移动的最后位置移动。
this.$refs.drawnameInput.addEventListener('blur', function(){ var currentPosition; var speed=1;//页面滚动距离 currentPosition=document.documentElement.scrollTop || document.body.scrollTop; currentPosition-=speed; window.scrollTo(0,currentPosition);//页面向上滚动 currentPosition+=speed; //speed变量 window.scrollTo(0,currentPosition);//页面向下滚动 })
//添加debuger进行反调试 (function anti_debuger(){ function testDebuger(){ var d=new Date(); debugger; if(new Date()-d>10){ document.body.innerHTML='<div>年轻人,不要太好奇</div>'; return true; } return false; } function start(){ while(testDebuger()){ testDebuger(); } } if(!testDebuger()) { window.onblur = function(){ setTimeout(function(){ start(); },500) } } else{ start(); } })();
var u = navigator.userAgent; var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); if(isiOS){ //uin=这个部分就是你要聊天的QQ号 if(u.toLowerCase().match(/MicroMessenger/i) == "micromessenger"){ window.open('http://wpa.qq.com/msgrd?v=3&uin=2290747606&site=qq&menu=yes'); }else{ window.open('mqqwpa://im/chat?chat_type=wpa&uin=2290747606&version=1&src_type=web&web_src=oicqzone.com') } }else{ if(u.toLowerCase().match(/MicroMessenger/i) == "micromessenger"){ window.open('http://wpa.qq.com/msgrd?v=3&uin=2290747606&site=qq&menu=yes'); }else{ window.open('mqqwpa://im/chat?chat_type=wpa&uin=2290747606&version=1&src_type=web&web_src=oicqzone.com'); } }
移动端在使用new Date()生成指定时间的时间戳时,里面的格式有要求,不然不能正确获取。
var time = new Date('2019/9/18 18:00') //这个里面不要使用2019-9-18这种格式,PC端的虽然能够正常识别。
在IOS平台慎用Date.parse()方法,这个在ios上支持很差,会失效!
//HTML代码 <div id="smart"> <div class="smart-container-one"> <p style="position: relative; left: 600px;"><img src="img/lazyload-b3704113c8.gif"/></p> </div> </div> //CSS代码 #smart>.smart-container-one { width: 1240px; height: 450px; margin: auto; }
出现这样的结果就是因为<p style="position: relative; left: 600px;"><img src="img/lazyload-b3704113c8.gif"/></p>
形成的,p元素是块级元素,定位若是为relative的话会占用位置,致使父元素被撑开了。
解决方法有:
1.给p元素设置绝对定位position: absolute
便可。
2.p元素换成内联元素,如span
。
3.把p元素设置为内联元素,如display: inline
。
注:这儿p标签包img太业余了,你们平时写不要这样写,通常用div,菜鸟一枚,还请你们见谅。