2018-08-10 完成angular模态框组件

1、设置标题

标题和头部模板不能同时出现。使用@INPUT设置一个输入属性作为组件的属性可以动态绑定。

2、设置头部和内容模板

此处使用ng-template或者ng-content。使用了前者。前者有一个插槽属性ngTemplateOutlet,类似于router-outlet,使用时,需要加入插槽的名字用于标记在拿一个地方写模板;另外,还有一个属性ngTemplateOutletContext,这个是属性定义了此模板的上下文(即组件初始化中的内容),可以通过let-变量名来引用,用于再模板中显示某些内容。后者有一个select属性,用于直接作为命名标签写模板。自我看来,两者区别不是很大。另外,ng中还有一个ng-container,这仅仅十一i个容器,不在页面中渲染,可以防止任何模板。

3、支持最大化、最小化、关闭

这里的最大化就是最大化到页面可见区域,最小化其实是还原。在这里用到了子父组件的交互,点击子组件中的自定义事件,关闭模态框。最大化在这里使用了显示器的分辨率大小,即screenWidth和screenHeight,正常来说,应该是clientWidth和clientHeight,但是基于组件的不同,body高度如果不设置的话,client(也就是客户端浏览器)就没有高度了。另外了解一下scroll的宽和高(带有滚动条的宽高,滚动宽高),offsetWidth和offsetHeight是拥有内边距  内容以及外边距的宽和高,以及event.client相对于文档的左侧和顶部距离。

还原,需要在最大化的过程中记录开始时的大小,通过鼠标事件e.target寻找模态框的大小。

此处遇到坑,mousedown和本身click事件冲突,因为在mousedown比click事件执行要快,且mousedown存在事件捕获,(ng中阻止时间捕获不好使,尤其是return false),另一个思路解决:在mousedown中添加判断,若事件目标遇到click事件宿主,则仅仅执行click事件,完美解决。放大和还原click事件也是相同思路。

4、支持拖拽

此处用到了5个事件,mousedown、mousemove、mouseup、mouseover以及mouseout,

mousedown:在鼠标按下时触发,无论左键还是右键。出发速度比up快,比click快。当鼠标按下时,需要保存鼠标移动开始时的位置和被移动元素的位置(左侧距离和顶部距离)。

此处遇到坑,一直使用当前点击元素的clientLeft和clientTop,但是这两个值一直是0,当然了,因为真正需要的位置是被移动元素,被移动元素是整个模态框,应该是offsetParent(若不是一层,需要层层向上找)的位置啊。

mousemove:鼠标移动时触发,消耗内存比较厉害。移动元素的思路就是,在移动过程中不断地记录元素的位置,也就是当前元素位置,通过  当前鼠标位置-开始鼠标位置+开始元素位置  这个公式计算得出。这里需要注意的是,处理好模态框移动过程中越界的情况,不能超出可见区域的边界,至少不能是整个荧幕的边界,故需要加入判断。左右上下越界分别要判断。

mouseup:鼠标抬起时触发事件。

此处遇到坑,此处执行的逻辑应该是解绑按下和移动事件,但是解绑在这里时无效的,因此,加入一个移动标记,当鼠标按下时移动标记为true,抬起时为false。

5、支持记录上次弹出位置

下次弹出时,弹出到上次关闭时的位置。

6、可设置模态框位置

加入left和top的属性。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,063评论 6 510
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,805评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,403评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,110评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,130评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,877评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,533评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,429评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,947评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,078评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,204评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,894评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,546评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,086评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,195评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,519评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,198评论 2 357

推荐阅读更多精彩内容

  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,498评论 1 11
  • (续jQuery基础(1)) 第5章 DOM节点的复制与替换 (1)DOM拷贝clone() 克隆节点是DOM的常...
    凛0_0阅读 1,343评论 0 8
  • 本篇博客源地址 总结: 鼠标事件 1.click与dbclick事件ele.click()ele.click(ha...
    ZombieBrandg阅读 676评论 0 1
  • 总结: 鼠标事件 1.click与dbclick事件$ele.click()$ele.click(handler(...
    阿r阿r阅读 1,609评论 2 10
  • AngularJS是什么?AngularJs(后面就简称ng了)是一个用于设计动态web应用的结构框架。首先,它是...
    200813阅读 1,609评论 0 3