JavaScript如何实现打印功能_window.print()如何定制?
发布时间 - 2025-12-26 00:00:00 点击率:次window.print()需配合@media print精准控制打印内容与样式,隐藏非必要元素、优化字体颜色、禁用背景图,动态替换DOM可实现定制化打印,注意分页控制与浏览器兼容性。
直接调用 window.print() 会打印整个页面,但实际业务中常需隐藏导航栏、按钮、广告等非内容元素,或调整样式适配打印效果。关
键不是“能不能打印”,而是“怎么只打想打的部分,并且打得清楚美观”。
用CSS媒体查询精准控制打印样式
浏览器在触发打印时会识别 @media print 规则,这是定制打印效果最标准、最可靠的方式。
- 把不想打印的元素设为
display: none,例如:.header, .sidebar, .print-hide { display: none !important; } - 为打印专门优化字体、颜色和间距:
@media print { body { font-size: 12pt; color: #000; line-height: 1.4; } a { color: #000; text-decoration: none; } } - 避免背景图和颜色干扰墨水消耗(尤其黑白打印机):
@media print { * { background: transparent !important; } }
动态切换内容再打印:临时替换DOM
当需要打印的内容与页面展示结构差异较大(比如带图表的详情页要转成纯文本报告),可临时构建一个精简版DOM,打印完再还原。
- 创建一个隐藏的
,只放入待打印的HTML片段- 用
document.body.innerHTML备份原内容,再替换成打印区域内容- 调用
window.print(),之后立即恢复原DOM- 注意:部分浏览器(如Chrome)在打印对话框打开后会暂停JS执行,建议用
setTimeout延迟恢复,或监听afterprint事件(兼容性有限,仅Chrome/Edge支持)避免常见坑:分页与内容截断
长内容容易在不该断的地方分页,影响可读性。CSS提供了一些实用控制手段:
- 用
page-break-inside: avoid防止表格、卡片被切开 - 用
break-before: always或page-break-before: always强制某元素前分页(如每个章节标题前) - 慎用
position: fixed或absolute元素——它们可能在打印时消失或错位 - 测试时用浏览器的“打印预览”(Ctrl+P)而非截图,真实反映分页逻辑
补充技巧:触发打印前做轻量准备
提升用户体验的小细节,不增加复杂度但很实用:
- 打印前自动聚焦到内容区,避免因焦点在输入框导致打印空白页
- 禁用打印按钮本身(防止重复点击),打印结束后再启用
- 对含图片的页面,可提前检查图片是否加载完成(监听
img.onload),避免打印出空白占位 - 移动端需注意:Safari iOS 对
window.print()支持有限,部分机型会静默失败,建议降级提示“请手动分享为PDF”
- 用
# css
# javascript
# java
# html
# js
# 浏览器
# edge
# 打印机
# safari
# ios
# pdf
# win
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
做企业网站制作流程,企业网站制作基本流程有哪些?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
如何在Windows环境下新建FTP站点并设置权限?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
大学网站设计制作软件有哪些,如何将网站制作成自己app?
郑州企业网站制作公司,郑州招聘网站有哪些?
Laravel如何实现一对一模型关联?(Eloquent示例)
Python制作简易注册登录系统
宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程
音乐网站服务器如何优化API响应速度?
香港网站服务器数量如何影响SEO优化效果?
如何快速搭建高效WAP手机网站?
Laravel如何保护应用免受CSRF攻击?(原理和示例)
如何用IIS7快速搭建并优化网站站点?
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
如何在局域网内绑定自建网站域名?
JavaScript如何实现继承_有哪些常用方法
浅析上传头像示例及其注意事项
实例解析angularjs的filter过滤器
如何在IIS中新建站点并配置端口与物理路径?
如何在万网自助建站中设置域名及备案?
Laravel定时任务怎么设置_Laravel Crontab调度器配置
php结合redis实现高并发下的抢购、秒杀功能的实例
如何打造高效商业网站?建站目的决定转化率
Android滚轮选择时间控件使用详解
html如何与html链接_实现多个HTML页面互相链接【互相】
php打包exe后无法访问网络共享_共享权限设置方法【教程】
ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】
敲碗10年!Mac系列传将迎来「触控与联网」双革新
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
如何自定义建站之星模板颜色并下载新样式?
如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】
利用 Google AI 进行 YouTube 视频 SEO 描述优化
phpredis提高消息队列的实时性方法(推荐)
怎样使用JSON进行数据交换_它有什么限制
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
iOS验证手机号的正则表达式
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
Mybatis 中的insertOrUpdate操作
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
用yum安装MySQLdb模块的步骤方法
高端智能建站公司优选:品牌定制与SEO优化一站式服务
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
如何正确选择百度移动适配建站域名?
高端建站如何打造兼具美学与转化的品牌官网?
Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)
轻松掌握MySQL函数中的last_insert_id()
上一篇:深圳网站推广优化策略详解
上一篇:深圳网站推广优化策略详解

