javascript - 用线条连接图像

标签 javascript jquery html css image

我试着用线条测验匹配两对。我左边有几张图片,右边有几张图片,当你点击这对图片时,我需要用线连接它。它应该适用于任何组合,因此如果我单击左侧的图像 1 和右侧的图像 3,它们应该与线连接。然后,如果我再次单击右侧的图像 1 和左侧的图像 2,则应删除上一行,并且需要在这两张图像之间制作新的一行。 HTML 片段:

function lineDistance(x, y, x0, y0){
    return Math.sqrt((x -= x0) * x + (y -= y0) * y);
};

function drawLine(a, b, line) {
  var pointA = $(a ).offset();
  var pointB = $(b).offset();
  var pointAcenterX = $(a).width() / 2;
  var pointAcenterY = $(a).height() / 2;
  var pointBcenterX = $(b).width() / 2;
  var pointBcenterY = $(b).height() / 2;
  var angle = Math.atan2(pointB.top - pointA.top, pointB.left - pointA.left) * 180 / Math.PI;
  var distance = lineDistance(pointA.left, pointA.top, pointB.left, pointB.top);

 // Set Angle
  $(line).css('transform', 'rotate(' + angle + 'deg)');


  // Set Width
  $(line).css('width', distance + 'px');
                  
  // Set Position
  $(line).css('position', 'absolute');
  if(pointB.left < pointA.left) {
    $(line).offset({top: pointA.top + pointAcenterY, left: pointB.left + pointBcenterX});
  } else {
    $(line).offset({top: pointA.top + pointAcenterY, left: pointA.left + pointAcenterX});
  }
}
new drawLine('.a', '.b', '.line');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="question">
  <div id="old" class="left_side one_half svg left">
    <a href="#" data-number="1"><img class="a" src="assets/svg/Kerze.svg"></a>
    <a href="#" data-number="2"><img src="assets/svg/Telefon.svg"></a>
    <a href="#" data-number="3"><img src="assets/svg/Schreibmaschine.svg"></a>
    <a href="#" data-number="4"><img src="assets/svg/TV_old.svg"></a>
    <a href="#" data-number="5"><img src="assets/svg/Zeitstopper.svg"></a>
    <a href="#" data-number="6"><img src="assets/svg/Besen.svg"></a>
    <a href="#" data-number="7"><img src="assets/svg/Waschen.svg"></a>
  </div>
  <div class="left_side one_half svg right">
    <a href="#" data-letter="NS"><img src="assets/svg/Iwatch.svg"></a>
    <a href="#" data-letter="RT"><img src="assets/svg/Laptop.svg"></a>
    <a href="#" data-letter="TE"><img src="assets/svg/Staubsauger.svg"></a>
    <a href="#" data-letter="IN"><img src="assets/svg/Waschmaschine.svg"></a>
    <a href="#" data-letter="EI"><img src="assets/svg/TV_new.svg"></a>
    <a href="#" data-letter="AL"><img src="assets/svg/Gluehbirne.svg"></a>
    <a href="#" data-letter="BE"><img class="b" src="assets/svg/Iphone.svg"></a>
    <div class="line"></div>  
  </div>
</div>

我设法在两个图像(从 a 类到 b 类)之间画一条线,并且它总是被计算为完全成直 Angular ,但我无法让它看起来像我上面描述的那样工作。有任何想法吗?谢谢。

最佳答案

var setLeft = false, setRight = false;
$('.leftSide img').click(function(){
    $('.leftSide img').removeClass('a');
    $(this).addClass('a');
  setLeft = true;
  new drawLine('.a', '.b', '.line');
});
$('.rightSide img').click(function(){
    $('.rightSide img').removeClass('b');
    $(this).addClass('b');
  setRight = true;
  new drawLine('.a', '.b', '.line');
});

您可以使用标志变量,当从右侧单击图像时,将右侧的标志变量设置为 true,并对另一个执行相同的操作。

然后在函数 drawLine 中检查两个标志是否为真然后在 ab 之间画线并设置两个标志变量为 false

function lineDistance(x, y, x0, y0){
    return Math.sqrt((x -= x0) * x + (y -= y0) * y);
};

function drawLine(a, b, line) {

	if(setLeft && setRight){
  	setLeft = false;
    setRight = false;
    var pointA = $(a).offset();
    var pointB = $(b).offset();
    console.log(pointA);
    console.log(pointB);
    var pointAcenterX = $(a).width() / 2;
    var pointAcenterY = $(a).height() / 2;
    var pointBcenterX = $(b).width() / 2;
    var pointBcenterY = $(b).height() / 2;
    var angle = Math.atan2(pointB.top - pointA.top, pointB.left - pointA.left) * 180 / Math.PI;
    var distance = lineDistance(pointA.left, pointA.top, pointB.left, pointB.top);

   // Set Angle
    $(line).css('transform', 'rotate(' + angle + 'deg)');


    // Set Width
    $(line).css('width', distance + 'px');

    // Set Position
    $(line).css('position', 'absolute');
    if(pointB.left < pointA.left) {
      $(line).offset({top: pointA.top + pointAcenterY, left: pointB.left + pointBcenterX});
    } else {
      $(line).offset({top: pointA.top + pointAcenterY, left: pointA.left + pointAcenterX});
    }
  }
}
//new drawLine('.a', '.b', '.line');
var setLeft = false, setRight = false;
$('.leftSide img').click(function(){
	$('.leftSide img').removeClass('a');
	$(this).addClass('a');
  setLeft = true;
  new drawLine('.a', '.b', '.line');
});
$('.rightSide img').click(function(){
	$('.rightSide img').removeClass('b');
	$(this).addClass('b');
  setRight = true;
  new drawLine('.a', '.b', '.line');
});
.left{
  float:left;
}
.right{
  float:right;
}
.one_half{
  width:40%;
}
img{
  max-width:100%;
}
.line{
  background: red;
  height:1px;
}
.question{
  position: relative;
  overflow: hidden;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="question">
  <div id="old" class="left_side one_half svg left leftSide">
    <a href="#" data-number="1"><img src="https://www.w3schools.com/css/trolltunga.jpg"></a>
    <a href="#" data-number="2"><img src="https://www.w3schools.com/css/trolltunga.jpg"></a>
    <a href="#" data-number="3"><img src="https://www.w3schools.com/css/trolltunga.jpg"></a>
    <a href="#" data-number="4"><img src="https://www.w3schools.com/css/trolltunga.jpg"></a>
    <a href="#" data-number="5"><img src="https://www.w3schools.com/css/trolltunga.jpg"></a>
    <a href="#" data-number="6"><img src="https://www.w3schools.com/css/trolltunga.jpg"></a>
    <a href="#" data-number="7"><img src="https://www.w3schools.com/css/trolltunga.jpg"></a>
  </div>
  <div class="left_side one_half svg right rightSide">
    <a href="#" data-letter="NS"><img src="https://www.w3schools.com/css/trolltunga.jpg"></a>
    <a href="#" data-letter="RT"><img src="https://www.w3schools.com/css/trolltunga.jpg"></a>
    <a href="#" data-letter="TE"><img src="https://www.w3schools.com/css/trolltunga.jpg"></a>
    <a href="#" data-letter="IN"><img src="https://www.w3schools.com/css/trolltunga.jpg"></a>
    <a href="#" data-letter="EI"><img src="https://www.w3schools.com/css/trolltunga.jpg"></a>
    <a href="#" data-letter="AL"><img src="https://www.w3schools.com/css/trolltunga.jpg"></a>
    <a href="#" data-letter="BE"><img src="https://www.w3schools.com/css/trolltunga.jpg"></a>
    <div class="line"></div>  
  </div>
</div>

关于javascript - 用线条连接图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45367217/

相关文章:

jquery - Dynatree .sortChildren

javascript - 如何显示带有动态创建的名称首字母的头像图标

html - 我们可以根据div宽度添加媒体吗?

javascript - 将内容隐藏在预加载屏幕后面

javascript - 脚本引用名称错误

php - 将单击按钮的值从一个页面传递到另一个页面输入字段

javascript - Odoo机会新消息取消选中收件人

javascript - Materialize.css 自动完成不适用于 Polymer

javascript - 如何简化 Javascript "show/hide on DIV"函数的代码?

JavaScript - AngularJS 范围问题 : Object in the Global Scope Undefined in Function