在图像上创建具有用户输入大小的网格

时间:2016-07-06 21:11:20

标签: javascript jquery html css

我想在用户输入行号和列号后在图像上添加网格线。但我对html JS CSS来说太新了。

例如:

<img src="web-image/preview.jpg">
<input type="number" name="row">
<input type="number" name="column">

如果用户输入row = 2和column = 3。 中间将有一条水平线,横跨三分之一的两条线和三分之一的#34; preview.jpg&#34;。网格只需要绘图,我不需要划分图像分成部分或使它们可点击。

3 个答案:

答案 0 :(得分:2)

您可以从Jquery .on()开始并使用append(),查看此快速代码:

&#13;
&#13;
$('button').on('click', function() {
  $('.grid table').html('');
  var rows = $('input[name="row"]').val(),
    cols = $('input[name="column"]').val();
  for (i = 0; i < rows; i++) {
    $('.grid table').append('<tr></tr>')
  }
  for (t = 0; t < cols; t++) {
    $('.grid table tr').each(function() {
      $(this).append('<td></td>')
    })
  }
})
&#13;
.grid {
  position: relative;
  display: inline-block;
  height:300px;
}
.grid table {
  border-collapse: collapse;
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
}
.grid table td {
  border:1px solid red;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="grid">
  <table></table>
  <img src="http://lorempixel.com/300/300">
</div>
<br>
<input type="number" name="row">
<input type="number" name="column">
<button>Create Grid</button>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

在您的JS中,您可以使用模糊或键盘来检测用户何时完成该字段。我不确定你在网格线方面究竟需要什么,但这只是增加了水平条纹。你可以用你需要的任何东西替换


$('input[name="row"]').blur(function(){
   if($(this).val() == 2){
     //add your bars
     $('body').append('<hr><hr>');
   }
});

答案 2 :(得分:0)

我确信有更好的方法可以做到这一点,但这应该很容易理解。这很有趣!

// Reference used elements
var wrapper = document.getElementById('wrapper');
var btn = document.getElementById('update');
var rows = document.getElementById('rows');
var cols = document.getElementById('cols');

btn.addEventListener("click", drawLines);

function drawLines() {
  // Clean up
  removeLines();

  var rowCount = rows.value;
  var colCount = cols.value;
  var wrapperHeight = wrapper.clientHeight;

  // Create rows
  for (var i = 1; i < rowCount; i++) {
    var line = document.createElement('div');
    line.className = 'line row';
    line.style.top = (wrapperHeight / rowCount) * i + 'px';

    wrapper.appendChild(line);
  }

  // Create columns
  for (var i = 1; i < colCount; i++) {
    var line = document.createElement('div');
    line.className = 'line column';
    line.style.left = (wrapperHeight / colCount) * i + 'px';

    wrapper.appendChild(line);
  }
}

function removeLines() {
  var lines = document.getElementsByClassName('line');
  while (lines.length > 0) {
    lines[0].parentNode.removeChild(lines[0]);
  }
}
#wrapper {
  width: 300px;
  height: 300px;
  position: relative;
}
.line {
  background: white;
  position: absolute;
}
.row {
  height: 1px;
  left: 0;
  right: 0;
}
.column {
  width: 1px;
  top: 0;
  bottom: 0;
}
<div id="wrapper">
  <img id="img" src="http://placehold.it/300x300">
</div>

<input id="rows" type="number" name="row" placeholder="Rows">
<input id="cols" type="number" name="column" placeholder="Columns">
<button id="update">Update</button>