1.Android-开源通用弹窗的弹窗弹窗封装CommonPopupWindow(总得向别人学点什么)
2.广å代ç å¦ä½å¶ä½å¼¹çª
3.React 弹窗组件用的 createPortal 是怎么实现的?
4.Selenium基础 — 浏览器弹窗操作
Android-开源通用弹窗的封装CommonPopupWindow(总得向别人学点什么)
自我激励,封装Android通用弹窗
开源地址:FanChael/CommonPopupWindow
实现弹窗效果,源码源码当前功能基本可用,弹窗弹窗后续计划整合Rx家族与JSON,源码源码构建应用更新框架。弹窗弹窗
注册登录弹窗借鉴国外原生样式,源码源码dedecms论坛源码注重设计与源码学习,弹窗弹窗提升自身技能。源码源码
简单使用方法:
1. 自定义布局
1.1 创建Spinner背景形状布局
1.2 替换为通用弹窗
1.3 调用弹窗
1.4 显示效果参照FanChael/CommonPopupWindow
2. 分享弹窗
提供两种常用分享样式,弹窗弹窗支持四种常规平台按钮与复制链接,源码源码提供两种出场方式。弹窗弹窗
分享图标多时,源码源码支持水平滑动或网格展示,弹窗弹窗proxy源码php少于五个图标均匀分布。源码源码
默认分享调用,弹窗弹窗提供仿腾讯样式调用。
更新弹窗参考相关文档。
其他学习资源
比较Dialog, DialogFragment, PopupWindow,了解DialogFragment创建对话框的官方推荐。
学习声明周期管理,提高适配性,但不一定完全替代旧有方法。
通用弹窗需进一步完善,例如横竖屏切换等功能。
持续关注相关资料,模块转换源码持续学习与实践。
广å代ç å¦ä½å¶ä½å¼¹çª
ã1ãæåºæ¬çå¼¹åºçªå£ä»£ç ãå ¶å®ä»£ç é常ç®åï¼<scriptlanguage="javascript"><!--windowopen('page
html')--></script>å 为çæ¯ä¸æ®µjavascripts代ç ï¼æ以å®ä»¬åºè¯¥æ¾å¨<scriptlanguage="javascript">æ ç¾å</script>ä¹é´
<!--å-->æ¯å¯¹ä¸äºçæ¬ä½çæµè§å¨èµ·ä½ç¨ï¼å¨è¿äºèæµè§å¨ä¸ä¸ä¼å°æ ç¾ä¸ç代ç ä½ä¸ºææ¬æ¾ç¤ºåºæ¥
è¦å »æè¿ä¸ªå¥½ä¹ æ¯å
window
open('page
html')ç¨äºæ§å¶å¼¹åºæ°ççªå£page
htmlï¼å¦æpage
htmlä¸ä¸ä¸»çªå£å¨åä¸è·¯å¾ä¸ï¼åé¢åºåæè·¯å¾ï¼ç»å¯¹è·¯å¾(p>
/)åå¯
ç¨åå¼å·ååå¼å·é½å¯ä»¥ï¼åªæ¯ä¸è¦æ··ç¨
è¿ä¸æ®µä»£ç å¯ä»¥å å ¥htmlçä»»æä½ç½®ï¼<head>å</head>ä¹é´å¯ä»¥ï¼<body>é´</body>ä¹å¯ä»¥ï¼è¶åè¶æ©æ§è¡ï¼å°¤å ¶æ¯é¡µé¢ä»£ç é¿ï¼åæ³ä½¿é¡µé¢æ©ç¹å¼¹åºå°±å°½éå¾åæ¾
ã2ãç»è¿è®¾ç½®åçå¼¹åºçªå£ãä¸é¢å说ä¸è¯´å¼¹åºçªå£ç设置
åªè¦åå¾ä¸é¢ç代ç ä¸å ä¸ç¹ä¸è¥¿å°±å¯ä»¥äº
æ们æ¥å®å¶è¿ä¸ªå¼¹åºççªå£çå¤è§ï¼å°ºå¯¸å¤§å°ï¼å¼¹åºçä½ç½®ä»¥éåºè¯¥é¡µé¢çå ·ä½æ åµ
<scriptlanguage="javascript"><!--window
open('page
html','newwindow','height=,width=,top=0,left=0,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,status=no')//åæä¸è¡--></script>åæ°è§£éï¼<scriptlanguage="javascript">jsèæ¬å¼å§ï¼window
openå¼¹åºæ°çªå£çå½ä»¤ï¼'page
html'å¼¹åºçªå£çæ件åï¼'newwindow'å¼¹åºçªå£çååï¼ä¸æ¯æ件åï¼ï¼éå¿ é¡»ï¼å¯ç¨ç©º''代æ¿ï¼height=çªå£é«åº¦ï¼width=çªå£å®½åº¦ï¼top=0çªå£è·ç¦»å±å¹ä¸æ¹çè±¡ç´ å¼ï¼left=0çªå£è·ç¦»å±å¹å·¦ä¾§çè±¡ç´ å¼ï¼toolbar=noæ¯å¦æ¾ç¤ºå·¥å ·æ ï¼yes为æ¾ç¤ºï¼menubarï¼scrollbars表示èåæ åæ»å¨æ
resizable=noæ¯å¦å 许æ¹åçªå£å¤§å°ï¼yes为å 许ï¼location=noæ¯å¦æ¾ç¤ºå°åæ ï¼yes为å 许ï¼status=noæ¯å¦æ¾ç¤ºç¶ææ å çä¿¡æ¯ï¼é常æ¯æ件已ç»æå¼ï¼ï¼yes为å 许ï¼</script>jsèæ¬ç»æã3ãç¨å½æ°æ§å¶å¼¹åºçªå£ãä¸é¢æ¯ä¸ä¸ªå®æ´ç代ç
<html><head><scriptlanguage="javascript"><!--functionopenwin(){ window
open("page
html","newwindow","height=,width=,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,status=no")//åæä¸è¡}//--></script></head><bodyonsubmit="openwin()">
ä»»æç页é¢å 容
</body></html>è¿éå®ä¹äºä¸ä¸ªå½æ°openwin(),å½æ°å 容就æ¯æå¼ä¸ä¸ªçªå£
å¨è°ç¨å®ä¹å没æä»»ä½ç¨é
æä¹è°ç¨å¢ï¼æ¹æ³ä¸ï¼<bodyonsubmit="openwin()">æµè§å¨è¯»é¡µé¢æ¶å¼¹åºçªå£ï¼æ¹æ³äºï¼<bodyonunload="openwin()">æµè§å¨ç¦»å¼é¡µé¢æ¶å¼¹åºçªå£ï¼æ¹æ³ä¸ï¼ç¨ä¸ä¸ªè¿æ¥è°ç¨ï¼<ahref=""onload="openwin()">æå¼ä¸ä¸ªçªå£</a>注æï¼ä½¿ç¨ç""æ¯èè¿æ¥
æ¹æ³åï¼ç¨ä¸ä¸ªæé®è°ç¨ï¼<inputtype="button"onload="openwin()"value="æå¼çªå£">ã4ãåæ¶å¼¹åº2个çªå£ã对æºä»£ç ç¨å¾®æ¹å¨ä¸ä¸ï¼<scriptlanguage="javascript"><!--functionopenwin(){ window
open("page
html","newwindow","height=,width=,top=0,left=0,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,status=no")//åæä¸è¡window
open("page2
html","newwindow2","height=,width=,top=,left=,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,status=no")//åæä¸è¡}//--></script>为é¿å å¼¹åºç2个çªå£è¦çï¼ç¨topåleftæ§å¶ä¸ä¸å¼¹åºçä½ç½®ä¸è¦ç¸äºè¦çå³å¯
æåç¨ä¸é¢è¯´è¿çåç§æ¹æ³è°ç¨å³å¯
注æï¼2个çªå£çname(newwindowsånewwindow2)ä¸è¦ç¸åï¼æè å¹²èå ¨é¨ä¸ºç©º
okï¼ã5ã主çªå£æå¼æ件1
htmï¼åæ¶å¼¹åºå°çªå£page
htmlãå¦ä¸ä»£ç å å ¥ä¸»çªå£<head>åºï¼<scriptlanguage="javascript"><!--functionopenwin(){ window
open("page
html","","width=,height=")<p></p>}//--></script>å å ¥<body>åºï¼<ahref="/1
htm"onload="openwin()">open</a>å³å¯
ã6ãå¼¹åºççªå£ä¹å®æ¶å ³éæ§å¶ãä¸é¢æ们å对弹åºççªå£è¿è¡ä¸äºæ§å¶ï¼ææå°±æ´å¥½äº
å¦ææ们åå°ä¸å°æ®µä»£ç å å ¥å¼¹åºç页é¢(注ææ¯å å ¥å°page
htmlçhtmlä¸ï¼å¯ä¸æ¯ä¸»é¡µé¢ä¸ï¼å¦å
)ï¼è®©å®ç§åèªå¨å ³éæ¯ä¸æ¯æ´é ·äºï¼é¦å ï¼å°å¦ä¸ä»£ç å å ¥page
htmlæ件ç<head>åºï¼<scriptlanguage="javascript">functioncloseit(){ settimeout("self
close()",)//毫ç§}</script>ç¶åï¼åç¨<bodyonsubmit="closeit()">è¿ä¸å¥è¯ä»£æ¿page
htmlä¸åæç<body>è¿ä¸å¥å°±å¯ä»¥äº
(è¿ä¸å¥è¯åä¸ä¸è¦å¿è®°ååï¼è¿ä¸å¥çä½ç¨æ¯è°ç¨å ³éçªå£ç代ç ï¼ç§éåå°±èªè¡å ³é该çªå£
)ã7ãå¨å¼¹åºçªå£ä¸å ä¸ä¸ä¸ªå ³éæé®ã<form><inputtype='button'value='å ³é'onload='window
close()'></form>åµåµï¼ç°å¨æ´å å®ç¾äºï¼ã8ãå å å«çå¼¹åºçªå£-ä¸ä¸ªé¡µé¢ä¸¤ä¸ªçªå£ãä¸é¢çä¾åé½å å«ä¸¤ä¸ªçªå£ï¼ä¸ä¸ªæ¯ä¸»çªå£ï¼å¦ä¸ä¸ªæ¯å¼¹åºçå°çªå£
éè¿ä¸é¢çä¾åï¼ä½ å¯ä»¥å¨ä¸ä¸ªé¡µé¢å å®æä¸é¢çææ
<html><head><scriptlanguage="javascript">functionopenwin(){ openwindow=window
open("","newwin","height=,width=,toolbar=no,scrollbars="+scroll+",menubar=no");<p></p>//åæä¸è¡<p></p>openwindow
document
write("<title>ä¾å</title>")<p></p>openwindow
document
write("<bodybgcolor=ffffff>")<p></p>openwindow
document
write("<h1>hello!</h1>")<p></p>openwindow
document
write("newwindowopened!")<p></p>openwindow
document
write("</body>")<p></p>openwindow
document
write("</html>")<p></p>openwindow
document
close()}</script></head><body><ahref=""onload="openwin()">æå¼ä¸ä¸ªçªå£</a><inputtype="button"onload="openwin()"value="æå¼çªå£"></body></html>ççopenwindow
document
åä¸æ³¨æå¤ä¸ä¸ªæ ç¾æå°ä¸ä¸ªæ ç¾å°±ä¼åºç°é误
è®°å¾ç¨openwindow
document
close()ç»æå
ã9ãç»æåºç¨--å¼¹åºççªå£ä¹cookieæ§å¶ãåæ³ä¸ä¸ï¼ä¸é¢çå¼¹åºçªå£è½ç¶é ·ï¼ä½æ¯æä¸ç¹å°æ¯ç (æ²æµ¸å¨åæ¦ä¹ä¸ï¼ä¸å®æ²¡æåç°å§ï¼)æ¯å¦ä½ å°ä¸é¢çèæ¬æ¾å¨ä¸ä¸ªéè¦é¢ç¹ç»è¿ç页é¢é(ä¾å¦é¦é¡µ)ï¼é£ä¹æ¯æ¬¡å·æ°è¿ä¸ªé¡µé¢ï¼çªå£é½ä¼å¼¹åºä¸æ¬¡ï¼æ¯ä¸æ¯é常ç¦äººï¼:-(æ解å³çåæ³åï¼yes!;-)followme
æ们使ç¨cookieæ¥æ§å¶ä¸ä¸å°±å¯ä»¥äº
é¦å ï¼å°å¦ä¸ä»£ç å å ¥ä¸»é¡µé¢htmlç<head>åºï¼<script>functionopenwin(){ window
open("page
html","","width=,height=")}functionget_cookie(name){ varsearch=name+"="<p></p>varreturnvalue="";<p></p>if(documents
cookie
length>0){ <p></p>offset=documents
cookie
indexof(search)<p></p>if(offset!=-1){ <p></p>offset+=search
length<p></p>end=documents
cookie
indexof(";",offset);<p></p>if(end==-1)<p></p>end=documents
cookie
length;<p></p>returnvalue="/unescape(documents
cookie
substring(offset,end))"<p></p>}}returnreturnvalue;}functionloadpopup(){ if(get_cookie('popped')==''){ openwin()documents
cookie="popped=yes"}}</script>ç¶åï¼ç¨<bodyonsubmit="loadpopup()">ï¼æ³¨æä¸æ¯openwinèæ¯loadpopåï¼ï¼æ¿æ¢ä¸»é¡µé¢ä¸åæç<body>è¿ä¸å¥å³å¯
ä½ å¯ä»¥è¯çå·æ°ä¸ä¸è¿ä¸ªé¡µé¢æéæ°è¿å ¥è¯¥é¡µé¢ï¼çªå£åä¹ä¸ä¼å¼¹åºäº
çæ£çpop-only-onceï¼åå°è¿éå¼¹åºçªå£çå¶ä½ååºç¨æå·§åºæ¬ä¸ç®æ¯å®æäºï¼ä¿ºä¹ç´¯åäºï¼ä¸å£æ°è¯´äºè¿ä¹å¤ï¼å¸æ对æ£å¨å¶ä½ç½é¡µçæåææ帮å©ä¿ºå°±éå¸¸æ¬£æ °äº
éè¦æ³¨æçæ¯ï¼jsèæ¬ä¸çç大å°åæ好ååä¿æä¸è´
React 弹窗组件用的 createPortal 是怎么实现的?
React 中弹窗组件的实现,往往依赖于 createPortal 这个 API。它能够将组件渲染到文档的任意位置,比如 antd 的 Modal 组件通常会直接挂在 body 下面。让我们通过源码分析来揭示这个功能的工作原理。
首先,React 的组件渲染过程包含 render(创建虚拟DOM)和 commit(实际更新DOM)两个阶段。当我们在jsx中定义弹窗组件时,React 会将其编译成 render function,生成的 React Element 是虚拟DOM的核心表示。
接下来,365源码商城createPortal 函数的介入就显得尤为重要。当调用这个函数时,它会返回一个特殊的 React Element,类型为 REACT_PORTAL_TYPE。这个元素内部保存了容器信息(containerInfo),它是后续将组件挂载到指定位置的关键。
在 reconciliation 阶段,这个 REACT_PORTAL_TYPE 的 React Element 会转换成对应的 fiber 节点,并将 containerInfo 存储在 fiber.stateNode 中。这个操作允许React根据不同类型的 fiber 节点管理它们的私有数据,如状态信息。
到了 commit 阶段,作文批改源码React 会遍历 fiber 树并执行DOM操作。在处理 portal 的 fiber 节点时,它会调用插入或追加的方法,将组件实际插入到 body 中,从而实现了我们看到的弹窗组件直接挂载到文档主体的效果。
总结来说,createPortal 的使用使得React能够灵活地将组件渲染到任何指定位置,整个过程涉及到 render、reconciliation 和 commit 的协同工作,最终实现了弹窗组件的动态显示效果。
Selenium基础 — 浏览器弹窗操作
说明:在webdriver中,处理JavaScript生成的alert、confirm以及prompt弹窗非常简单。具体方法是通过switch_to.alert()方法定位到alert/confirm/prompt弹窗,然后使用text/accept/dismiss/send_keys方法进行操作。常用操作有:
示例:页面代码片段:
脚本代码:
注意:prompt弹窗输入框,Chrome不显示输入文本 Python版本 3.7.7
由于alert弹窗不够美观,现在大多数网站都会使用自定义弹窗。使用Selenium自带的方法无法处理这种情况,此时就需要使用JS方法进行处理。需求:去掉淘宝首页的自定义弹窗。淘宝首页的自定义弹窗如下:
提示:网页中弹出的对话框,也属于页面自定义弹窗,都可以用下面方式处理。实现方式:这种弹窗属于自定义弹窗的表现形式,可以通过设置HTML、DOM、Style对象中的一个display属性来处理,可以设置元素如何被显示。具体解释可以参考:/jsref/prop_style_display.asp。将display的值设置成none:此元素不会被显示,就可以去除这个弹窗了。注意:手动页面刷新之后还会出现弹窗。步骤如下:
提示:document.getElementById()是JS获取元素的方式,在JS获取元素方式中,只有ById()获取的是一个元素。其他获取元素的方式,都获取的是结果集,需要获取具体元素的时候,注意要使用索引。简单举例:
示例:
最后我这里给你们分享一下我所积累和真理的文档和学习资料,有需要是领取就可以了。
这个大纲涵盖了目前市面上企业百分之的技术,这个大纲很详细的写了你该学习什么内容,企业会用到什么内容。总共十个专题足够你学习。
这里我准备了对应上面的每个知识点的学习资料、可以自学神器,已经项目练手。
软件测试/自动化测试全家桶装学习中的工具、安装包、插件....
有了安装包和学习资料,没有项目实战怎么办,我这里都已经准备好了往下看。
如何领取这些配套资料和学习思路图,以及项目实战源码。这些资料都已经让我准备在一个php网页里面了,可以在里面领取扫码或者进Q群交流都可以暗号和备注是哦。
最后送上一句话:世界的模样取决于你凝视它的目光,自己的价值取决于你的追求和心态,一切美好的愿望,不在等待中拥有,而是在奋斗中争取。如果我的博客对你有帮助、如果你喜欢我的文章内容,请 “点赞” “评论” “收藏” 一键三连哦。
2024-11-23 12:52
2024-11-23 12:50
2024-11-23 12:22
2024-11-23 12:19
2024-11-23 12:09
2024-11-23 11:15
2024-11-23 11:01
2024-11-23 10:49