移动端小功能杂记(三)

一. CSS有趣的样式

  1. 去掉html5 <input type="search">的默认删除btn

input::-webkit-search-cancel-button {
  display: none;
}

input[type=search]::-ms-clear {
  display: none;
}

  2. 去掉html5 <input type="number">的自动加减键

input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
  -webkit-appearance: none !important;
  margin: 0;
}

  3. 模仿boostrap的input-group样式

var html = '<div class="main-form">' +
      '<div class="item item-redeemdate input-group">' +
      '<span class="input-group-span no-border-right">赎回确认时间</span>' +
      '<input class="txt-input txt-redeemdate no-border-left text-right" type="text" placeholder="请选择赎回时间" readonly>' +
      '</div>' +
      '<div class="item item-info">' +
      '<div class="info market-tips"></div>' +
      '</div>' +
      '<div class="item item-tips">' +
      '<div class="err-msg err-msg-marketprice"></div>' +
      '</div>' +
      '<div class="item item-marketprice input-group">' +
      '<span class="input-group-span no-border-right">赎回单位净值</span>' +
      '<input class="txt-input txt-marketprice no-border-left text-right" type="number" placeholder="输入保留四位小数">' +
      '<span class="input-group-span no-border-left txt-select" style="display:none;">' +
      '<img src="../images/marketprice-list-down.png" style="vertical-align:middle;height:6px;">' +
      '</span>' +
      '</div>' +
      '<div class="marketprice-list"><ul></ul></div>' +
      '<div class="item item-info redeem-ex" style="height:30px;display:none">' +
      '<div class="info" style="line-height:30px;">' +
      '<span class="redeem-info word-oneline"></span>' +
      '<div class="btn-redeem-all"><span>全部赎回</span></div>' +
      '</div>' +
      '</div>' +
      '<div class="item item-tips">' +
      '<div class="err-msg err-msg-amount"></div>' +
      '</div>' +
      '<div class="item item-amount input-group">' +
      '<span class="input-group-span no-border-right get-redeem-type">' +
      '<span id="amount-span" style="padding-right:8px;">赎回份额</span>' +
      '<img class="rotate-pic" src="../images/switch_action3.png" style="vertical-align:middle;height:14px;">' +
      '</span>' +
      '<input class="txt-input txt-amount no-border-left-right text-right" type="number">' +
      '<span id="amount-span-per" class="input-group-span no-border-left text-unit" style="color:#4F4F4F;">万份</span>' +
      '</div></div>';
    return html
input {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  -ms-box-sizing: border-box;
  box-sizing: border-box;
}

a,
button,
input {
  outline: 0;
  text-decoration: none;
  -webkit-tap-highlight-color: transparent;
}

.input-group {
  display: table;
}

.input-group .input-group-span {
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  -ms-box-sizing: border-box;
  box-sizing: border-box;
  display: table-cell;
  padding: 6px 12px;
  text-align: left;
  color: #333333;
  background: #FFFFFF;
  border: 1px solid #dddddd;
  border-radius: 4px 0 0 4px;
  white-space: nowrap;
}

.input-group .no-border-right {
  border-right: none !important;
  border-radius: 4px 0 0 4px !important;
}

.input-group .no-border-left {
  border-left: none !important;
  border-radius: 0 4px 4px 0 !important;
}

.input-group .no-border-left-right {
  border-left: none !important;
  border-right: none !important;
  border-radius: 0 !important;
}

.text-unit {
  padding-left: 0px !important;
}

.main-form {
  padding: 0 16px;
}

.main-form .item .err-msg {
  padding-left: 2px;
  font-size: 13px;
  color: #f25454;
}

.main-form .item .info {
  padding: 0 3px;
  font-size: 12px;
  color: #b5b5b5;
}

.main-form .item {
  margin-bottom: 10px;
  position: relative;
  width: 100%;
}

.main-form .item .txt-input {
  font-family: Microsoft YaHei, Arail, sans-serif;
  padding: 0 15px;
  width: 100%;
  height: 40px;
  line-height: normal;
  border: 1px solid #dddddd;
  border-radius: 4px;
  background: #FFFFFF;
  font-size: 14px;
  color: #4F4F4F;
}

.main-form .item-btns-loading {
  display: none;
}

.main-form .item-btns .btn-save {
  display: inline-block;
  width: 100%;
  height: 43px;
  border-radius: 4px;
  background: #8e6cd1;
  text-decoration: none;
  line-height: 43px;
  text-align: center;
  font-size: 17px;
  color: #FFFFFF;
}

.main-form .item-btns .btn-loading {
  display: inline-block;
  width: 100%;
  height: 43px;
  border-radius: 4px;
  background: #ffffff;
  border: 1px solid #8e6cd1;
  text-decoration: none;
  line-height: 43px;
  text-align: center;
  font-size: 17px;
  color: #333333;
}

.main-form .item-btns .btn-loading span {
  margin-right: 8px;
}

.main-form .item-btns .btn-disabled {
  background: #e2e2e2;
  cursor: default;
  color: #bdbdbd;
}

  4. 文字不换行并且多余部分...样式

.word-oneline {
  overflow: hidden;
  word-break: break-all;
  white-space: nowrap;
  word-wrap: normal;
  text-overflow: ellipsis;
}

 

二. 移动端highstock报表的蛛网图,曲线图等

var ChartTool = {
  getAnalysisItem: function(items, keys, dict) {
    label: for (var i in items) {
      var item = items[i];
      if (item && item.length > 0 && keys.length == 0) {
        return item[item.length - 1];
      }
      if (item && item.length > keys.length) {
        for (var j in keys) {
          var key = keys[j];
          if (dict[key] != item[j]) {
            continue label;
          }
        }
        return item[item.length - 1];
      }
    }
    return false;
  },
  getAnalysisTableFontColor: function(value, symbol) {
    if (!value) {
      return 'font-color-grey'
    }
    if ($.type(value) === 'string') {
      var replaceSymbol = symbol ? symbol : '%';
      var number = $.trim(value.replace(replaceSymbol, ''));
    } else {
      var number = value;
    }
    if (isNaN(number) || number == 0) {
      return 'font-color-grey'
    }
    return number > 0 ? 'font-color-orange' : 'font-color-green';
  },
  handleTimeLineChartData: function(keys, chart, opts) {
    var timeLineKey = opts ? (opts.timeLineKey ? opts.timeLineKey : 'dates') : 'dates';
    if (!chart || !chart[timeLineKey] || chart[timeLineKey].length == 0) {
      return false;
    }
    var chartData = {};
    for (var i in keys) {
      var key = keys[i];
      if (!chart[key]) {
        return false;
      }
      chartData[key] = [];
      for (var j in chart[timeLineKey]) {
        try {
          var chartInitDate = chart[timeLineKey][j];
          var chartInitvalue = chart[key][j];
        } catch (e) {
          return false;
        }
        if (chartInitvalue === null) {
          continue
        }
        if (opts && opts.handleDate && $.type(opts.handleDate) == 'function') {
          var chartDate = opts.handleDate(chartInitDate);
        } else {
          var chartDate = chartInitDate;
        }
        if (opts && opts.handleValue) {
          if ($.type(opts.handleValue) == 'function') {
            var chartValue = opts.handleValue(chartInitvalue);
          } else if ($.type(opts.handleValue) == 'object' && opts.handleValue[key]) {
            var chartValue = opts.handleValue[key](chartInitvalue);
          } else {
            var chartValue = chartInitvalue;
          }
        } else {
          var chartValue = chartInitvalue;
        }
        chartData[key].push([chartDate, chartValue]);
      }
    }
    return chartData;
  },
  handleCategoryChartData: function(keys, chartInit, opts) {
    var categoryKey = opts ? (opts.categoryKey ? opts.categoryKey : 'bins') : 'bins';
    if (!chartInit || !chartInit[categoryKey] || chartInit[categoryKey].length == 0) {
      return false;
    }
    var chartData = {};
    var chart = $.extend(true, {}, chartInit);
    if (opts && opts.removeDataKey && chart[opts.removeDataKey]) {
      var newData = chart[opts.removeDataKey];
      for (var i = newData.length - 1; i >= 0; i--) {
        if (newData[i] == null) {
          chart[categoryKey].splice(i, 1);
          for (var j in keys) {
            chart[keys[j]].splice(i, 1);
          }
        }
      }
    }
    if (opts && $.type(opts.handleCategories) == 'function') {
      chartData['categories'] = opts.handleCategories(chart[categoryKey]);
    } else {
      chartData['categories'] = chart[categoryKey];
    }
    for (var i in keys) {
      var key = keys[i];
      if (!chart[key]) {
        return false;
      }
      chartData[key] = [];
      for (var j in chart[key]) {
        var chartInitvalue = chart[key][j];
        if (chartInitvalue == null) {
          var chartValue = 0;
        } else {
          if (opts && opts.handleValue) {
            if ($.type(opts.handleValue) == 'function') {
              var chartValue = opts.handleValue(chartInitvalue);
            } else if ($.type(opts.handleValue) == 'object' && opts.handleValue[key]) {
              var chartValue = opts.handleValue[key](chartInitvalue);
            } else {
              var chartValue = chartInitvalue;
            }
          } else {
            var chartValue = chartInitvalue;
          }
        }
        chartData[key].push(chartValue);
      }
    }
    return chartData;
  },
  getSeriesData: function(chartId, chartInfo, chartData, opts) {
    var seriesData = [],
      hasChartType = false;
    if (!opts || opts.chartType === undefined) {
      var keys = chartInfo[chartId]['lineKeys'];
    } else {
      var keys = chartInfo[chartId][chartType]['lineKeys'];
      hasChartType = true;
    }
    for (var i in keys) {
      var key = keys[i];
      if (!chartData[key] || chartData[key].length == 0) {
        continue; }
      var seriesObj = {
        name: (hasChartType ? chartInfo[chartId][chartType]['seriesName'][key] : chartInfo[chartId]['seriesName'][key]),
        data: chartData[key],
      };
      if (opts && $.type(opts.addMoreSeries) == 'function') {
        opts.addMoreSeries(seriesObj, i, key);
      }
      seriesData.push(seriesObj);
    }
    if (opts && $.type(opts.handleSeriesData) == 'function') {
      return opts.handleSeriesData(seriesData);
    }
    return seriesData;
  },
  getBaseChart: function(chartId, seriesData, opts) {
    return {
      chart: {
        renderTo: opts ? (opts.chartRenderId ? opts.chartRenderId : chartId) : chartId,
        height: opts ? (opts.chartHeight ? (opts.chartHeight === 'auto' ? null : opts.chartHeight) : 250) : 250,
        spacingBottom: opts ? (opts.spacingBottom !== undefined ? opts.spacingBottom : 10) : 10,
        spacingTop: opts ? (opts.spacingTop !== undefined ? opts.spacingTop : 10) : 10,
        spacingLeft: 12,
        spacingRight: 12,
      },
      credits: {
        enabled: false,
      },
      rangeSelector: {
        enabled: false,
      },
      tooltip: {
        enabled: true,
        shared: true,
        style: {
          width: 180
        },
        formatter: function() {
          if (opts && opts.toolTipDateType == 'year') {
            var header = '<b>年份:' + Highcharts.dateFormat('%Y', this.x) + '</b>';
          } else if (opts && opts.toolTipDateType == 'date') {
            var header = '<b>时间:' + Highcharts.dateFormat('%Y-%m-%d', this.x) + '</b>';
          } else {
            var header = '<b>' + this.x + '</b>';
          }
          $.each(this.points, function(i, point) {
            header += '<br/><span style="color:' + this.point.series.color + '">' +
              this.point.series.name + ':' + (opts ? (opts.handleTooltipValue ? opts.handleTooltipValue(this.point.series.name, this.y) : this.y) : this.y) + '</span>';
          });
          return header;
        }
      },
      xAxis: {
        labels: {
          style: {
            font: '10px Microsoft YaHei, Arail, sans-serif'
          }
        }
      },
      yAxis: {
        labels: {
          y: 4,
          style: {
            font: '10px Microsoft YaHei, Arail, sans-serif'
          },
          formatter: function() {
            return (opts ? (opts.formatteryAxisLabel ? opts.formatteryAxisLabel(this.value) : this.value) : this.value);
          }
        }
      },
      legend: {
        enabled: true,
        borderWidth: 0,
        itemDistance: 10,
        margin: opts ? (opts.legendMargin !== undefined ? opts.legendMargin : 10) : 10,
        itemStyle: {
          font: opts ? (opts.legendFont ? opts.legendFont : '9pt Microsoft YaHei, Arail, sans-serif') : '9pt Microsoft YaHei, Arail, sans-serif',
          color: '#666666',
        },
        itemHoverStyle: {
          color: '#004789'
        }
      },
      plotOptions: {
        series: {
          lineWidth: 1
        }
      },
      series: seriesData
    }
  },
  getLastTime: function(seriesData) {
    if (seriesData.length == 0) {
      return false;
    }
    var lastTime = 0;
    for (var i in seriesData) {
      var seriesObjData = seriesData[i]['data'];
      var seriesObjDataMaxTime = seriesObjData[seriesObjData.length - 1][0];
      lastTime = seriesObjDataMaxTime >= lastTime ? seriesObjDataMaxTime : lastTime;
    }
    return lastTime;
  },
  renderTimeLineChart: function(chartId, chartInfo, chartData, opts) {
    var seriesData = this.getSeriesData(chartId, chartInfo, chartData, opts);
    var lastTime = opts ? (opts.plotLastLine ? this.getLastTime(seriesData) : false) : false;
    return $.extend(true, {}, this.getBaseChart(chartId, seriesData, opts), {
      colors: ['#e02000', '#f9c436', '#0074f4'],
      chart: {
        pinchType: ''
      },
      xAxis: {
        gridLineWidth: 1,
        lineColor: '#000',
        tickColor: '#000',
        gridLineDashStyle: 'longdash',
        labels: {
          formatter: function() {
            if (opts && opts.chartxAxisLabelsFormatterType == 'year') {
              return Highcharts.dateFormat('%Y', this.value);
            }
            return Highcharts.dateFormat('%Y-%m-%d', this.value);
          }
        },
        plotLines: lastTime ? [{ color: '#d8d8d8', width: 1, value: lastTime }] : []
      },
      yAxis: (opts ? (opts.customyAxis ? opts.customyAxis({
        opposite: false,
        showLastLabel: true,
        tickPixelInterval: 40,
        lineColor: '#000',
        tickColor: '#000',
        lineWidth: 1,
        tickWidth: 1,
        labels: { style: { font: '10px Microsoft YaHei, Arail, sans-serif' } }
      }, chartId) : {
        opposite: false,
        showLastLabel: true,
        tickPixelInterval: 40,
        lineColor: '#000',
        tickColor: '#000',
        lineWidth: 1,
        tickWidth: 1,
        labels: { style: { font: '10px Microsoft YaHei, Arail, sans-serif' } }
      }) : {
        opposite: false,
        showLastLabel: true,
        tickPixelInterval: 40,
        lineColor: '#000',
        tickColor: '#000',
        lineWidth: 1,
        tickWidth: 1,
        labels: { style: { font: '10px Microsoft YaHei, Arail, sans-serif' } }
      }),
      scrollbar: { enabled: false },
      navigator: {
        enabled: opts ? (opts.enabledNavigator !== undefined ? opts.enabledNavigator : true) : true,
        margin: opts ? (opts.navigatorMargin ? opts.navigatorMargin : 10) : 10,
        height: opts ? (opts.navigatorHeight ? opts.navigatorHeight : 25) : 25,
        baseSeries: 0,
        xAxis: {
          labels: {
            enabled: false
          }
        }
      },
      plotOptions: {
        line: {
          cursor: 'pointer',
          shadow: false,
          states: {
            hover: {
              lineWidth: 1
            }
          }
        }
      }
    })
  },
  renderPolarChart: function(chartId, chartInfo, chartData, opts) {
    var categories = chartData['categories'];
    var seriesData = this.getSeriesData(chartId, chartInfo, chartData, opts);
    return $.extend(true, {}, this.getBaseChart(chartId, seriesData, opts), {
      colors: ['#0074f4', '#434348'],
      chart: {
        polar: true,
        type: 'line'
      },
      title: {
        text: null
      },
      pane: {
        size: '80%'
      },
      xAxis: {
        categories: categories,
        tickmarkPlacement: 'on',
        lineWidth: 0,
        labels: {
          style: {
            font: '11px Microsoft YaHei, Arail, sans-serif'
          }
        }
      },
      yAxis: {
        gridLineInterpolation: 'polygon',
        startOnTick: false,
        lineWidth: 0,
        tickPositions: opts ? (opts.chartyAxisTickPositions ? opts.chartyAxisTickPositions : null) : null,
        min: opts ? (opts.chartyAxisMin ? opts.chartyAxisMin : 0) : 0,
        max: opts ? (opts.chartyAxisMax ? opts.chartyAxisMax : 5) : 5,
        labels: {
          style: {
            font: '11px Microsoft YaHei, Arail, sans-serif'
          }
        }
      },
      legend: {
        enabled: seriesData.length > 1 ? true : false
      },
      plotOptions: {
        line: {
          marker: {
            enabled: false
          },
          states: {
            hover: {
              lineWidth: 1
            }
          }
        }
      }
    })
  },
  renderColumnChart: function(chartId, chartInfo, chartData, opts) {
    var categories = chartData['categories'];
    var seriesData = this.getSeriesData(chartId, chartInfo, chartData, opts);
    if (!opts || opts.chartType === undefined) {
      var yAxisTitle = chartInfo[chartId]['yAxisTitle'];
    } else {
      var yAxisTitle = chartInfo[chartId][opts.chartType]['yAxisTitle'];
    }
    return $.extend(true, {}, this.getBaseChart(chartId, seriesData, opts), {
      colors: ['#0074f4', '#434348'],
      chart: {
        type: 'column'
      },
      title: {
        text: null
      },
      xAxis: {
        tickInterval: categories.length > (opts ? (opts.maxxAxisLabels ? opts.maxxAxisLabels : 5) : 5) ? Math.ceil(categories.length / (opts ? (opts.maxxAxisLabels ? opts.maxxAxisLabels : 5) : 5)) : 1,
        categories: categories,
      },
      yAxis: {
        labels: {
          x: -3
        },
        min: opts ? (opts.minyAxis ? opts.minyAxis : 0) : 0,
        title: {
          text: yAxisTitle
        }
      },
      plotOptions: {
        column: {
          pointPadding: 0.2,
          borderWidth: 0
        }
      }
    })
  },
  renderColumnRangeChart: function(chartId, chartInfo, chartData, opts) {
    var categories = chartData['categories'];
    var seriesData = this.getSeriesData(chartId, chartInfo, chartData, opts);
    if (!opts || opts.chartType === undefined) {
      var yAxisTitle = chartInfo[chartId]['yAxisTitle'];
    } else {
      var yAxisTitle = chartInfo[chartId][opts.chartType]['yAxisTitle'];
    }
    return $.extend(true, {}, this.getBaseChart(chartId, seriesData, opts), {
      colors: ['#0074f4', '#434348'],
      chart: {
        type: 'columnrange'
      },
      title: {
        text: null
      },
      xAxis: {
        tickInterval: categories.length > (opts ? (opts.maxxAxisLabels ? opts.maxxAxisLabels : 5) : 5) ? Math.ceil(categories.length / (opts ? (opts.maxxAxisLabels ? opts.maxxAxisLabels : 5) : 5)) : 1,
        categories: categories,
      },
      yAxis: {
        min: opts ? (opts.minyAxis ? opts.minyAxis : 0) : 0,
        title: {
          text: yAxisTitle
        },
        labels: {
          x: -3,
          y: opts ? (opts.chartyAxisY ? opts.chartyAxisY : 4) : 4,
        },
        showLastLabel: opts ? (opts.chartyAxisShowLastLabel ? opts.chartyAxisShowLastLabel : false) : false,
        tickPositions: opts ? (opts.chartyAxisTickPositions ? opts.chartyAxisTickPositions : null) : null,
        reversed: opts ? (opts.chartyAxisReversed ? opts.chartyAxisReversed : false) : false,
      },
      tooltip: ((opts && $.type(opts.customTooltip) == 'function') ? {
        formatter: function() {
          return opts.customTooltip(this);
        }
      } : {}),
      plotOptions: {
        column: {
          pointPadding: 0.2,
          borderWidth: 0
        }
      }
    })
  }
};

 

posted @ 2016-03-10 16:09  小骚木  阅读(243)  评论(0编辑  收藏  举报