在项目的开发中难免遇到各种各样的bug,我觉得还是有必要记录一下的,方便日后查询。

safari window resize 

为满足日常轮播需求,做一个符合当前业务的轮播插件,其中需要考虑window变化的情况,所以绑定了resize事件用来做相应的处理。safari中scroll(上下滑动)操作会触发window的resize事件,暂且叫bug吧。
 
demo就不写了,你们顺便弄弄就好了,这里说下解决思路。
 
一般绑定window的resize事件,都是为了处理视窗的width的变化,那我们就可以先保存一个视窗的width,当resize触发时再跟当前的width进行对比,这样一来就能判断视窗的width是否变化了。
 
伪代码:
 
var oldWidth = window.innerWidth;
window.onresize = function(){
if(oldWidth != window.innerWidth){
//do something
}
}

safari alert touch

在页面滑动的过程中,alert会堵塞事件 ,看测试demo

document.addEventListener("touchstart",function(e){
                var p = document.createElement("p");
                p.innerText = "start";
                document.body.appendChild(p);
                
            },false);
            document.addEventListener("touchmove",function(e){
                var p = document.createElement("p");
                p.innerText = "move";
                document.body.appendChild(p);
               
            },false);
            document.addEventListener("touchend",function(e){
                var p = document.createElement("p");
                p.innerText = "end";
                document.body.appendChild(p);
                alert("ok")
            },false);
来来来,大家来猜猜一次完成的滑动操作,页面会输出什么?so easy嘛
 
start
move *n
弹出”ok“
end
 
大家心里活动:”博主还是太年轻啊,这么容易的问题都来提问“
 
好的,我开始也是这样以为的啊,但是在safari中的情况是这样的
 
在safari中,第一次只触发 start和end事件(只点击页面)的结果
 
start ---》alert ----》end 再出现 start (抓狂吗,继续看下面)这一次操作算完了
 
第二次,随便怎么触发(点击或者滑动)
 
alert---》end 
 
对的,不管什么操作都只触发end ,alert导致end事件堵塞很明显了,至于这里为什么是end,我觉得是补发上一次(第一次alert堵塞)start未结束的end
 
解决思路
 
现在还没有什么好的解决办法,swiper也存在此问题
暂时只能通过改写alert方法,相当于禁止此方法。(如果大家有对这个问题深入研究的,麻烦解答一下)
 
android低版本touch事件
一个常见的需求,一个fiexd的浮层内部需要滚动,但是不能影响到外面滚动
伪代码
<body style="height:2000">
<div style="height:500px;overflow:auto">内部元素height为1000</div>
</body>
解决这个需求的思路1:滚动还是使用原生的滚动,判断上滑,下滑,在满足条件的情况下阻止touchmove的默认事件,代码如下
function touchControl(touchs){//一个现在滑动的方法,传入一个可滑动的元素
//在某些设备上touchmove只能触发一次,因为在start和move的过程中触发了cancel,这个bug暂时没法解决。。
touchs.eventsBind("touchstart",function(e){
var ev = e || window.event,that = this; startY = ev.touches[0].clientY;
ev.stopPropagation();
});
touchs.eventsBind("touchmove",function(e){
var ev = e || window.event,that = this;
ev.stopPropagation();
moveY = ev.touches[0].clientY;
/*document.querySelector(".rule").textContent = moveY;*/
if(startY-moveY>0){
if(that.scrollTop+that.offsetHeight>=that.scrollHeight-20){
ev.preventDefault();
}
}
if(startY-moveY<0){
if(that.scrollTop<=20){
ev.preventDefault();
}
}
});
/*touchs.eventsBind("touchcancel",function(e){
var ev = e || window.event,that = this;
ev.stopPropagation();
ev.preventDefault(); })*/ }

问题:在某些设备(主要是安卓)上touchmove只能触发一次,因为在start和move的过程中触发了cancel,这个bug暂时没法解决。。(要想touchmove触发,只能阻止掉默认事件,但是这样就不能使用原生滚动了)

解决思路2:阻止掉touch的默认事件,通过判断手势,滑动距离,使用position或者transform或者scrollTop来模拟滚动(这个已经有很多库实现了,我这边也实现了一个,原理很简单,就不献丑了)
 
先这样吧,其他的慢慢更新  -- 2017-06-20

前端bug记录---不定时更新的更多相关文章

  1. iOS 属性修饰符记录 --不定时更新

    重新审视了一下OC在属性修饰符,特意记录一下来.以后不定时更新 > retain:只有在非ARC下才会有效,所有如果在ARC下使用了retain修饰也白搭 如以下的data属性用retain修饰 ...

  2. 前端bug记录

    记录一下前端入门时期遇到的一些bug. 1.同步.异步问题 背景:Javascript语言的执行环境是单线程.即一次只能完成一个任务.若有多个任务则需排队逐个执行——前一个任务完成,再执行后一个任务. ...

  3. 微信开发中,不同手机系统遇到的bug(不定时更新)

    Ios系统 1.body上绑定click事件失效. 解决:body标签下面,用个div,当做包裹所有内容的大容器.给这个div,绑定click事件. 2.不支持 YYYY-MM-DD 的时间格式. 用 ...

  4. 【SQL 代码】SQL 语句记录(不定时更新)

    1.数值四舍五入,小数点后保留2位 round() 函数是四舍五入用,第一个参数是我们要被操作的数据,第二个参数是设置我们四舍五入之后小数点后显示几位. numeric 函数的2个参数,第一个表示数据 ...

  5. BAT 前端开发面经 —— 吐血总结 前端相关片段整理——持续更新 前端基础精简总结 Web Storage You don't know js

    BAT 前端开发面经 —— 吐血总结   目录 1. Tencent 2. 阿里 3. 百度 更好阅读,请移步这里 聊之前 最近暑期实习招聘已经开始,个人目前参加了阿里的内推及腾讯和百度的实习生招聘, ...

  6. linux下svn定时更新项目

    方法一.用shell脚本定时更新项目   1.进入网站的根目录,假设项目位置放在/var/www/test cd /var/www/test   2.建立脚本文件update.sh,分两步进行.首先利 ...

  7. PHP 日常开发过程中的bug集合(持续更新中。。。)

    PHP 日常开发过程中的bug集合(持续更新中...) 在日常php开发过程中,会遇到一些意想不到的bug,所以想着把这些bug记录下来,以免再犯! 1.字符串 '0.00'.'0.0'.'0'  是 ...

  8. celery介绍、架构、快速使用、包结构,celery执行异步、延迟、定时任务,django中使用celery,定时更新首页轮播图效果实现,数据加入redis缓存的坑及解决

    今日内容概要 celery介绍,架构 celery 快速使用 celery包结构 celery执行异步任务 celery执行延迟任务 celery执行定时任务 django中使用celery 定时更新 ...

  9. 红米3 Flyme5.1.9.5插桩适配长期不定时更新

    ROM介绍: 2016.9.5更新日志: 1,更新源码到0905 2.修复bug若干. 2016.8.29更新日志: 1,更新源码到0829 2.修复bug若干. 2016.8.22更新日志: 1,更 ...

随机推荐

  1. TreeView 数据绑定及选中命令处理

    昨天接近下班,一个群里面的网友,问treeView绑定后  选中命令怎么来处理,怎么没有效果,而且用MVVM的方式来写:快下班了本来想远程帮他看下,结果就说写个Demo给他看:再加上选中传参: 下面分 ...

  2. zepto源码研究 - ajax.js($.ajax具体流程分析)

    简要:$.ajax是zepto发送请求的核心方法,$.get,$.post,$.jsonp都是封装了$.ajax方法.$.ajax将jsonp与异步请求的代码格式统一起来,内部主要是先处理url,数据 ...

  3. JavaWeb学习笔记之JSP(二)

    1.1.  JSP的指令: 1.   什么是JSP 指令? JSP 指令: JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出, 而只是告诉引擎如何处理JSP页面中的 ...

  4. 武汉科技大学ACM:1006: 华科版C语言程序设计教程(第二版)例题4.17

    Problem Description 输入一个整数,求它的素数因子.并按照格式输出. Input 一个整数n.(2<=n<=100) Output n=a*b*c*... (a,b,c为 ...

  5. 趣味PAT--循环-19. 币值转换(20)

    One visible minute on the stage is attributed to ten years of invisible practice off the stage. &quo ...

  6. vs2012远程调试

    不知道大家有没有遇到过这种情况,刚开发完的程序,明明在本机能够好好的运行,可是部署到服务器过分发给用户时,总是出现莫名其妙的错误. 一时半会又看不出问题来,怎么办呢?难道只能在服务器或是客户电脑上装一 ...

  7. HttpClient3.1 警告: Cookie rejected:

    四月 , :: 下午 org.apache.commons.httpclient.HttpMethodBase processCookieHeaders 警告: Cookie rejected: : ...

  8. 如何让多个Activity共用一个Menu

    我们可以定义一个自己的CommActivity继承自Activity,然后让每个自定义Activity继承CommActivity,就可以做到. 例如: public class CommActivi ...

  9. Android 安装和启动另外一个应用

    有时候一个应用需要启动另外一个应用来完成操作,比如在某些应用中打开闹钟,相机,日历等等. 启动或安装相应的应用的方法: Step1:判断是否安装目标应用.只要知道目标应用的安装包名就可以通过判断&qu ...

  10. MVC route 和 Angular router 单页面的一些方式

    直接看代码和注释吧 ASP.NET MVC router public class RouteConfig { public static void RegisterRoutes(RouteColle ...