在项目的开发中难免遇到各种各样的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. 高放的c++学习笔记之重载运算与类型转换

    ▲基本概念 (1)重载运算符是具有特殊名字的函数,它们的名字又operator和其后要定义的运算符号共同构成.. (2)对于一个运算符号来说它或者是类的成员,或者至少含有一个类类型的参数. (3)我们 ...

  2. Android应用开发中关于this.context=context的理解

    在Android应用开发中,有的类里面需要声明一个Context的成员变量,然后还需要在该类的构造函数中加上this.context=context;这行代码.为什么要这么写呢?不写不行么? 先看下面 ...

  3. CClientDC

    CClientDC(客户区设备上下文)用于客户区的输出,它在构造函数中封装了GetDC(),在析构函数中封装了ReleaseDC()函数.一般在响应非窗口重画消息(如键盘输入时绘制文本.鼠标绘图)绘图 ...

  4. 测试RegExp对象的属性

    //测试RegExp对象的属性function testRegExpProperty(){ var regexp = /abc/; //regexp.ignoreCase = true; //无效 c ...

  5. 无缝滚动js (手写通俗易懂)

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  6. 百度SEO优化

    下面是一些SEO优化的基本步骤: 一.内部优化 (1)TITLE,KEYWORDS,DESCRIPTION等的优化 (2)内部链接的优化,包括相关性链接,锚文本链接,各导航等链接页 (3)每天保持站内 ...

  7. NET Core驱动已出,支持EF Core

    NET Core驱动已出,支持EF Core 千呼万唤始出来MySQL官方.NET Core驱动已出,支持EF Core. 昨天MySQL官方已经发布了.NET Core 驱动,目前还是预览版,不过功 ...

  8. webuploader文件上传问题总结

    webuploader百度的一个很好的上传文件插件: 选择它的原因: 1.浏览器兼容性好,支持IE8,这是我最主要的,好多上传插件都不支持: 2.跨域访问,因为我的上传需要到图片服务器上,这就需要跨域 ...

  9. Swift语法之 ---- ?和!区别

    1.常量和变量 Swift语言中是用let来定义常量,并且要初始化.var来定义变量,在let或者var后面申明类型,冒号+空格,然后再加上类型名称. 2.optional(可选)变量 可选变量用于处 ...

  10. 『C # 开发』技能 Get√ ——制作CMD界面的简单GIF图片

    今天看到C#课本上个列子把星号(*)有规则打印在控制台中间位置 程序不难,利用的是光标定位函数Console.SetCursorPosition(x, y)做到的 心想是不是弄出一个动态的图案比较好玩 ...