<address id="ttjl9"></address>

      <noframes id="ttjl9"><address id="ttjl9"><nobr id="ttjl9"></nobr></address>
      <form id="ttjl9"></form>
        <em id="ttjl9"><span id="ttjl9"></span></em>
        <address id="ttjl9"></address>

          <noframes id="ttjl9"><form id="ttjl9"></form>

          首頁

          echarts中關于自定義legend圖例文字

          前端達人

          文章摘自:https://blog.csdn.net/YPJMFC/article/details/78979319,非常感謝大牛分享。

          echarts中關于自定義legend圖例文字
          首先看一張echarts餅圖: 
           
          這張圖很好做,根本不值得提,但是用過echarts的可能會發現這個圖例有點不一樣,做這個圖例花了我好幾個小時去查,去試。結合一下echarts中legend圖例的特質我們分析一下一些難點:

          1.這里的圖例文本包含兩個變量,而formatter提供的變量模板只有name
          2.兩個變量的樣式各不相同
          3.對齊,換行與居中的應用



          一個個看:

          1.兩個變量
          formatter有兩種形式: 
          - 模板 
          - 回調函數

          模板

          使用字符串模板,模板變量為圖例名稱 {name}
          formatter: 'Legend {name}'

          這種想要修改name的值,暫時我做不到,歡迎讀者指正

          回調函數

          使用回調函數
          formatter: function (name) {
              return 'Legend ' + name;
          }

          我們在返回時可以對name進行修改,從而返回我們需要的值,初步改動是這樣:

          var data = [
              {value:40, name:'貨幣'},
              {value:20, name:'股票'},
              {value:40, name:'債券'}
          ]
          formatter:  function(name){
              var total = 0;
              var target;
              for (var i = 0, l = data.length; i < l; i++) {
              total += data[i].value;
              if (data[i].name == name) {
                  target = data[i].value;
                  }
              }
              return name + ' ' + ((target/total)*100).toFixed(2) + '%';
          }


          2.兩種樣式
          想自定義圖例文字樣式,就要用到富文本:rich,但是在官方文檔中看到的只有模板形式的富文本樣式配置,由1知用模板很難實現自定義name,所以只能用回調函數形式,采用富文本的形式對name進行改造:

          formatter:  function(name){
              var total = 0;
              var target;
              for (var i = 0, l = data.length; i < l; i++) {
              total += data[i].value;
              if (data[i].name == name) {
                  target = data[i].value;
                  }
              }
              var arr = [
                  '{a|'+((target/total)*100).toFixed(2)+'%}',
                  '{b|'+name+'}',
              ]
              return arr.join('\n')
          },
          textStyle:{
              rich:{
                  a:{
                      fontSize:20,
                      verticalAlign:'top',
                      align:'center',
                      padding:[0,0,28,0]
                  },
                  b:{
                      fontSize:14,
                      align:'center',
                      padding:[0,10,0,0],
                      lineHeight:25
                  }
              }
          }

          3.對齊,換行與居中
          為了圖例與第一行文字對齊,需要設置兩個樣式的padding,把文字頂到合適的位置,然后為了上下行的間隔,設置了第2行文字的行高,最終呈現了上面圖片的效果。不知道是不是有點地方做煩了,但是能最終實現自己想要的效果,很有成就感。

          4.實例
          這是完整的組件:

          class ConfigChart extends Component {

              constructor(props) {
                  super(props);
                  this.state = {};
              };
              getOption = () => {
                  var data = [
                      {value:40, name:'貨幣'},
                      {value:20, name:'股票'},
                      {value:40, name:'債券'}
                  ]
                  const option = {
                      tooltip : {
                          trigger: 'item',
                          formatter: "{a} <br/> : {c} (hvl7xvr%)"
                      },
                      // formatter:  function(name){

                      //     var total = 0;
                      //     var target;
                      //     for (var i = 0, l = data.length; i < l; i++) {
                      //     total += data[i].value;
                      //     if (data[i].name == name) {
                      //     target = data[i].value;
                      //     }
                      //     }
                      //     return name + ' ' + ((target/total)*100).toFixed(2) + '%';
                      // },

                      series: [
                          {
                              name: '訪問來源',
                              type: 'pie',
                              radius: [50, 80],
                              center: ['50%', '40%'],
                              label: {
                                  normal: {
                                      show: false
                                  },
                                  emphasis: {
                                      show: false
                                  }
                              },
                              data: [
                                  {
                                      value: 40,
                                      name: '貨幣',
                                      itemStyle: { normal: { color: "#5877F0" } }
                                  },
                                  { value: 20, name: '股票', itemStyle: { normal: { color: "#AA9FFD" } } },
                                  { value: 40, name: '債券', itemStyle: { normal: { color: "#F96481" } } }
                              ]
                          }
                      ],
                      legend: {
                          x: 'center',
                          // y: 'bottom',
                          bottom:5,
                          itemGap:30,
                          itemWidth:5,
                          textStyle:{
                              fontSize: 12
                          },
                          align:'left',
                          data: [
                              {
                                  name:'貨幣',
                                  icon:'circle'
                              },
                              {
                                  name:'股票',
                                  icon:'circle'
                              },{
                                  name:'債券',
                                  icon:'circle'
                              }
                          ],
                          // formatter:'{a|{name}}\n{name}',
                          formatter:  function(name){
                              var total = 0;
                              var target;
                              for (var i = 0, l = data.length; i < l; i++) {
                              total += data[i].value;
                              if (data[i].name == name) {
                                  target = data[i].value;
                                  }
                              }
                              var arr = [
                                  '{a|'+((target/total)*100).toFixed(2)+'%}',
                                  '{b|'+name+'}',
                              ]
                              // return name + ' ' + ((target/total)*100).toFixed(2) + '%';
                              return arr.join('\n')
                          },
                          textStyle:{
                              rich:{
                                  a:{
                                      fontSize:20,
                                      verticalAlign:'top',
                                      align:'center',
                                      padding:[0,0,28,0]
                                  },
                                  b:{
                                      fontSize:14,
                                      align:'center',
                                      padding:[0,10,0,0],
                                      lineHeight:25
                                  }
                              }
                          }
                      },
                      backgroundColor: "#fff"
                  };
                  return option;
              };
              render() {
                  const _this = this;
                  const { isShow } = this.props;
                  return isShow ?
                      <div className={StyleClass.configChartWrapper}>
                          <ReactEcharts
                              option={_this.getOption()}
                              echarts={echarts}
                              style={{ height: '265px', width: $.width() }}
                              className='react_for_echarts' />
                      </div> : null;
              }

          }
          其實大神上面的數據還是有點問題,按照大神這樣做的話,餅狀圖的百分比和算出來的有一點點出入(算出來的值加起來不夠百分百),其實就是最后一項的百分比和餅狀圖的不一樣,其他的都一樣,所以,我自己修改了幾個小時,終于把它完善了(主要是綠色的代碼),代碼如下:

          this.dateEchart.setOption({

          color:['#4BC373','#4178E8','#FF5B57'],

                       tooltip: {

          trigger: 'item',

          formatter: "{a} <br/>: {c} (rpn95zj%)"

          },

          legend: {

          orient: 'vertical',

          right:'10%',

          top:'40%',

          data:['微信支付','支付寶網上支付','銀行支付'],

          formatter:(name)=>{

          let target,count;

          let total=0,num=0;

          let l=this.data2.length;

          for(var i=0;i<l;i++){

          total+=this.data2[i].value;

          }

          for(i=0;i<l;i++){

          if((this.data2[i].name==name)&&(i<l-1)){

          target=this.data2[i].value;

          count=((target/total)*100).toFixed(2)+'%';

          return name+': '+count;

          }

          if((this.data2[i].name==name)&&(i==l-1)){

          for(i=0;i<l-1;i++){

          num+=parseFloat((((this.data2[i].value)/total)*100).toFixed(2));

          }

          let yy=(100-num).toFixed(2);

          return name+': '+yy+'%';

          }

          }

          }

          },

          series: [

          {

          name:'訪問來源',

          type:'pie',

          radius: ['40%', '60%'],

          center:['40%','50%'],

          avoidLabelOverlap: false,

          label: {

          normal: {

          show: false,

          position: 'center'

          },

          emphasis: {

          show: true,

          textStyle: {

          fontSize: '30',

          fontWeight: 'bold'

          }

          },

          },

          labelLine: {

          normal: {

          show: false

          }

          },

          data:this.data2

          }

          ]

                   });


          藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼ben_lanlan,報下信息,會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

          文章來源:csdn

          分享此文一切功德,皆悉回向給文章原作者及眾讀者.
          免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務

          echarts-x軸 y軸配置(字體顏色,線的顏色,分割線,y周單位顏色)

          前端達人

          
          
          1. //var myChart = this.$echarts.init(document.getElementById("echart-twoline")); //vue
          2. var myChart = echarts.init(document.getElementById("echart-twoline"));//jquery
          3. var option = {
          4. tooltip: {
          5. trigger: 'axis',
          6. axisPointer: {
          7. type: 'shadow'
          8. }
          9. },
          10. legend: {
          11. data: ['計劃勞務資源', "實際勞務資源"],
          12. //align: 'left',
          13. right: 10,
          14. textStyle: {
          15. color: "#fff"
          16. },
          17. itemWidth: 14,
          18. itemHeight: 10,
          19. itemGap: 13,
          20. },
          21. grid: {
          22. left: '3%',
          23. right: '4%',
          24. bottom: '3%',
          25. containLabel: true
          26. },
          27. xAxis: [{
          28. type: 'category',
          29. data: ['1月','2月','3月', '4月'],
          30. axisLine: {/x軸線的顏色以及寬度
          31. show: true,
          32. lineStyle: {
          33. color: "rgba(219,225,255,1)",
          34. width: 0,
          35. type: "solid"
          36. }
          37. },
          38. axisTick: {
          39. show: false,
          40. },
          41. axisLabel: {//x軸文字的配置
          42. show: true,
          43. textStyle: {
          44. color: "rgba(219,225,255,1)",
          45. }
          46. },
          47. splitLine: {//分割線配置
          48. show:false,
          49. lineStyle: {
          50. color: "rgba(219,225,255,1)",
          51. }
          52. }
          53. }],
          54. yAxis: [{
          55. type: 'value',
          56. name:"單位:人",//y軸上方的單位
          57. nameTextStyle:{//y軸上方單位的顏色
          58. color:'#151515'
          59. },
          60. axisLabel: {//y軸文字的配置
          61. textStyle: {
          62. color: "rgba(219,225,255,1)",
          63. margin: 15
          64. },
          65. // formatter: '{value} %'//y軸的每一個刻度值后面加上‘%’號
          66. },
          67. axisTick: {
          68. show: false,
          69. },
          70. axisLine: {//y軸線的顏色以及寬度
          71. show: false,
          72. lineStyle: {
          73. color: "rgba(219,225,255,1)",
          74. width: 1,
          75. type: "solid"
          76. },
          77. },
          78. splitLine: {//分割線配置
          79. show:false,
          80. lineStyle: {
          81. color: "rgba(219,225,255,1)",
          82. }
          83. }
          84. }],
          85. series: [{
          86. name: '計劃勞務資源',
          87. type: 'bar',
          88. data: [38,38,42,48],
          89. barWidth: 10, //柱子寬度
          90. barGap: .5, //柱子之間間距
          91. itemStyle: {
          92. normal: {
          93. color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [{
          94. offset: 0,
          95. color: 'rgba(0, 153, 239, 0.8)'
          96. }, {
          97. offset: 1,
          98. color: 'rgba(66, 187, 255, 1)'
          99. }]),
          100. opacity: 1,
          101. }
          102. }
          103. }, {
          104. name: '實際勞務資源',
          105. type: 'bar',
          106. data: [40, 30, 42, 50],
          107. barWidth: 10,
          108. barGap: .5,
          109. itemStyle: {
          110. normal: {
          111. color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [{
          112. offset: 0,
          113. color: 'rgba(0, 242, 159, 1)'
          114. }, {
          115. offset: 1,
          116. color: 'rgba(76, 240, 254, 1)'
          117. }]),
          118. opacity: 1,
          119. }
          120. }
          121. }]
          122. };
          123. myChart.setOption(option);
          124. window.addEventListener("resize", () => {
          125. myChart.resize();
          126. });

           

          藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼ben_lanlan,報下信息,會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

          文章來源:csdn + 博客園

          分享此文一切功德,皆悉回向給文章原作者及眾讀者.
          免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務


          echarts分割線變虛線

          前端達人

           
          
          1. yAxis.splitLine Object
          2. 坐標軸在 grid 區域中的分隔線。
          3. yAxis.splitLine.show boolean
          4. [ default: true ]
          5. 是否顯示分隔線。默認數值軸顯示,類目軸不顯示。
          6. yAxis.splitLine.interval number, Function
          7. [ default: 'auto' ]
          8. 坐標軸分隔線的顯示間隔,在類目軸中有效。默認同 axisLabel.interval 一樣。
          9. 默認會采用標簽不重疊的策略間隔顯示標簽。
          10. 可以設置成 0 強制顯示所有標簽。
          11. 如果設置為 1,表示『隔一個標簽顯示一個標簽』,如果值為 2,表示隔兩個標簽顯示一個標簽,以此類推。
          12. 可以用數值表示間隔的數據,也可以通過回調函數控制?;卣{函數格式如下:
          13. (index:number, value: string) => boolean
          14. 第一個參數是類目的 index,第二個值是類目名稱,如果跳過則返回 false。
          15. yAxis.splitLine.lineStyle Object
          16. yAxis.splitLine.lineStyle.color Array, string
          17. [ default: ['#ccc'] ]
          18. 分隔線顏色,可以設置成單個顏色。
          19. 也可以設置成顏色數組,分隔線會按數組中顏色的順序依次循環設置顏色。
          20. 示例
          21. splitLine: {
          22. lineStyle: {
          23. // 使用深淺的間隔色
          24. color: ['#aaa', '#ddd']
          25. }
          26. }
          27. yAxis.splitLine.lineStyle.width number
          28. [ default: 1 ]
          29. 分隔線線寬。
          30. yAxis.splitLine.lineStyle.type string
          31. [ default: 'solid' ]
          32. 分隔線線的類型。
          33. 可選:
          34. 'solid'
          35. 'dashed'
          36. 'dotted'
           
          
          1. yAxis: {
          2. splitLine: {
          3. show: true,
          4. lineStyle:{
          5. type:'dashed'
          6. }
          7. }
          8. },

          1

          藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼ben_lanlan,報下信息,會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

          文章來源:csdn + 博客園

          分享此文一切功德,皆悉回向給文章原作者及眾讀者.
          免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務


          vue項目引入字體.ttf

          前端達人

          1、下載所需要的字體,.ttf格式本文以(FZCYJ.ttf 為例)

          2、在src下新建common文件,文件夾中包含以下文件


          3、打開font.css

          
          
          1. @font-face {
          2. font-family: 'FZCYJ'; //重命名字體名
          3. src: url('FZCYJ.ttf'); //引入字體
          4. font-weight: normal;
          5. font-style: normal;
          6. }

          4、配置webpack.base.conf.js 文件


          5、App.vue引入字體


          6、可在body中設置字體

          
          
          1. body{
          2. font-family: FZCYJ;
          3. }

           
          或者

          1、UI設計圖有"華文黑體",擔心客戶端沒有該字體,將"huawen.ttf"字體文件,放入項目中:

          2、創建一個font.scss(或font.css)文件:

          1 @font-face { 2  font-family: 'huawen'; //重命名字體名 3  src: url('huawen.ttf'); //引入字體 4  font-weight: normal; 5  font-style: normal; 6 }

          3、在main.js中引入

          import '@/common/css/font.scss';

          4、就可以直接使用了:

          div { font-family: 'huawen';
          }

           

          藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼ben_lanlan,報下信息,會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

          文章來源:csdn + 博客園

          分享此文一切功德,皆悉回向給文章原作者及眾讀者.
          免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服務

          input中提示語得顏色 + input 標簽實現輸入框帶提示文字效果(兩種方法)

          前端達人



          <style>
          /修改提示文字的顏色/ input::-webkit-input-placeholder { / WebKit browsers / color: red; } input:-moz-placeholder { / Mozilla Firefox 4 to 18 / color: red; } input::-moz-placeholder { / Mozilla Firefox 19+ / color: red; } input:-ms-input-placeholder { / Internet Explorer 10+ / color: red; } </style>


          這篇文章主要介紹了input 標簽實現輸入框帶提示文字效果(兩種方法),需要的朋友可以參考下

          方法一:html5配合css3實現帶提示文字的輸入框(擺脫js);

          webkit特有的一個css,可以控制里面的文字樣式,配合css3的動畫效果和偽類,我們就可以很容易做出一個帶動畫的輸入框,在系統登錄、搜索等位置很適合,感興趣的你可以參考下本文或許可以幫助到你,Webkit作為載體開發系統,當然需要大量使用Html5與CSS3,不僅減少大量的JS還可以保證更流暢。

          當選中對話框后,提示文字變淺色,輸入后消失.這個現在通行的做法是在Input標簽后面增加一個Label。使用JS控制。

          HTML5出現后,我們有一個更好的方法。

          1
          <input type="text" placeholder="用戶名或郵件地址" name="username"/>

          看到有placeholder標簽,可以作為用戶文字提示。這樣子就非常方便了。但是為了最求完美,我們需要在選中后,將文字變淺,或者修改提示文件的樣式,我們該怎么辦?

          1
          2
          3
          4
          5
          6
          7
          8
          input::-webkit-input-placeholder {
          color: #999;
          -webkit-transition: color.5s;
          }
          input:focus::-webkit-input-placeholder, input:hover::-webkit-input-placeholder {
          color: #c2c2c2;
          -webkit-transition: color.5s;
          }

          -webkit-input-placeholder,webkit特有的一個css,可以控制里面的文字樣式,配合css3的動畫效果和偽類,我們就可以很容易做出一個帶動畫的輸入框,在系統登錄、搜索等位置很適合。當然你要為了兼容IE6,這個方法是行不通。不過Ie9也支持placeholder標簽,就是無法修改它的顏色而已。
          那么,如果不支持該怎么辦?可以簡單直接使用Jquery幫忙,那么在就不在本文討論范圍了。

          給一個Demo,Demo地址 必須在Webkit瀏覽器下才看到完整效果。是不是很方便?

          方法二:就是 js 控制;

          代碼如下:

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          24
          25
          26
          27
          28
          29
          30
          31
          32
          33
          34
          35
          36
          37
          38
          39
          40
          41
          42
          43
          44
          <script type="text/javascript">
           $(document).ready(function(){
           $("#focus .input_txt").each(function(){
            var thisVal=$(this).val();
            //判斷文本框的值是否為空,有值的情況就隱藏提示語,沒有值就顯示
            if(thisVal!=""){
            $(this).siblings("span").hide();
            }else{
            $(this).siblings("span").show();
            }
            //聚焦型輸入框驗證
            $(this).focus(function(){
            $(this).siblings("span").hide();
            }).blur(function(){
            var val=$(this).val();
            if(val!=""){
             $(this).siblings("span").hide();
            }else{
             $(this).siblings("span").show();
            }
            });
           })
           $("#keydown .input_txt").each(function(){
            var thisVal=$(this).val();
            //判斷文本框的值是否為空,有值的情況就隱藏提示語,沒有值就顯示
            if(thisVal!=""){
            $(this).siblings("span").hide();
            }else{
            $(this).siblings("span").show();
            }
            $(this).keyup(function(){
            var val=$(this).val();
            $(this).siblings("span").hide();
            }).blur(function(){
            var val=$(this).val();
            if(val!=""){
             $(this).siblings("span").hide();
            }else{
             $(this).siblings("span").show();
            }
            })
            })
           })
          </script>

          效果如圖;

          點擊的時候,提示文字消失;失去焦點的時候提示文字出現,但是有內容輸入后失去焦點也不顯示提示文字;還有,密碼框和文本框不一樣啊,密碼框的值不顯現的。

           方法三:直接寫標簽上;(這個比較實用)

          代碼如下:

          1
          2
          <input type="text" value="提示內容。。。" onFocus="if(value==defaultValue){value='';this.style.color='#000'}" onBlur="if(!value){value=defaultValue;this.style.color='#999'}" style ="#999;"/>
              </div>

          總結

          以上所述是小編給大家介紹的input 標簽實現輸入框帶提示文字效果(兩種方法),希望對大家有所幫助

          藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼ben_lanlan,報下信息,會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

          文章來源:csdn + 博客園

          分享此文一切功德,皆悉回向給文章原作者及眾讀者.
          免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務

          Vue組件基礎用法

          前端達人

          前面的話

          組件(Component)是Vue.js最強大的功能之一。組件可以擴展HTML元素,封裝可重用的代碼。根據項目需求,抽象出一些組件,每個組件里包含了展現、功能和樣式。每個頁面,根據自己所需,使用不同的組件來拼接頁面。這種開發模式使前端頁面易于擴展,且靈活性高,而且組件之間也實現了解耦。本文將詳細介紹Vue組件基礎用法

           

          概述

          在 Vue 里,一個組件本質上是一個擁有預定義選項的一個 Vue 實例

          組件是一個自定義元素或稱為一個模塊,包括所需的模板、邏輯和樣式。在HTML模板中,組件以一個自定義標簽的形式存在,起到占位符的功能。通過Vue.js的聲明式渲染后,占位符將會被替換為實際的內容

          下面是一個最簡單的模塊示例

          <div id="app"> <xiaohuochai></xiaohuochai> </div>

           

          注冊組件

          組件注冊包括全局注冊和局部注冊兩種

          【全局注冊】

          要注冊一個全局組件,可以使用 Vue.component(tagName, options)

          Vue.component('my-component', { // 選項 })

          組件在注冊之后,便可以在父實例的模塊中以自定義元素 <my-component></my-component> 的形式使用

          [注意]要確保在初始化根實例之前注冊了組件

          <div id="example"> <my-component></my-component> </div>
          復制代碼
          <script> // 注冊 Vue.component('my-component', {
            template: '<div>A custom component!</div>' }) // 創建根實例 new Vue({
            el: '#example' }) </script>
          復制代碼

          【局部注冊】

          通過使用組件實例選項components注冊,可以使組件僅在另一個實例/組件的作用域中可用

          <div id="example"> <my-component></my-component> </div>
          復制代碼
          <script> // 注冊 var Child = {
            template: '<div>A custom component!</div>' }; // 創建根實例 new Vue({
            el: '#example',
              components: { // <my-component> 將只在父模板可用 'my-component': Child
            }  
          }) </script>
          復制代碼

          組件樹

          使用組件實例選項components注冊,可以實現組件樹的效果

          <div id="example"> <my-component></my-component> </div>
          復制代碼
          <script> // 注冊 var headerTitle = {
              template: '<p>我是標題</p>',
          }; var headerContent = {
              template: '<p>我是內容</p>',
          }; var header = {
            template: ` <div class="hd"> <header-content></header-content> <header-title></header-title> </div>  `,
              components: { 'header-content': headerContent, 'header-title': headerTitle
            }   
          }; // 創建實例 new Vue({
            el: '#example',
              components: { 'my-component': header
            }  
          }) </script>
          復制代碼

          對于大型應用來說,有必要將整個應用程序劃分為組件,以使開發可管理。一般地組件應用模板如下所示

          復制代碼
          <div id="app"> <app-nav></app-nav> <app-view> <app-sidebar></app-sidebar> <app-content></app-content> </app-view> </div>
          復制代碼

          【v-once】

          盡管在 Vue 中渲染 HTML 很快,不過當組件中包含大量靜態內容時,可以考慮使用 v-once 將渲染結果緩存起來

          Vue.component('my-component', {
            template: '<div v-once>hello world!...</div>'
          })

           

          模板分離

          在組件注冊中,使用template選項中拼接HTML元素比較麻煩,這也導致了HTML和JS的高耦合性。慶幸的是,Vue.js提供了兩種方式將定義在JS中的HTML模板分離出來

          【script】

          在script標簽里使用 text/x-template 類型,并且指定一個 id

          <script type="text/x-template" id="hello-world-template"> <p>Hello hello hello</p> </script>
          Vue.component('hello-world', {
            template: '#hello-world-template'
          })

          上面的代碼等價于

          Vue.component('hello-world', {
            template: '<p>Hello hello hello</p>'
          })

          下面是一個簡單示例

          <div id="example"> <my-component></my-component> </div>
          <script type="text/x-template" id="hello-world-template"> <div>hello world!</div>  </script>
          復制代碼
          <script> Vue.component('my-component', {
            template: '#hello-world-template' }) new Vue({
            el: '#example' }) </script>
          復制代碼

          【template】

          如果使用<template>標簽,則不需要指定type屬性

          <div id="example"> <my-component></my-component> </div>
          <template id="hello-world-template"> <div>hello world!</div> </template>
          復制代碼
          <script> // 注冊 Vue.component('my-component', {
            template: '#hello-world-template' }) // 創建根實例 new Vue({
            el: '#example' }) </script>
          復制代碼

           

          命名約定

          對于組件的命名,W3C規范是字母小寫且包含一個中劃線(-),雖然Vue沒有強制要求,但最好遵循規范  

          <!-- 在HTML模版中始終使用 kebab-case --> <kebab-cased-component></kebab-cased-component> <camel-cased-component></camel-cased-component> <pascal-cased-component></pascal-cased-component>

          當注冊組件時,使用中劃線、小駝峰、大駝峰這三種任意一種都可以

          復制代碼
          // 在組件定義中
          components: {
            // 使用 中劃線 形式注冊
            'kebab-cased-component': { /* ... */ },
            // 使用 小駝峰 形式注冊
            'camelCasedComponent': { /* ... */ },
            // 使用 大駝峰 形式注冊
            'PascalCasedComponent': { /* ... */ }
          }
          復制代碼

           

          嵌套限制

          并不是所有的元素都可以嵌套模板,因為要受到HTML元素嵌套規則的限制,尤其像<ul><ol>,<table><select> 限制了能被它包裹的元素,而一些像 <option> 這樣的元素只能出現在某些其它元素內部

          [注意]關于HTML標簽的詳細嵌套規則移步至此

          在自定義組件中使用這些受限制的元素時會導致一些問題,例如

          <table id="example"> <my-row>...</my-row> </table>

          自定義組件 <my-row> 被認為是無效的內容,因此在渲染的時候會導致錯誤

          復制代碼
          <script> // 注冊 var header = {
            template: '<div class="hd">我是標題</div>' }; // 創建實例 new Vue({
            el: '#example',
              components: { 'my-row': header
            }  
          }) </script>
          復制代碼

          【is屬性】

             變通的方案是使用特殊的 is 屬性

          <table id="example"> <tr is="my-row"></tr> </table>
          復制代碼
          <script> // 注冊 var header = {
            template: '<div class="hd">我是標題</div>' }; // 創建實例 new Vue({
            el: '#example',
              components: { 'my-row': header
            }  
          }) </script>
          復制代碼

           

          根元素

          Vue強制要求每一個Vue實例(組件本質上就是一個Vue實例)需要有一個根元素

          如下所示,則會報錯

          <div id="example">
            <my-component></my-component>
          </div>
          復制代碼
          <script>
          // 注冊 Vue.component('my-component', {
            template: ` <p>第一段</p> <p>第二段</p>  `,
          })
          // 創建根實例
          new Vue({
            el: '#example' })
          </script>
          復制代碼

          需要改寫成如下所示

          復制代碼
          <script>
          // 注冊 Vue.component('my-component', {
            template: ` <div> <p>第一段</p> <p>第二段</p> </div>  `,
          })
          // 創建根實例
          new Vue({
            el: '#example' })
          </script>
          復制代碼

           

          data數據

          一般地,我們在Vue實例對象或Vue組件對象中,我們通過data來傳遞數據

          <div id="example"> <my-component></my-component> <my-component></my-component> <my-component></my-component> </div>
          復制代碼
          <script> // 注冊 Vue.component('my-component', {
            template: '<div>{{message}}</div>',
            data:{
                message: 'hello' }
          }) // 創建根實例 new Vue({
            el: '#example' }) </script>
          復制代碼

          運行上面的代碼,會使Vue停止執行,并在控制臺發出錯誤提示,告訴你在組件中 data 必須是一個函數

          可以用如下方式來繞開Vue的錯誤提示

          復制代碼
          <script> // 注冊 var data = {counter: 0}
          Vue.component('my-component', {
            template: '<button v-on:click="counter += 1">{{ counter }}</button>',
            data:function(){ return data;
            }
          }) // 創建根實例 new Vue({
            el: '#example' }) </script>
          復制代碼

          由于這三個組件共享了同一個 data,因此增加一個 counter 會影響所有組件

          當一個組件被定義, data 需要聲明為返回一個初始數據對象的函數,因為組件可能被用來創建多個實例。如果 data 仍然是一個純粹的對象,則所有的實例將共享引用同一個數據對象。通過提供 data 函數,每次創建一個新實例后,能夠調用 data 函數,從而返回初始數據的一個全新副本數據對象

          因此,可以通過為每個組件返回全新的 data 對象來解決這個問題: 

          復制代碼
          <script> // 注冊 Vue.component('my-component', {
            template: '<button v-on:click="counter += 1">{{ counter }}</button>',
            data:function(){ return {counter: 0};
            }
          }) // 創建根實例 new Vue({
            el: '#example' }) </script>
          復制代碼

          現在每個 counter 都有它自己內部的狀態了

           

          原生事件

          有時候,可能想在某個組件的根元素上監聽一個原生事件。直接使用v-bind指令是不生效的

          <div id="example"> <my-component @click="doTheThing"></my-component> <p>{{message}}</p> </div>
          復制代碼
          <script> Vue.component('my-component', {
            template: '<button>按鈕</button>',
          }) new Vue({
            el: '#example',
            data:{
              message:0 },
            methods:{
              doTheThing(){ this.message++;
              }
            }
          }) </script>
          復制代碼

          可以使用 .native 修飾 v-on指令即可

          <div id="example"> <my-component @click.native="doTheThing"></my-component> <p>{{message}}</p> </div>
          復制代碼
          <script> Vue.component('my-component', {
            template: '<button>按鈕</button>',
          }) new Vue({
            el: '#example',
            data:{
              message:0 },
            methods:{
              doTheThing(){ this.message++;
              }
            }
          }) </script>
          復制代碼



          藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼ben_lanlan,報下信息,會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

          文章來源:csdn

          分享此文一切功德,皆悉回向給文章原作者及眾讀者.
          免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務


          vue中引用圖片

          前端達人

          一、template中引用圖片

          1. 直接用

          <template>
              <img src="@/assets/images/img.png">
              <img src="../../../assets/images//img.png">
          <template/> 
          
          • 1
          • 2
          • 3
          • 4

          2. import引入

          <template>
              <img :src="imgUrl">
          <template/>
          <script>
              import imgUrl from '@/assets/images/img.png'
              export default {
                  data () {
                      return {
                          imgUrl: imgUrl
                      }
                  }
              }
          </script> 
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 13

          二、script中引用圖片

          同上 一、2import引入

          三、style中引用圖片

          1. 正常來講可以直接用
          .test1 {
              background-image: url(../../../../assets/images/img.png)
          }
          .test2 {
              background-image: url(@/assets/images/img.png);
          } 
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          1. 但是在scss方式中不可以直接用
          <style scoped lang="scss">
          $img: "../../assets/images/img.png";
          .test {
              background-image: url('#{$img}');
          }
          

          藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼ben_lanlan,報下信息,會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

          文章來源:csdn

          分享此文一切功德,皆悉回向給文章原作者及眾讀者. 免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務

          如何限制datatable列寬--(收縮內容)

          前端達人

          實現功能:dataTable某列內容過長的話,只顯示部分內容,鼠標點擊顯示全部,再點擊顯示部分。可以切換。

          效果圖:

          鼠標點擊:

          如果再次點擊,備注內容又收縮了。

          JS實現代碼如下:

          var remarkShowLength = 10;//默認現實的字符串長度

          datatable中的配置:

          首先在 columnDefs 中顯示文本的時候,如果超長,就只顯示部分。

          然后通過 createdRow ,如果備注信息超長的話,給該td元素添加上onclick時間,鼠標點擊的時候,可以進行切換。并且將全部的字符信息 data.remarks 放置到屬性中去,以便后面可以取出來。

          
          
          1. "createdRow": function( row, data, dataIndex ) {
          2. if(data.remarks.length > remarkShowLength){//只有超長,才有td點擊事件
          3. $(row).children('td').eq(7).attr('onclick','javascript:changeShowRemarks(this);');
          4. }
          5. $(row).children('td').eq(7).attr('content',data.remarks);
          6. },
          7. "ajax" : {
          8. "url" : "/cluster/list?importantLevel=" + $('#searchImportantLevelSelect').val()
          9. },
          10. "columnDefs" : [
          11. {
          12. "type": "date",
          13. "targets": 7,
          14. "render": function (data, type, full, meta) {
          15. if (full.remarks.length > remarkShowLength) {
           return getPartialRemarksHtml(full.remarks);//顯示部分信息
           } else {

           return full.remarks;//顯示原始全部信息 }

           }
          }
          ]

          下面從td的屬性中取出全部的remark,然后根據當前是顯示的全部還是顯示的部分信息,進行切換。

          
          
          1. //切換顯示備注信息,顯示部分或者全部
          2. function changeShowRemarks(obj){//obj是td
          3. var content = $(obj).attr("content");
          4. if(content != null && content != ''){
          5. if($(obj).attr("isDetail") == 'true'){//當前顯示的是詳細備注,切換到顯示部分
          6. //$(obj).removeAttr('isDetail');//remove也可以
          7. $(obj).attr('isDetail',false);
          8. $(obj).html(getPartialRemarksHtml(content));
          9. }else{//當前顯示的是部分備注信息,切換到顯示全部
          10. $(obj).attr('isDetail',true);
          11. $(obj).html(getTotalRemarksHtml(content));
          12. }
          13. }
          14. }

           

          
          
          1. //部分備注信息
          2. function getPartialRemarksHtml(remarks){
          3. return remarks.substr(0,remarkShowLength) + '&nbsp;&nbsp;<a href="javascript:void(0);" ><b>...</b></a>';
          4. }
          5. //全部備注信息
          6. function getTotalRemarksHtml(remarks){
          7. return remarks + '&nbsp;&nbsp;<a href="javascript:void(0);" >收起</a>';
          8. }

          原文鏈接:https://blog.csdn.net/zz_chst/article/details/79587936?utm_source=blogxgwz5

          藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼ben_lanlan,報下信息,會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

          文章來源:csdn

          分享此文一切功德,皆悉回向給文章原作者及眾讀者.
          免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服務

          table中td超出內容隱藏,鼠標懸停全部顯示(完整版,含js代碼)

          前端達人

          一、CSS語法:
          text-overflow:clip | ellipsis
          默認值:clip
          適用于:所有元素
          clip: 當對象內文本溢出時不顯示省略標記(...),而是將溢出的部分裁切掉。
          ellipsis: 當對象內文本溢出時顯示省略標記(...)。
          在使用的時候,有時候發現不會出現省略標記效果,經過測試發現,使用ellipsis的時候,必須配合overflow:hidden; white-space:nowrap; width:50%;這三個樣式共同使用才會有效果
           
          實例:
          復制代碼
          table { width: 100%; float: left; table-layout:fixed; width:500px; border:1px solid #ccc;
                  } table tr { line-height: 25px; border:1px solid #ccc;
                      } table td { border:1px solid #ccc; text-align:center;
                      } .MHover{ border:1px solid #ccc; white-space:nowrap; text-overflow:ellipsis; overflow:hidden;
                      }
          復制代碼
          二、HTML代碼
          復制代碼
          <table> <tr> <th>姓名</th> <th>個性簽名</th> <th>性別</th> </tr> <tr> <td>張國榮</td> <td> <div class="MHover">我就是我,是顏色不一樣的煙火!</div> <div class="MALL">我就是我,是顏色不一樣的煙火!</div> </td> <td></td> </tr> </table>
          復制代碼
          注:class="MHover"為表格里顯示的內容,內容長度超多指定寬度時隱藏多余字段,并在后面加...
          class="MALL"為鼠標懸停顯示的內容。
          三、js代碼
          復制代碼
          $(document).ready(function () {
                      $(".MALL").hide();
                      $(".MHover").mouseover(function (e) {
                          $(this).next(".MALL").css({"position":"absolute","top":e.pageY+5,"left":e.pageX+5}).show();
                      });
                      $(".MHover").mousemove(function (e) {
                          $(this).next(".MALL").css({ "color": "fff", "position": "absolute", "opacity": "0.7", "background-color": "666", "top": e.pageY + 5, "left": e.pageX + 5 });
                      });
                      $(".MHover").mouseout(function () {
                          $(this).next(".MALL").hide();
                      });
                  });
          復制代碼
          注:class="MHover"為表格里顯示的內容,內容長度超多指定寬度時隱藏多余字段,并在后面加...
          class="MALL"為鼠標懸停顯示的內容。


          藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼ben_lanlan,報下信息,會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

          文章來源:博客園

          分享此文一切功德,皆悉回向給文章原作者及眾讀者.
          免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務

           


          DataTables固定表格寬度(設置橫向滾動條)

          前端達人

          當表格的列比較多的時候,可能就需要固定表格的寬度了,默認的100%寬已經不適應了。默認的100%寬要實現改變窗口大小也100%的話,在table元素上添加width="100%",至于css的100%為什么不生效,原因未知。下面就說說設置如何給datatables設置固定的寬度。

          1.html代碼

          復制代碼
          <div id="tableArea"> <table id="userTable" class="display table table-bordered" cellspacing="0" > <thead> <tr> <th style="display: none">ck</th> <th>序號</th> <th>賬號</th> <th>姓名</th> <th>CPID</th> <th>CP名稱</th> <th>操作</th> </tr> </thead> </table> </div>
          復制代碼

           

          2.覆蓋某些樣式(我們的樣式優先級高,所以會覆蓋內置的樣式)

          復制代碼
          #tableArea .dataTables_wrapper { position: relative; clear: both; zoom: 1; overflow-x: auto;
          } #tableArea table{ width: 800px;
          }
          復制代碼

          這里的overflow-x:auto是新增的,表示表格內容超出寬度后,出現橫向滾動條;table的width必須寫死寬度,直接寫在table元素上不生效,原因未知。

           

          3.設置列寬(可略)

          "columns": [
              { "data": "number", "orderable": false ,"width":"100px","searchable": false}
          ]

           

          4.運行瀏覽,發現此時,當瀏覽器窗口小于800像素的時候,表格出現了橫向的滾動條,正是我們想要的結果。

           

          5.為什么不用"scrollX":true的配置實現橫向滾動條呢?查詢它渲染后的網頁發現,它把table拆分成了兩個表格,一個表示表頭,一個表示表體。這不是我想要的,而且它表頭的內容若是超出的話是隱藏的。

           

          6.還有兩個樣式,可以參考參考,可能對你有用。

          table td{

          word-break:break-all;

          }

          單詞也可以允許換行,這對于單元格的寬度有很好的控制,而不會讓單元格被內容撐開!

           

          table
          {
                  table-layout:fixed;
          }

          表格布局算法為固定(列寬由表格寬度和列寬度設定)。




          藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼ben_lanlan,報下信息,會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

          文章來源:博客園

          分享此文一切功德,皆悉回向給文章原作者及眾讀者.
          免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務

          日歷

          鏈接

          個人資料

          藍藍設計的小編 http://www.syprn.cn

          存檔

          亚洲va欧美va天堂v国产综合