网站首页 > 技术文章 正文
最近摄影入魔,已经很久没有在园里写技术博文了。想想玩是不能玩物丧志,误了正业。在此分享之前在项目重构时遇到的一个技术小矛盾,希望对大家遇到类似问题时有所帮助。
lazyload
相信大家对“懒加载”都非常熟悉了,比如微信文章里的图片、电商网站的产品详情图等等。而懒加载,用得最多的插件就莫过于 jquery.lazyload.js 了,示例如下
<img src="__PIMG__/loading.gif" data-original="__IMG__/1.jpg" /> <script src="__PJS__/jquery.lazyload.js"></script> <script> $("img").lazyload({effect:"fadeIn"}); </script>
可以看到,img标签与正常的图片的并不相同,img的src属性指向的是一个loading的加载图,data-original属性的才是真正的图片的地址。
富文本编辑器
最常用的富文本编辑器莫过于 KindEditor,很完整明了。和博客园的文本编辑器差不多,也可以修改文本格式,上传图片,切换成源码模式等等。
问题来了
这两者有什么矛盾呢?后台编辑所使用的KindEditor上传图片等使用的img标签是正常的src,而前台所显示的时候img的src是loading图。而且,在后台重构之前,这一段的页面并非是可视化生成而是直接用HTML输进去的,数据库中的详情页的内容都是按lazyload的格式。所以在KindEditor中原来的图片其实显示不出来。难道就这样放弃可视化编辑吗?当然不能放弃。
方案一:前台和数据库按原来的样子,后台在编辑时把编辑器内的图片显示也用lazyload显示出来,后台提交保存时用正则匹配把src替换成lazyload需要的样子再入库;
方案二:把数据库里面的内容全部改了,改成正常的img标签和src属性;前台输出后用js替换成符合lazyload所需要的格式。
方案三:数据库原来的内容不改,但新的数据使用标准img标签。后台编辑时,如果是lazyload的格式则用js把图片替换成真实图片,否则直接显示;提交时,使用的是标准img标签;前台显示如果是标准img标签,则用js修改成lazyload所需要的格式。
在衡量过程中,方案一的后台提交保存时用正则匹配修改成lazyload所需要的样子时比较麻烦,这个正则写起来相当有难度;方案二修改原来的数据库中的数据也是因为这个正则匹配的问题而不采用。最后采用了方案三。
管理后台的显示替换核心代码如下,需要留意的是不只要替换可视化界面的显示,还要重新生成里面的代码框
<script> $(document).ready(function{ //KindEditor里面的内容的一些数据兼容处理 setTimeout( function{ var testF= $("iframe.ke-edit-iframe").contents.find("body"); $( testF ).find("img").each(function{ // console.log( $(this).attr("data-original") ); var lazyOriginal = $(this).attr("data-original"); if( lazyOriginal ){ $(this).attr("src", lazyOriginal ).removeAttr("data-ke-src").removeAttr("data-original"); //直接替换src为original并去除Kindeditor的缓存和原来的data-original } }); $("span[data-name=source]").trigger("click"); //要点击了显示源按钮,textarea才会有值 $("textarea.ke-edit-textarea").val( $(testF).html ); // console.log( $("textarea.ke-edit-textarea").val ); $("span[data-name=source]").trigger("click"); }, 500); }); </script>
WAP版前端显示页面的产品详情核心代码如下
<!--图文详情--> <div id="CMSinfo"> {$proData["CMSinfo"]} </div> <style> #CMSinfo ul, #CMSinfo li { margin: 0; padding: 0; list-style: none; } #CMSinfo img { width: 100%; display: block; } </style> <script src="__PJS__/jquery.lazyload.js"></script> <script> $(document).ready(function{ //对于要懒加载的图,用JS方式把img的源地址改变 $("#CMSinfo img").each(function{ if( !$(this).attr("data-original") ){ $(this).attr("data-original", $(this).attr("src") ).attr("src", "__PIMG__/loading.gif"); } }); $("#CMSinfo img").lazyload; }); </script> <!--图文详情结束-->
猜你喜欢
- 2024-10-07 事件加载在前端开发中的关键应用场景
- 2024-10-07 2024前端大厂面试题 Vue.js如何优化首屏加载时间
- 2024-10-07 前端面试:异步加载和延迟加载的理解?
- 2024-10-07 使用原生的js实现简易的图片延时加载
- 2024-10-07 Vue实战051:各种懒加载技术实现 vue懒加载实现原理
- 2024-10-07 Webpack 代码分离与懒加载 webpack分包加载
- 2024-10-07 手把手教你如何用jQuery实现图片懒加载,仔细看!
- 2024-10-07 Vue-路由懒加载 3种方式 vue动态路由懒加载
- 2024-10-07 鸿蒙开发(八十九):LazyForEach 数据懒加载
- 2024-10-07 7.8 vue-router实现路由懒加载(动态加载路由),新增chunkFilename
你 发表评论:
欢迎- 最近发表
-
- 前端流行框架Vue3教程:13. 组件传递数据_Props
- 前端必看!10 个 Vue3 救命技巧,解决你 90% 的开发难题?
- JAVA和JavaScript到底是什么关系?是亲戚吗?
- Java和js有什么区别?(java和javascript的区别和联系)
- 东方标准|Web和Java的区别,如何选择这两个专业
- 前端面试题-JS 中如何实现大对象深度对比
- 360前端一面~面试题解析(360前端笔试)
- 加班秃头别慌!1 道 Vue 面试题,快速解锁大厂 offer 通关密码
- 焦虑深夜刷题!5 道高频 React 面试题,吃透 offer 稳了
- 2025Web前端面试题大全(整理版)面试题附答案详解,最全面详细
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端md5加密 (49)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- 前端懒加载 (45)
- 前端接口 (46)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle查询数据库 (45)
- oracle约束 (46)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)