首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

H5基于Canvas实现电子签名并生成PDF文档

offsetLeft值跟offsetTop值跟父级元素没关系,而是跟其上一级的定位元素(除position:static外的所有定位如fixed,relative,absolute元素)有关系。...若上一级定位元素都没有除position:staice外的定位,则这个偏移量是相对于body而言的。 需要理清移动端事件对象的几个属性,⏬ ?...生成PDF文档 html2canvas是一款将HTML代码转换成Canvas的插件,因此需要用一个div包裹住需要打印的内容区域,获得这个dom节点。...否则当页面内容只有一页的时候没有问题,但是若页面内容有很多页的时候,就会出现生成的图片只有一小部分有内容的现象。...PDF文档页数较少的情况 可以在开发测试的时候预先在将要分页的地方插入一个padding,就是提前预留分页位置 PDF文档页数较多 对于这种情况,笔者尝试遍历要打印的dom节点的子节点,将每一页所能打印的

3.8K10

前端学习(51)~事件的传播和事件冒泡

); 说明: (1)第一个接收到事件的对象是 window(有人会说body,有人会说html,这都是错误的)。...事件冒泡 事件冒泡: 当一个元素上的事件被触发的时候(比如说鼠标点击了一个按钮),同样的事件将会在那个元素的所有祖先元素中被触发。...冒泡顺序: 一般的浏览器: (除IE6.0之外的浏览器) div -> body -> html -> document -> window IE6.0: div -> body -> html ->...说明 onclick 事件是可以冒泡的 } 阻止冒泡 大部分情况下,冒泡都是有益的。当然,如果你想阻止冒泡,也是可以的。可以按下面的方法阻止冒泡。...的偏移量(相对于整个页面) // 注意,如果想通过 style.left 来设置属性,一定要给 box1 开启绝对定位。

98820
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    跨 Tab 窗口通信是如何实现的

    它的实现与上面的 Broadcast Channel 非常类似,我们来看一看实际的代码: div class="g-container" id="j-main"> /...上面,为了方便演示,每次传输数据时,只传输动画需要的数据。而实际应用,我们可以需要细化整个传输数据,设定合理的协议。...譬如这个: 多标签页数据同步:当用户在一个标签页上进行了操作,希望其他标签页上的数据也能实时更新时,可以使用跨 Tab 通信来实现数据同步,保持用户在不同标签页上看到的数据一致性。...跨标签页通知:在某些场景下,需要向用户发送通知或提醒,即使用户不在当前标签页上也能及时收到。通过跨 Tab 通信,可以实现跨页面的消息传递,向用户发送通知或提醒。...,则打开一个新的播放详情页。

    31110

    浏览器跨 Tab 窗口通信原理及应用实践

    它的实现与上面的 Broadcast Channel 非常类似,我们来看一看实际的代码: div class="g-container" id="j-main"> /...上面,为了方便演示,每次传输数据时,只传输动画需要的数据。而实际应用,我们可以需要细化整个传输数据,设定合理的协议。...跨标签页通知:在某些场景下,需要向用户发送通知或提醒,即使用户不在当前标签页上也能及时收到。通过跨 Tab 通信,可以实现跨页面的消息传递,向用户发送通知或提醒。...,则打开一个新的播放详情页。...但是,如果页面已经存在一个音乐播放详情页,则不会打开新的音乐播放详情页,而是直接使用已经存在的播放详情页面; 系统有与列表页与内容页,在内容页点击已阅,如果用户同时打开了上级列表页,要取消列表页关于该内容页的未读的提示

    88110

    JS快速入门(二)

    innerHeight 返回窗口的网页显示区域高度 open() 格式:[url,name,features,replace] 参数 说明 url 打开指定页面的 url,如果没有则打开空白页 name...它允许运行在浏览器中的代码访问文档节点并与之交互,了解并掌握 DOM 操 作是 Web 开发中的必经之路 DOM结构及节点 整个 HTML 的结构都可以由类似上图的树结构表示,整个树结构由节点组成...节点 说明 文档节点(document对象) 代表整个文档节点 元素节点(element对象) 代表一个元素(标签) 文本节点(text对象) 代表元素(标签)中的文本 属性节点(attribute对象...) 代表一个属性,元素(标签)才有属性 注释节点(comment对象) 注释 document对象指代整个文档节点,他是文档内其他节点的访问入口,提供操作其他节点的方法 节点的分类:元素节点、...父节点拥有子节点,同级的子节点被称为同胞(兄弟或姐妹) 常用节点获取方法和属性 要进行 DOM 操作,首先要获取到需要操作的节点或节点集合,接下来以下面的示例代码为基础,介绍常用的 DOM 获取方法和属性

    6.6K30

    前端路由

    主要有两种方法:基于哈希路由、基于history 1.哈希路由 #后面的内容是网页位置标识符,一般是锚点或id属性div id='xx'>。...这对于ajax应用程序特别有用,可以用不同的#值,表示不同的访问状态,然后向用户给出可以访问某个状态的链接。但是IE 6和IE 7不会有历史记录。#后面的内容不会提交到服务器。...而我们也知道a标签有一个href属性,如果是哈希路由就不会引发页面的刷新。所以平时也有一种常规操作,返回顶部,就是a标签的href=“#”,就是直接跳转到页面顶部。...如果我们给dom一个id,#就跳转到那个dom的位置。 对于前端路由,我们有一个事件可以利用的,onhashchange,监听哈希的变化然后执行相应的回调函数。...> div> 这是第三页 动态改变组件,模拟类似于前端路由的效果

    40910

    前端路由0.前言1.哈希路由2.history路由

    主要有两种方法:基于哈希路由、基于history 1.哈希路由 #后面的内容是网页位置标识符,一般是锚点或id属性div id='xx'>。...这对于ajax应用程序特别有用,可以用不同的#值,表示不同的访问状态,然后向用户给出可以访问某个状态的链接。但是IE 6和IE 7不会有历史记录。#后面的内容不会提交到服务器。...而我们也知道a标签有一个href属性,如果是哈希路由就不会引发页面的刷新。所以平时也有一种常规操作,返回顶部,就是a标签的href=“#”,就是直接跳转到页面顶部。...如果我们给dom一个id,#就跳转到那个dom的位置。 对于前端路由,我们有一个事件可以利用的,onhashchange,监听哈希的变化然后执行相应的回调函数。...> div> 这是第三页 动态改变组件,模拟类似于前端路由的效果

    67020

    C1能力认证训练题解析 _ 第四部分 _ Web进阶「建议收藏」

    ________('div#container') 答案:querySelector “div#container”属于CSS选择器字符串,且id名不可重复,选择的只能是一个元素,所以需要获取指定选择器或选择器组匹配的第一个节点...() { alert('已点击'); } 答案:click addEventListener方法第一个参数为事件名称,此处应为对应的点击事件名称。...七、窗口事件 常用鼠标事件: 名称 描述 load 当整个页面及所有依赖资源(如样式表和图片)都已完成加载时,将触发load事件 beforeunload window、document 和它们的资源即将卸载时触发...八、BOM window 对象 1. window对象: 名称 描述 open() 打开一个新浏览器窗口 open(url, name, features, replace) url: 打开指定页面的...(相对于当前位置) innerWidth 返回窗口的网页显示区域宽度 innerHeight 返回窗口的网页显示区域高度 url: 打开指定页面的url,如果没有则打开空白页 name: 指定

    2K20

    【JS】504- HTML5 之跨域通讯(postMessage)

    如果公司内有好几个域名想共用一个统一登录,除了中转页跳转外,还有一种就是当前页弹窗。如何不同域传登录数据就是本文可以了解到的了。 很多情况下,我们受到浏览器的安全策略限制。...通常,对于两个不同页面的脚本,只有当执行它们的页面位于具有相同的协议(通常为 https),端口号(443 为 https 的默认值),以及主机 (两个页面的模数 Document.domain 设置为相同的值...window.postMessage() 方法时调用页面的当前状态;4.source 属性记录调用 window.postMessage() 方法的窗口信息。...caniuse 通过上面的图片,我们可以看出来,几乎所有的浏览器都支持了 postMessage,所以放心大胆的去使用吧。...如果你明确的知道消息应该发送到哪个窗口,那么请始终提供一个有确切值的 targetOrigin,而不是 *。 需要注意:不提供确切的目标将导致数据泄露到恶意站点。

    1.8K10

    JavaScript入门下-函数定义&DOM+BOM的操作示例

    ("innerDiv"); outerDiv.addEventListener("click", function() { alert("外部DIV被点击"); });...window:代表浏览器窗口,是 BOM 的顶级对象。 navigator:提供浏览器的信息,如用户代理、是否在线等。 location:提供当前页面的 URL 信息,允许操作页面的地址。...以下是 JavaScript 对 BOM 的详细操作介绍: window 对象 window 是 BOM 的核心对象,表示整个浏览器窗口。...常用方法 history.back():跳转到历史记录中的上一页(相当于浏览器的“后退”按钮)。 history.forward():跳转到历史记录中的下一页(相当于浏览器的“前进”按钮)。...示例: // 后退到上一页 history.back(); // 前进到下一页 history.forward(); // 跳转到历史记录中的第 2 页 history.go(2); screen

    11210

    大前端开发中的路由管理之二:web篇

    2、 hash模式         URL的hash属性是一个可读可写的字符串,该字符串是URL的锚部分(即#后面的部分)。...'#'是用来指导浏览器动作的,对服务器完全无用,其值的改变不会导致浏览器发起http请求,也不会引起页面的重载。...但每次hash值的改变,都会在浏览器的访问历史栈里增加一个记录,使用'后退'键便能返回上一个位置。在H5的history模式出现之前,hash是前端路由的实现方式。...核心功能的简单实现:         首先要实现一个router对象来管理页面的回调, class HashRouter{ constructor(routeArr = [...在H5之前其实存在history接口了,但只是用于页面的跳转,比如: history.go(-1); // 后退一页history.go(2); // 前进两页history.forward

    1.6K20

    走进安卓的重灾区----video

    html5的video已经出来很久了。在ios上使用基本上没什么毛病,但是安卓下就是一个重灾区了,各种体验差。这几天搞了安卓的兼容,简直是要吐血。所以特意总结了一些强势的坑点。.../ 是否暂停 video.ended // 是否结束 video.autoPlay // 是否自动播放 loadstart // 客户端开始请求数据 error // 请求数据时遇到错误(可以通过上一页的属性...> div> vi.addEventListener('playing',function(){ $('.guide').hide(); }) 全屏播放 若页面中没有其他内容,只是播放一个视频的话...那么问题来了,如果页面上不只有视频,还有其他内容呢,例如视频是在一个弹出层中。这样设置的话,页面原有内容会有一个1s左右的非常明显拉伸过程,这个拉伸过程就是为全屏播放视频做准备的。...诡异的坑 安卓下,若是摇一摇在弹出层播放视频,若弹出层中有外链,点击了跳转,再返回,这个时候 video 会有一个诡异的bug,具体表现为返回后第一次能正常触发,第二次之后触发都直接播到视频最后一帧,设置

    1.6K00

    你会用到的 15个前端小知识

    滚动条里面的小方块,能向上向下移动(或往左往右移动,取决于是垂直滚动条还是水平滚动条 div::-webkit-scrollbar-track 滚动条的轨道(里面装有 Thumb div::-webkit-scrollbar-button...边角,即两个滚动条的交汇处 div::-webkit-resizer 两个滚动条的交汇处上用于通过拖动调整元素大小的小控件注意此方案有兼容性问题,一般需要隐藏滚动条时我都是用一个色块通过定位盖上去,或者将子级元素调大...9.前端工程化 一提到前端工程化很多人想到的都是 webpack,这是不对的,webpack 仅仅是前端工程化中的一环。在整个工程化过程中他帮我们解决了绝大多数的问题,但并没有解决所有问题。...近些年被广泛的关注和探讨,究其原因主要是因为现代化前端应用功能要求不断提高,业务逻辑日益复杂,作为当下互联网时代唯一不可或缺的技术,前端可以说是占据了整个开发行业的半壁江山。...Object.defineProperty 只能监听到属性的读写,而 Proxy 除读写外还可以监听属性的删除,方法的调用等。

    93110

    以太坊智能合约开发第七篇:智能合约与网页交互

    编写网页 首先我们需要编写一个网页。...Web3.providers.HttpProvider("http://127.0.0.1:7545")); App.init(); }); 前面的篇幅中,我们提到过 web3模块是以太坊提供的工具包...从上面的代码中,我们可以看到,通过Hello合约的ABI文件获取到合约对象之后,再配合web3工具,就可以与Hello合约进行通信了。...至此,一个简单的Dapp应用示例就此完成了。我们也熟练掌握了通过truffle开发框架编写合约代码、快速编译部署、构建Dapp的整个过程。...invite_code=1fbblhhti09y1 本站文章除注明转载外,均为本站原创 欢迎任何形式的转载,但请务必注明出处,尊重他人劳动 转载请注明:文章转载自

    1.2K30

    阿里前端常见面试题总结

    LRU 算法实现代码如下:// 一个Map对象在迭代时会根据对象中元素的插入顺序来进行// 新添加的元素会被插入到map的末尾,整个栈倒序查看class LRUCache { constructor...冒泡和捕获是事件流在DOM中两种不同的传播方法事件流有三个阶段事件捕获阶段处于目标阶段事件冒泡阶段事件捕获事件捕获(event capturing):通俗的理解就是,当鼠标点击或者触发dom事件时,浏览器会从根节点开始由外到内进行事件传播...() console.log('冒泡')},false);// 点击 node 只会执行上面的函数,该函数不会执行node.addEventListener('click',(event) =>...它们旨在(除其他之外)使得能够创建有效的离线体验,拦截网络请求并基于网络是否可用以及更新的资源是否驻留在服务器上来采取适当的动作。...把用户信息存到Vuex然后再存储到LocalStroage中,然后跳转到下一个页面,根据后端接口的要求,只要不登录就不能访问的页面需要在前端每次跳转页面师判断Cookies中是否有token,没有就跳转到登录页

    99810
    领券