第一波实习的前端笔记

一、preventDefault()和stopPropagation()区分

事件捕获阶段:1、2、3

处于目标阶段:4

事件冒泡阶段:5、6、7

1.preventDefault()表示阻止特定事件的默认行为。例如链接的导航行为,submit提交表单的行为。preventDefault()不阻止事件进一步捕获或冒泡,也不阻止自定义事件。

2.”DOM2级事件”定义了addEventListener(“click”,function(){},false)方法。第三个参数为true表示在捕获阶段处理事件;为false表示在冒泡阶段处理事件。

3.e.stopPropagation()会阻止事件进一步捕获或冒泡,当前事件会执行完,后续事件将不会被触发。但是如果对元素分别定义了捕获阶段(第三个参数为true)和冒泡阶段(第三个参数为false)的事件,则这两个事件都会执行。

二、弹出内容显示不全完美解决方案

问题描述:在项目中遇到靠近屏幕底部列表项点击时弹出内容显示不全的问题。如下图所示,点击该条持仓记录时,弹出的“开仓-平仓-行情”栏显示不全。

要保证底部有可能被挡住的弹出栏在任何情况下都能正常显示,需要经过一些计算处理,详细的页面高度十分复杂,详情可见该条底部的分析图,此处只介绍用的到的高度值。下面详细介绍处理方法。实现效果可看“牛倍”期货和A股的持仓盈亏列表。

1.判断被点击的列表项的弹出栏是否会显示不全:

列表项的顶部偏移+列表项的高度+弹出栏的高度>窗口底部偏移

2.如果1为false,那么让弹出栏默认向下弹出(这种默认弹出方式符合用户使用习惯)。

3.如果1为true,那么让列表项向上滚动,同时弹出栏弹出,并让弹出栏底部刚好贴住窗口底部,计算向上滚动的距离:

向上滚动距离=列表项的顶部偏移+列表项的高度+弹出栏的高度-窗口底部偏移

4.将公式中的变量全部使用实际属性来代替:

列表项的顶部偏移:$listitem.offset().top;

(注:offset()为jquery计算元素偏移的方法)

列表项的高度:$listitem.offset().height;

弹出栏的高度:$outitem.offset().height;

窗口底部偏移:$("body").scrollTop()+document.documentElement.clientHeight;

(注:窗口底部偏移=窗口向下滚动偏移+窗口高度)

(tips:页面的总高度: document.body.clientHeight;)

5.得到最终的相关代码如下:

//计算窗口底部偏移
            var page_top=$("body").scrollTop()+document.documentElement.clientHeight;
            //计算列表项顶部偏移
            var element_top=$n.offset().top;
            //计算列表项高度
            var element_height=$n.offset().height;
            //计算滚动距离,40为弹出栏的高度
            var distance=40+element_height+element_top-page_top;
            //滚动距离<0说明能够完整显示,无需滚动;滚动距离>0需要滚动
            if(distance>0){
                //进行向上滚动操作,滚动距离为distance
            }

三、$(this)和this的区别

this指向调用该方法的对象,可以调用js方法,可以获取HTML元素属性;不能调用jQuery方法。

$(this)将this封装成为jQuery对象,从而能够调用jQuery方法;不能直接获取HTML元素属性,不能调用js方法。

四、线程怪象,简单的处理使用setTimeout()

浏览器有三个基本的线程:js线程,gui线程,请求线程。js本身是单线程的,ajax实现的异步请求是基于浏览器本身的机制,而js线程和gui线程互斥(未来将详细分析浏览器堆栈、线程关系)。在项目中遇到过两个奇怪的问题,这两个问题的原因至今也只停留在推测阶段。第一个是有些输入法存在确认输入的阶段,在此阶段使用js执行基于输入内容的视图操作就会出现二次刷新的怪象;另一个问题为在A股渲染“暂无持仓”内容后20%的几率会覆盖渲染,导致“暂无持仓”消失,目前考虑为使用的框架中某些异步操作引起。这类奇怪问题目前我给出的解决方案都是setTimeout()延时执行,在设定定时器在一个时间段(大约300毫秒)以外时,操作将不会被覆盖。问题虽然暂时解决了,但是,使用setTimeout()将会使程序的时序更加混乱,导致未来出现错误更加难以分析和捕捉,因此长远角度考虑并不推荐使用。

五、手机端三等分按钮兼容性问题小结

问题描述:相关bug:22990,24476,24842最原始的切图css样式为:

.ranking-tab{ position: relative; width: 5.97rem; height: 0.58rem; margin: 0.15rem auto; line-height: 0.58rem; text-align: center; border: 1px solid #fa5d5d; }
.ranking-tab li{ position: relative; height: 100%; float: left; background: #fff; border-right:1px solid #fa5d5d; box-sizing: border-box; }
.ranking-tab li:last-child{ border-right: none; }
.am-grid-item-33{width:33.333%}

这样的设计下,“本日”、“本周”、“总”排行按钮分别占据行宽的33.333%,在部分小屏幕手机上都能够正常显示,但是在类似于iphone6、三星s6这样的大屏幕手机上就会出现下图所示问题,右边出现一条细小的白色边线,原因为填充不全。

1.第一次修改方案为将“总排行”按钮的宽度设置为33.334%,这样三个按钮加起来就沾满了100%的宽度。

2.但是问题并没有解决。安卓大屏手机经过这样的修改之后能够正常显示,而iphone6仍然没有变化,右边依然会出现白色边线。经测试,发现iphone6无法识别css样式小数点3位(包括第3位)以后的数字,因此这里讲“总排行”按钮的宽度再修改为33.34%,大屏手机全部正常显示(虽然三个按钮的总宽度超过100%,但是通过box-sizing属性使他们仍在一行显示)。

3.iphone4出现右部白色边线问题,尝试将总宽度设置成6em,每个按钮设置为2em宽度,和全部33.333%并没有任何区别,也采用过flex布局方案,但仍然存在兼容性问题。采用折中的办法,将背景色设置为红色,但是并没有从根本解决问题,效果如图:

4.最终这样缝缝补补的修改通不过测试,还是从最基本的底层来分析css代码。大千世界有许多类型的手机,要想基于三等分来布局,使用33.333%就很有风险,也许有的手机只支持33%,那么右边就会出现1%的边线。因此将原来ul的border设置到li上,这样即使li并没有在某些特殊机型上100%填充满ul,我们看到的效果仍然是正常的,背景色将和ul融为一体。最终布局方案如下:

.ranking-tab{ position: relative; width: 5.97rem; height: 0.58rem; margin: 0.15rem auto; line-height: 0.58rem; text-align: center; }
.ranking-tab li{ position: relative; height: 100%; float: left; background: #fff; border:1px solid #fa5d5d; border-right: none; box-sizing: border-box; }
.ranking-tab li:last-child{ border-right:1px solid #fa5d5d;}
.am-grid-item-33{width:33.333%}

其中值得讲解的一点是必须设置:

li{ border-right:none; }
li:last-child{ border-right:1px solid #fa5d5d; }

如果不这样处理,前一个按钮的右边界将会和后一个按钮的左边界重合,变成2px。

至此,走了一大圈弯路之后,排名页按键兼容性问题彻底解决。

时间: 2024-11-05 22:28:22

第一波实习的前端笔记的相关文章

第一波实习的前端笔记(2)——js.md

1.如何解决移动端点透问题? $('xx').on('touchend', function(event){ event.preventDefault(); }) 但是,存在滑动页面会触发问题.期待更好的解决方案 2.如何不让浏览器链接跳转不被浏览器记录? location.replace(); 使用 replace() 方法来替换当前文档: replace函数在设置URL方面与location的href属性,但是它会删除history对象的地址列表中的URL,从而使go或back等函数无法导航

前端笔记精彩博文周刊20150118期

下面是本期前端周刊了,欢迎关注我们的微博 @前端笔记网 或者我们的微信公众号 w3cmark_com. [行业资讯] 1.[用点]单身狗只能学学杜蕾斯的文案?还能买个安全套来照明呢 杜蕾斯的文案在2014年引发了一波又一波病毒式传播,几乎已经让“安全套”这个词不再敏感. 2.风口还是悬崖?互联网金融六模式在2015 如果说2013年底的时候仍然有很多企业和资本没有意识到这个风口,在刚刚过去的2014年可真是火力全开玩命投入.同时,在2014年第三季度,互联网金融的标杆产品余额宝第一次出现规模下降

前端笔记——如何控制表单控件中的disabled

0.前言 本文主要说明如何使能或禁止表单控件.表单控件具有disabled属性,通过设置该属性可以禁止所有的input控件,input的更多属性请参考资料[1].下面就通过一个简单的例子说明如何设置和读取disabled属性. [示例页面--代码] <!DOCTYPE html> <html> <head> <script src="jquery.js"></script> <meta charset="utf

前端笔记精彩博文周刊20141213期

又到周刊的时间啦,欢迎来到前端笔记推出的前端周刊,我们会把本周的精彩前端博文.行业资讯推送给大家,希望能及时得到最新资讯的童鞋可以关注我们的微博 @前端笔记网 或者我们的微信公众号 w3cmark_com. 下面是20141213期周刊,欢迎查阅~ [行业资讯] 1.二维码取代搜索框?可能这次张小龙真错了 喜欢乔布斯的互联网大佬不少,公之于众的便有雷军.丁磊.杨勃.黄章.张小龙等人,最像乔布斯的非张小龙莫属.四个字:产品感觉.能连续打磨出Foxmail.QQ邮箱和微信这三款经典产品,自然不是运气

移动端前端笔记 — 遇到的常见JS与CSS问题及解决方法

笔者接触移动前端快一年了,特将平时的一些笔记整理出来,希望能够给需要的人一些小小的帮助.同时也由于笔者的水平有限,虽说都是笔者遇到过使用过的,但文中可能也会出现一些问题或不严谨的地方,望各位指出,不胜感激! 一. css部分 body如果设置height:100%;overflow:hidden是依然可以滑动的,如果需禁止,要再加一层div设置 height:100%加overflow:hidden(html,body加height:100%) ,这样元素超出body的高度也不能滑动了.或者同时

web前端笔记1

web1.0时代:(联合) web2.0时代:(互动) 互联网没有崩溃,比以往更加重要.更加注重用户的交互作用. web3.0时代:(技术革新.统一通信协议) 语义化实现.(发展阶段) web4.0(AI人工智能) web前端工程师: 侠义:html.css.js 实习生要求:

前端笔记六,级联样式单与CSS选择器(一)

在HTML文档<head>中使用<link/>元素来引入外部样式单 格式:<link type=“text/css” rel=“stylesheet href=“css样式的URL”> CSS的格式:Selector { property:value } 使用内部CSS样式定义的语法格式,在<head>中: <style type=“text/css”> 样式单文件定义 </style> 使用style属性更改元素外观,语法与CSS一

【前端笔记】在HTML中画一条横线和IE10支持引用的CSS文件

首先大家国庆节快乐啊~~~ 这是我第一个在省外的国庆节,毕竟今年毕业了哇,奋斗的我们要加油~~~ 最近我会不断总结上一个WEB项目所用到的前端知识,和大家一起分享哈~~~ 言归正传,怎么画一条横线?我想到的有三种方法,但是各自样式不一,所以大家按需求来哦. 1.<hr />标签,对的,这个标签就代表一条横线,样式大概是这样的,如图(a与b之间哦): <html> <head></head> <body> <div>a</div&

前端笔记-前端优化简要大总结

个人对前端优化的一些简要总结,参考了一些别人写得资料 服务器方面: 提高自己服务器质量,带宽等方面 开启浏览器缓存,减少http请求 开启gzip压缩 使用内容分发网络cdn html界面 css文件放在head,js文件放在html尾部.下载某一个js时其他任务是暂停的,需要等这个JS下载并执行完毕后再下载其他的 不适用内联css 尽量减少标签,不多用一个标签,如clear清楚浮动用 :after js的延迟加载,异步加载,使用defer标签 . async="true" 减少dns