微信小程序实现富文本图片宽度自适应的方法


Posted in Javascript onJanuary 20, 2019

引言:在微信小程序里,比如商品展示页面的商品详情会有图片展示,PC端设置的商品详情是PC端的宽度,所以在小程序里图片会显示不全,这时就应该做相应的处理,使小程序里图片显示正确

微信小程序实现富文本图片宽度自适应的方法

思路

  • 把图片的宽度改为手机屏幕对应的宽度

微信小程序需要知道的知识

  • 需要知道微信小程序里有自己的宽度标准,单位为rpx;
  • 针对所有不同尺寸的浏览器,微信小程序里规定屏幕宽为750rpx;

解决

WXML

<view class='html_detail'>
  <rich-text nodes='{{artical}}'></rich-text>
</view>

WXS

data={artical:''}

async onLoad(){
  const json = await api.getDetail();
  if(json !== null){
    this.artical = util.formatRichText(json.detail.description);
  }
}

若artical里只有图片,并且图片没有设置style和宽度/高度

util.js

function formatRichText(html){
  let newContent= html.replace(/\<img/gi, '<img style="max-width:100%;height:auto;display:block;"');
  return newContent;
}

module.exports = {
  formatRichText
}

若artical里包含多种标签

util.js

/**
 * 处理富文本里的图片宽度自适应
 * 1.去掉img标签里的style、width、height属性
 * 2.img标签添加style属性:max-width:100%;height:auto
 * 3.修改所有style里的width属性为max-width:100%
 * 4.去掉<br/>标签
 * @param html
 * @returns {void|string|*}
 */
function formatRichText(html){
  let newContent= html.replace(/<img[^>]*>/gi,function(match,capture){
    match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, '');
    match = match.replace(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, '');
    match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, '');
    return match;
  });
  newContent = newContent.replace(/style="[^"]+"/gi,function(match,capture){
    match = match.replace(/width:[^;]+;/gi, 'max-width:100%;').replace(/width:[^;]+;/gi, 'max-width:100%;');
    return match;
  });
  newContent = newContent.replace(/<br[^>]*\/>/gi, '');
  newContent = newContent.replace(/\<img/gi, '<img style="max-width:100%;height:auto;display:block;margin-top:0;margin-bottom:0;"');
  return newContent;
}

module.exports = {
  formatRichText
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js正确获取元素样式详解
Aug 07 Javascript
基于jquery的表头固定的若干方法
Jan 27 Javascript
关于jquery.validate1.9.0前台验证的使用介绍
Apr 26 Javascript
在AngularJS中使用AJAX的方法
Jun 17 Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
Apr 14 Javascript
vue子父组件通信的实现代码
Jul 09 Javascript
详谈JS中数组的迭代方法和归并方法
Aug 11 Javascript
JS实现手写parseInt的方法示例
Sep 24 Javascript
vue进行图片的预加载watch用法实例讲解
Feb 07 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
Jun 14 Javascript
解决vue attr取不到属性值的问题
Sep 18 Javascript
vue以组件或者插件的形式实现throttle或者debounce
May 22 Javascript
实例介绍JavaScript中多种组合继承
Jan 20 #Javascript
VUE简单的定时器实时刷新的实现方法
Jan 20 #Javascript
小程序开发中如何使用async-await并封装公共异步请求的方法
Jan 20 #Javascript
Django+vue跨域问题解决的详细步骤
Jan 20 #Javascript
如何在vue里面优雅的解决跨域(路由冲突问题)
Jan 20 #Javascript
JavaScript禁用右键单击优缺点分析
Jan 20 #Javascript
JavaScript中concat复制数组方法浅析
Jan 20 #Javascript
You might like
PHP中Session的概念
2006/10/09 PHP
深入讲解PHP Session及如何保持其不过期的方法
2015/08/18 PHP
php验证码生成代码
2015/11/11 PHP
php实现微信支付之退款功能
2018/05/30 PHP
Yii2框架redis基本应用示例
2018/07/13 PHP
线路分流自动跳转代码;希望对大家有用!
2006/12/02 Javascript
JavaScript 继承机制的实现(待续)
2010/05/18 Javascript
jQuery EasyUI API 中文文档 - NumberSpinner数值微调器使用介绍
2011/10/21 Javascript
jQuery中:header选择器用法实例
2014/12/29 Javascript
jquery获取及设置outerhtml的方法
2015/03/09 Javascript
简单理解JavaScript中的封装与继承特性
2016/03/19 Javascript
javascript实现将数字转成千分位的方法小结【5种方式】
2016/12/11 Javascript
利用jQuery解析获取JSON数据
2017/04/08 jQuery
vue.js中mint-ui框架的使用方法
2017/05/12 Javascript
Angular2 之 路由与导航详细介绍
2017/05/26 Javascript
jQuery事件_动力节点Java学院整理
2017/07/05 jQuery
vue项目中v-model父子组件通信的实现详解
2017/12/10 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
2018/03/06 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
JSON字符串操作移除空串更改key/value的介绍
2019/01/05 Javascript
详解Vue-Router源码分析路由实现原理
2019/05/15 Javascript
在 Vue 应用中使用 Netlify 表单功能的方法详解
2019/06/03 Javascript
Python socket 套接字实现通信详解
2019/08/27 Python
python实现视频读取和转化图片
2019/12/10 Python
Python爬虫破解登陆哔哩哔哩的方法
2020/11/17 Python
VSCODE配置Markdown及Markdown基础语法详解
2021/01/19 Python
全面解析HTML5中的标准属性与自定义属性
2016/02/18 HTML / CSS
手对手的教你用canvas画一个简单的海报的方法示例
2018/12/10 HTML / CSS
LN-CC中国:高端男装和女装的奢侈时尚目的地
2019/09/14 全球购物
阿联酋手表和配饰购物网站:Rivolishop
2019/11/25 全球购物
Delphi工程师笔试题
2013/09/21 面试题
银行文明优质服务培训心得体会
2016/01/09 职场文书
Redis持久化与主从复制的实践
2021/04/27 Redis
为Java项目添加Redis缓存的方法
2021/05/18 Redis
梳理总结Python开发中需要摒弃的18个坏习惯
2022/01/22 Python
Linux系统下MySQL配置主从分离的步骤
2022/03/21 MySQL