let num = 20 let dataset = [] let w = 500 let h = 200 let padding = 30 //随机生成初始值 for (let i = 0; i < num; i++) { let tevalue = Math.random() * 1000 let temp = { id: i, value: tevalue } dataset.push(temp) } var key = function (d) { return d.id; };
//x轴就是每个点等宽 let xScale = d3.scaleBand() .domain(d3.range(num)) .range([padding, w - padding]) .paddingInner(0.05)
//y将实际值转化到整个画布上 let yScale = d3.scaleLinear() .domain([0, d3.max(dataset, d => d.value)]) .rangeRound([h - padding, padding])
let svg = d3.select('body') .append('svg') .attr('width', w) .attr('height', h);
let polyLine = svg.append("path") //在path后面创建遮蔽用的与背景同色的白色矩形 let rect = svg.append('rect') .attr("class", "shield_rect") .attr("x", padding) .attr("y", 0) .attr("width", w - padding * 2) .attr("height", h - padding) .style("fill", "white")
let line = d3.line() .x((d, i) => { return (xScale(i) + xScale.bandwidth() / 2) }) .y(d => yScale(d.value) - 1);
//clip-path 实现折现绘制动画 let num = 20 let dataset = [] let w = 500 let h = 200 let padding = 30
//随机生成初始值 for (let i = 0; i < num; i++) { let tevalue = Math.random() * 1000 let temp = { id: i, value: tevalue } dataset.push(temp) } var key = function (d) { return d.id; };
//x轴就是每个点等宽 let xScale = d3.scaleBand() .domain(d3.range(num)) .range([padding, w - padding]) .paddingInner(0.05)
//y将实际值转化到整个画布上 let yScale = d3.scaleLinear() .domain([0, d3.max(dataset, d => d.value)]) .rangeRound([h - padding, padding])
let svg = d3.select('body') .append('svg') .attr('width', w) .attr('height', h);
//操作dom创建clipPath svg.append("clipPath") .attr("id", "myClip") .append("rect") .attr("x", padding) .attr("y", 0) .attr("width", w - padding * 2) .attr("height", h - padding)
let line = d3.line() .x((d, i) => { return (xScale(i) + xScale.bandwidth() / 2) }) .y(d => yScale(d.value) - 1);
let num = 20 let dataset = [] let w = 500 let h = 200 let padding = 30 //随机生成初始值 for (let i = 0; i < num; i++) { let tevalue = Math.random() * 1000 let temp = { id: i, value: tevalue } dataset.push(temp) } var key = function (d) { return d.id; };
//x轴就是每个点等宽 let xScale = d3.scaleBand() .domain(d3.range(num)) .range([padding, w - padding]) .paddingInner(0.05)
//y将实际值转化到整个画布上 let yScale = d3.scaleLinear() .domain([0, d3.max(dataset, d => d.value)]) .rangeRound([h - padding, padding])
let svg = d3.select('body') .append('svg') .attr('width', w) .attr('height', h);
let line = d3.line() .x((d, i) => { return (xScale(i) + xScale.bandwidth() / 2) }) .y(d => yScale(d.value) - 1); //先设置dasharray的样式为露出部分全为虚线,实线部分隐藏到屏幕左边 //接着设置 dashoffset移过去 let polyLine = svg.append("path") .datum(dataset) .attr("class", "Polyline") .attr("stroke", "red") .attr("fill", "none") .attr("d", line) .attr("stroke-dasharray", function () { let totalLength = d3.select(this).node().getTotalLength();//返回路径的总长度 return totalLength;