日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何使 highchart图表标题文字可选择复制

發布時間:2025/3/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何使 highchart图表标题文字可选择复制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

highchart圖表的一個常見問題是不能復制文字

比如官網的某個圖表例子,文字不能選擇,也無法復制,有時產品會抓狂...

本文給出一個簡單的方案,包括一些解決的思路,希望能幫助到有需要的人

?

?

初期想了蠻久也搜了蠻多,沒搜到,找到的結論是圖表使用的是svg實現,必然無法選擇文字,似乎是個死問題,已經瀕臨放棄

不過后來又看到一篇討論,其實svg里面的文字是可以選擇復制的

頓時信心又來了,展開了新一輪思考

?

?

思考一:可能是姿勢不對

試試把標題配成 useHTML: true ,使用普通元素渲染,結果還是無法選

?

?

?

看看DOM結構,實際上已經和svg無關了

思考二:會不會是設置了某些樣式呢

跟選擇復制有關的也就這倆了,直接賦上去,還是無效

思考三:會不會是有事件影響,取消了點擊選擇效果呢

為了測試的簡便與純粹性,最好直接使用官方提供的簡單例子

查看元素對應的事件列表,有幾個需要關注

選擇highchart.js ,跳的不準呀,代碼混淆之后貌似chrome的跳轉一致都不太可靠了

思考四:什么js東西使得點擊選擇無效呢

可能是事件禁止了冒泡 stopPropagation,或者是取消了元素的事件默認處理機制 preventDefault

一搜,發現前者沒找到,而后者有多處

定位到一個 mouseDown事件觸發的位置,柳暗花明的感覺

試了一下可以發現,上下兩處是關鍵點,直接造成文字選擇功能失效了(當然這可能是作者的本意)

接下來就是驗證環節,把這文件下下來本地,改好后(注釋那倆地方)用Fiddler的文件映射功能,替換這個例子中的 highchart.js,妥妥的可以進行選擇復制

?

思考五:如何運用在業務代碼中?

在vue中使用的是npm的包管理,所以肯定不能直接改源代碼,可選的一個方案是覆蓋源代碼,即覆蓋這兩個方法

import Highcharts from "highcharts";// 重寫Highcharts事件處理,使得內容可選擇復制Highcharts.Pointer.prototype.onContainerMouseDown = function(a) {a = this.normalize(a);2 !== a.button && (this.zoomOption(a),// a.preventDefault && a.preventDefault(),this.dragStart(a))};Highcharts.Pointer.prototype.onContainerMouseMove = function(b) {// 整理變量let a = Highcharts;let B = Highcharts.charts;let q = function(a) {return "undefined" !== typeof a && null !== a};var c = this.chart;q(a.hoverChartIndex) && B[a.hoverChartIndex] && B[a.hoverChartIndex].mouseIsDown || (a.hoverChartIndex = c.index);b = this.normalize(b);// b.preventDefault || (b.returnValue = !1);"mousedown" === c.mouseIsDown && this.drag(b);!this.inClass(b.target, "highcharts-tracker") && !c.isInsidePlot(b.chartX - c.plotLeft, b.chartY - c.plotTop) || c.openMenu || this.runPointActions(b)};

?

找到對象是誰,這一步可以斷點調試看this,或往上翻代碼,其實是個Pointer.?

通過分析可知,這個對象的Highcharts對象的一個子對象,我們也需要通過簡單的判斷來進行確認好

?需要注意的是,代碼中有一段用到了其他變量 q? B? a,所以在業務代碼中覆蓋的時候,我們需要另外提前賦值

q(a.hoverChartIndex) && B[a.hoverChartIndex] && B[a.hoverChartIndex].mouseIsDown || (a.hoverChartIndex = c.index);

通過一系列分析和斷點查詢,以及確認值的一致,就能保證能覆蓋地正確

?

思考六:在vue中為何沒有生效

然鵝并不是順利的,在實際場景vue-highcharts中使用竟然沒啥變化,一輪調試下來也沒有走斷點,

無可奈何只好去看下它的實現,看有沒有什么突破口

源碼很少,就是一層包裝

但這里可以發現,如果沒有傳入highcharts,就會另外引入npm包來使用

所以很大可能是沒傳入這個屬性,致使覆蓋的Pointer并不是真正的圖表Pointer

仔細檢查代碼,才發現前人留個個坑,把大寫的屬性改成小寫之后,即可匹配上

?

當然,這個覆蓋的方式是挺暴力的,可以根據需求加些判斷處理,不過在現有業務中,不失為一個好辦法

?

轉載于:https://www.cnblogs.com/imwtr/p/11066595.html

總結

以上是生活随笔為你收集整理的如何使 highchart图表标题文字可选择复制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 小毛片在线观看 | 亚洲国产成人一区二区 | 欧美做受高潮动漫 | 麻豆福利在线 | 播放男人添女人下边视频 | 超碰成人av | 青草99| 国产精品亚洲一区二区 | 日不卡 | 少妇人妻偷人精品视频蜜桃 | 欧美重口另类 | 永久免费AV无码网站韩国毛片 | 日本亚洲免费 | 久久香蕉综合 | 国产99久久九九精品无码 | 岛国av在线 | 国产正在播放 | 亚洲成人精品久久 | 自拍1页 | 在线观看免费看片 | 久视频在线观看 | 成人欧美精品 | 亚洲你我色 | 床戏高潮做进去大尺度视频网站 | 男女搞鸡网站 | 日韩第三页| 九九热视频在线 | 日本大尺度激情做爰hd | 日日狠狠久久偷偷四色综合免费 | 欧美日韩国产中文字幕 | 久久久三区 | 日本55丰满熟妇厨房伦 | 免费大片黄在线观看 | 我的丝袜美腿尤物麻麻 | 国产国语videosex另类 | av动漫在线免费观看 | 黄色成人av网站 | 色先锋影院 | 亚洲中文字幕无码不卡电影 | 日本亚洲最大的色成网站www | 一区二区三区播放 | 亚洲视频a| 91浏览器在线观看 | 成人做爰www免费看视频网站 | 老司机一区二区 | 国产91久| 国产一级片在线播放 | 看黄色一级视频 | 亚洲制服丝袜在线播放 | 日韩激情视频在线 | 国产精品入口a级 | 狠狠爱亚洲 | 国产女同91疯狂高潮互磨 | 日韩第一页在线 | 日韩精品国产一区二区 | 日韩无套无码精品 | 久久久亚洲一区 | 邻居校草天天肉我h1v1 | 欧美1级片 | 黄色免费网 | 57pao国产成永久免费视频 | 国产日韩精品电影 | 91视频免费看 | 免费久久久久久 | 国产极品福利 | av电影在线观看 | 国产第9页 | 五月激情av | 丁香婷婷久久久综合精品国产 | 淫妹妹影院 | 91在线无精精品一区二区 | 日本三级日本三级日本三级极 | 夜夜躁狠狠躁 | 日韩123| 国产123区| 成人第四色 | 亚洲 欧美 激情 另类 校园 | 性欧美videos另类艳妇3d | 欧美精品在线观看 | 亚洲一区二区自偷自拍 | 一级特黄aa大片 | 天天干天天日夜夜操 | caoporn视频在线| 极品女神无套呻吟啪啪 | 国产精品第9页 | 精品国产av色一区二区深夜久久 | 狠狠躁夜夜躁人人爽天天高潮 | 九草网 | 久久综合第一页 | 亚洲免费国产 | 久久丁香 | 精品少妇人妻av一区二区 | 求欧美精品网址 | 国产免费看片 | 精品乱子伦一区二区 | 99青草| 成人欧美一区二区三区在线观看 | 天堂中文在线资 | 黄色aaa|