Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
  <div id="el1"></div>
  <div id="el2"></div>
</body>
</html>
 
function horizontalCurvePath (w, h, opts = {}) {
  
  let { fromBottom, vertical, offset } = Object.assign({
    
    fromBottom: false,
    vertical: false,
    offset: 0
    
  }, opts)
  
  let x1, y1, x2, y2
  
  if (fromBottom) {
    
    [x1, y1, x2, y2] = [0, h, w, 0]
    
    if (!vertical) {
      y1 -= offset
      y2 += offset
    }
    
  } else {
    
    [x1, y1, x2, y2] = [0, 0, w, h]
    
    if (!vertical) {
      y1 += offset
      y2 -= offset
    }
    
  }
  
  if (vertical) {
    x1 += offset
    x2 -= offset
  }
  
  let line = []
  let mx = x1 + (x2 - x1) / 2
  line.push('M', x1, y1)
  
  if (vertical) {
    let my = y1 + (y2 - y1) / 2
    line.push('C', x1, my, x2, my, x2, y2)
  } else {
    line.push('C', mx, y1, mx, y2, x2, y2)
  }
  
  return line.join(' ')
  
}
function generate
(function () {
  
  let strokeWidth = 10
  let [w, h] = [400, 100]
  
  let curve = horizontalCurve(w, h, {
    offset: strokeWidth / 2,
    fromBottom: false,
    vertical: false
  })
  
  let fragment = document.createElement('div')
  fragment.innerHTML = `
    <svg width="${w}px" height="${h}px" viewBox="0 0 ${w} ${h}">
      <g>
        <path d="${curve}" stroke-width="${strokeWidth}" stroke="#000" fill="none"></path>
      </g>
    </svg>
  `
  
  let svg = fragment.children[0]
  
  document.body.appendChild(svg)
  
})()
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
christophemaroispro
0viewers