当前位置: 首页 > news >正文

网站制作教程dw山西推广型网站制作

网站制作教程dw,山西推广型网站制作,贵州成品网站,做简单网站文章目录 前言一、修改 ec-canvas组件1.1 在ec-canvas组件methods中定义一个initChart方法1.2 用initChart全局替换this.ec.onInit1.3 监听数据变化1.4 ec-canvas完整代码参考 二、H5 echarts组件三、供外部调用的组件外部调用组件 uni-chart代码使用uni-chart 前言 接上文ec-canvas组件methods中定义一个initChart方法1.2 用initChart全局替换this.ec.onInit1.3 监听数据变化1.4 ec-canvas完整代码参考 二、H5 echarts组件三、供外部调用的组件外部调用组件 uni-chart代码使用uni-chart 前言 接上文uniapp 微信小程序使用echarts这篇文章目的为使用uniapp时提供一个同时兼容H5和小程序的echarts组件在使用时尽量减少心智负担。 一、修改 ec-canvas组件 首先修改uniapp 微信小程序使用echarts中的ec-canvas组件将initChart方法置于该组件内部而不是存在于业务组件中。 1.1 在ec-canvas组件methods中定义一个initChart方法 export default {initChart(canvas, width, height, dpr) {const chartInstance echarts.init(canvas, null, {width,height,devicePixelRatio: dpr // 像素})canvas.setChart(this.chartInstance)chartInstance.setOption(this.ec.option || {})return chartInstance} }1.2 用initChart全局替换this.ec.onInit 修改initByOldWay和initByNewWay两个方法 methods: {initByOldWay(callback) {//...其余逻辑else if ( this.ec ) {this.chart this.initChart(canvas,res.width,res.height,canvasDpr)}//...其余逻辑},initByNewWay(callback) {//...其余逻辑else if (this.ec) {this.chart this.initChart(canvas,canvasWidth,canvasHeight,canvasDpr)}//...其余逻辑} }1.3 监听数据变化 阅读initChart方法可知我们现在的图表数据是从props中的ec来的ec是个对象有一个option的键。对这个option监听即可: 注:这里没必要使用深度监听外部组件使用时如果图表数据的值有变化直接将有变化的部分直接赋值给option即可而不是通过option.xxx去修改数据。 如果想要通过option.xxx去修改数据那么就需要深度监听了。 export default {//...其余代码watch: {ec.option(val) {if(!this.chart) returnthis.chart.setOption(val)}},//...其余代码 }1.4 ec-canvas完整代码参考 templateuni-shadow-root classec-canvas-ec-canvascanvasv-ifisUseNewCanvastype2dclassec-canvas:canvas-idcanvasIdinitinittouchstarttouchStarttouchmovetouchMovetouchendtouchEnd/canvascanvasv-elseclassec-canvas:canvas-idcanvasIdinitinittouchstarttouchStarttouchmovetouchMovetouchendtouchEnd/canvas/uni-shadow-root /templatescript import WxCanvas from ./wx-canvas import * as echarts from ./echarts.min.jslet ctxfunction compareVersion(v1, v2) {v1 v1.split(.)v2 v2.split(.)const len Math.max(v1.length, v2.length)while (v1.length len) {v1.push(0)}while (v2.length len) {v2.push(0)}for (let i 0; i len; i) {const num1 parseInt(v1[i])const num2 parseInt(v2[i])if (num1 num2) {return 1} else if (num1 num2) {return -1}}return 0 }function wrapTouch(event) {for (let i 0; i event.touches.length; i) {const touch event.touches[i]touch.offsetX touch.xtouch.offsetY touch.y}return event } export default {props: {canvasId: {type: String,value: ec-canvas,},ec: {type: Object,},forceUseOldCanvas: {type: Boolean,value: false,},},data() {return {isUseNewCanvas: false,}},watch: {ec.option(val) {if(!this.chart) returnthis.chart.setOption(val)}},onReady: function () {// Disable prograssive because drawImage doesnt support DOM as parameter// See https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.drawImage.htmlecharts.registerPreprocessor((option) {if (option option.series) {if (option.series.length 0) {option.series.forEach((series) {series.progressive 0})} else if (typeof option.series object) {option.series.progressive 0}}})if (!this.ec) {console.warn(组件需绑定 ec 变量例ec-canvas idmychart-dom-bar canvas-idmychart-bar ec{{ ec }}/ec-canvas)return}if (!this.ec.lazyLoad) {this.init()}},methods: {init: async function (callback) {const version wx.getSystemInfoSync().SDKVersionconst canUseNewCanvas compareVersion(version, 2.9.0) 0const forceUseOldCanvas this.forceUseOldCanvasconst isUseNewCanvas canUseNewCanvas !forceUseOldCanvasthis.isUseNewCanvas isUseNewCanvasif (forceUseOldCanvas canUseNewCanvas) {console.warn(开发者强制使用旧canvas,建议关闭)}await this.$nextTick()if (isUseNewCanvas) {// console.log(微信基础库版本大于2.9.0开始使用canvas type2d/);// 2.9.0 可以使用 canvas type2d/canvasthis.initByNewWay(callback)} else {const isValid compareVersion(version, 1.9.91) 0if (!isValid) {console.error(微信基础库版本过低需大于等于 1.9.91。 参见https://github.com/ecomfe/echarts-for-weixin #%E5%BE%AE%E4%BF%A1%E7%89%88%E6%9C%AC%E8%A6%81%E6%B1%82)return} else {console.warn(建议将微信基础库调整大于等于2.9.0版本。升级后绘图将有更好性能)this.initByOldWay(callback)}}},initChart(canvas, width, height, dpr) {const chartInstance echarts.init(canvas, null, {width,height,devicePixelRatio: dpr // 像素})canvas.setChart(this.chartInstance)chartInstance.setOption(this.ec.option || {})return chartInstance},initByOldWay(callback) {// 1.9.91 version 2.9.0原来的方式初始化ctx wx.createCanvasContext(this.canvasId, this)const canvas new WxCanvas(ctx, this.canvasId, false)echarts.setCanvasCreator(() {return canvas})// const canvasDpr wx.getSystemInfoSync().pixelRatio // 微信旧的canvas不能传入dprconst canvasDpr 1var query wx.createSelectorQuery().in(this)query.select(.ec-canvas).boundingClientRect((res) {if (typeof callback function) {this.chart callback(canvas, res.width, res.height, canvasDpr)} else if ( this.ec ) {this.chart this.initChart(canvas,res.width,res.height,canvasDpr)} else {this.triggerEvent(init, {canvas: canvas,width: res.width,height: res.height,canvasDpr: canvasDpr, // 增加了dpr可方便外面echarts.init})}}).exec()},initByNewWay(callback) {// version 2.9.0使用新的方式初始化const query wx.createSelectorQuery().in(this)query.select(.ec-canvas).fields({ node: true, size: true }).exec((res) {const canvasNode res[0].nodethis.canvasNode canvasNodeconst canvasDpr wx.getSystemInfoSync().pixelRatioconst canvasWidth res[0].widthconst canvasHeight res[0].heightconst ctx canvasNode.getContext(2d)const canvas new WxCanvas(ctx, this.canvasId, true, canvasNode)echarts.setCanvasCreator(() {return canvas})if (typeof callback function) {this.chart callback(canvas, canvasWidth, canvasHeight, canvasDpr)} else if (this.ec) {this.chart this.initChart(canvas,canvasWidth,canvasHeight,canvasDpr)} else {this.triggerEvent(init, {canvas: canvas,width: canvasWidth,height: canvasHeight,dpr: canvasDpr,})}})},canvasToTempFilePath(opt) {if (this.isUseNewCanvas) {// 新版const query wx.createSelectorQuery().in(this)query.select(.ec-canvas).fields({ node: true, size: true }).exec((res) {const canvasNode res[0].nodeopt.canvas canvasNodewx.canvasToTempFilePath(opt)})} else {// 旧的if (!opt.canvasId) {opt.canvasId this.canvasId}ctx.draw(true, () {wx.canvasToTempFilePath(opt, this)})}},touchStart(e) {if (this.chart e.touches.length 0) {var touch e.touches[0]var handler this.chart.getZr().handlerhandler.dispatch(mousedown, {zrX: touch.x,zrY: touch.y,preventDefault: () {},stopImmediatePropagation: () {},stopPropagation: () {},})handler.dispatch(mousemove, {zrX: touch.x,zrY: touch.y,preventDefault: () {},stopImmediatePropagation: () {},stopPropagation: () {},})handler.processGesture(wrapTouch(e), start)}},touchMove(e) {if (this.chart e.touches.length 0) {var touch e.touches[0]var handler this.chart.getZr().handlerhandler.dispatch(mousemove, {zrX: touch.x,zrY: touch.y,preventDefault: () {},stopImmediatePropagation: () {},stopPropagation: () {},})handler.processGesture(wrapTouch(e), change)}},touchEnd(e) {if (this.chart) {const touch e.changedTouches ? e.changedTouches[0] : {}var handler this.chart.getZr().handlerhandler.dispatch(mouseup, {zrX: touch.x,zrY: touch.y,preventDefault: () {},stopImmediatePropagation: () {},stopPropagation: () {},})handler.dispatch(click, {zrX: touch.x,zrY: touch.y,preventDefault: () {},stopImmediatePropagation: () {},stopPropagation: () {},})handler.processGesture(wrapTouch(e), end)}},}, } /script style scoped .ec-canvas {width: 100%;height: 100%; } /style二、H5 echarts组件 其实就是平时正常使用echarts取名为ec-h5直接上代码 templateview classh5-chart-container :idid/view /templatescriptimport * as echarts from ./echarts.min.jsexport default {props: {id: {type: String,default: ec-h5-id},option: {type: Object,default: () {}}},watch: {option(val) {if(!this.chart) returnthis.chart.setOption(val)}},data() {return {}},mounted() {this.initChart()},methods: {initChart() {const chartDom document.getElementById(this.id)this.chart echarts.init(chartDom)this.chart.setOption(this.option)}}} /scriptstyle scoped .h5-chart-container {height: 100%;width: 100%; } /style三、供外部调用的组件 外部调用组件 uni-chart代码 取名为uni-chart通过条件编译的方式由这个组件判断是微信还是H5。 template!-- #ifdef MP-WEIXIN --ec-canvas :ec{option} :canvasIdid /!-- #endif --!-- #ifdef H5 --ec-h5 :optionoption :idid /!-- #endif -- /templatescriptimport ecCanvas from ./ec-canvas.vue;import ecH5 from ./ec-h5.vueexport default {props: {id: {type: String,default: uni-chart-id},option: {type: Object,default: () {}}},components: {ecCanvas,ecH5},} /script使用uni-chart 参考: templateview classparent-containeruni-chart classmy-chart :optionoption //view /templatescript import uniChart from ./components/uni-chart.vue export default {components: {uniChart,},data() {return {option: {xAxis: {type: category,data: [Mon, Tue, Wed, Thu, Fri, Sat, Sun],},yAxis: {type: value,},series: [{data: [120, 200, 150, 80, 70, 110, 130],type: bar,},],},}},mounted() {// 动态更新图表数据setTimeout(() {this.option {series: [{data: [12, 20, 15, 8, 7, 11, 13],color: [red]},],}}, 2000)}, } /script style scoped .parent-container {height: 100vh; } .my-chart {height: 600rpx; } /style 碎碎念微信小程序主包限制有2MB所以这个组件不好放于根目录下的components这样会被打到主包里所以创个分包将图表相关的业务组件都丢到这个分包去这样最好。 分包也能有static文件夹但是我丢进去之后uni还是会重复打包导致分包什么都没有就有2MB大小。
http://www.lakalapos1.cn/news/60924/

相关文章:

  • 响应式网站设计原理2018年做网站赚钱
  • 株洲网站设计叮当设计网站
  • 做视频赚钱的网站电商网站制作项目描述
  • 昆明网站建设有限公司wordpress 照片博客
  • 如何进行企业营销型网站建设规划企业管理8大系统
  • 网站的内容管理人才培训网
  • 网站后期it外包人才
  • 购物网站怎么建设网站设计服务平台
  • 网站维护内容建筑工程招标网
  • 平定住房建设局网站有没有专门做游戏辅助的网站
  • 做lt行业的人让我登网站做电商网站需要会些什么问题
  • 做网站流量怎么卖镇江专业网站制作
  • 做针对国外的网站android获取wordpress数据库连接
  • 太原汽车网站建设百度旗下的外贸建站公司
  • 做网站的学校wordpress增加分类目录
  • 北辰苏州网站建设搭建一个网站的基本流程
  • 大一学生做的网站建站优化收费
  • 卧龙区2015网站建设价格请人帮忙做淘宝网站多少钱
  • 邯郸网站建设网站开发天津市住房和城乡建设部网站
  • 怎么创建企业网站asp相册网站源码
  • 网站会员注册怎么做廊坊网页模板建站
  • 机关网站源码设计师的招聘要求
  • 沧州品牌网站建设wordpress 手机管理员密码
  • 东平做网站景安网站备案要多久
  • 做网站的哪家公司好深圳网站搭建找谁
  • 网站软文推广好处网站流量跟钱的关系
  • 现在搭建一个网站需要多少钱推广广告
  • 网站为什么要seowordpress的字体
  • 福州房产网站建设网站开发项目付款方式
  • 用html制作个人网站网站建设开发公司报价