Как получить координаты мыши при масштабировании с помощью d3.js [duplicate]

Если вы хотите сделать это целиком из кода:

import UIKit

struct MatchInfo {
    var teamA: String
    var teamB: String
}

class ViewController: UIViewController, UITableViewDataSource {
    @IBOutlet weak var tableView: UITableView!

    var matches = [MatchInfo]()

    override func viewDidLoad() {
        super.viewDidLoad()
        self.tableView.dataSource = self

        // Add some data
        matches.append(MatchInfo(teamA: "Panthers", teamB: "Broncos"))
        matches.append(MatchInfo(teamA: "Bucaneers", teamB: "Falcons"))
        matches.append(MatchInfo(teamA: "Vikings", teamB: "Titans"))
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }


    // MARK: -
    // MARK: Table View Data Source Delegate
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return matches.count
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("myCell") ?? makeCell()

        let textFieldA = cell.viewWithTag(1) as! UITextField
        let textFieldB = cell.viewWithTag(2) as! UITextField

        let row = indexPath.row
        textFieldA.text = matches[row].teamA
        textFieldB.text = matches[row].teamB

        return cell
    }

    func makeCell() -> UITableViewCell {
        let textFieldA = UITextField(frame: CGRectZero)
        let textfieldB = UITextField(frame: CGRectZero)

        textFieldA.tag = 1
        textfieldB.tag = 2
        [textFieldA, textfieldB].forEach {
            $0.translatesAutoresizingMaskIntoConstraints = false
            $0.borderStyle = .RoundedRect
        }

        let vsLabel = UILabel(frame: CGRectZero)
        vsLabel.text = "vs."
        vsLabel.translatesAutoresizingMaskIntoConstraints = false

        let cell = UITableViewCell(style: .Default, reuseIdentifier: "myCell")
        [textFieldA, textfieldB, vsLabel].forEach { cell.contentView.addSubview($0) }

        // Layout the elements
        let views = ["A": textFieldA, "B": textfieldB, "vs": vsLabel]
        let c1 = NSLayoutConstraint.constraintsWithVisualFormat("H:[A]-8-[vs]-8-[B]", options: .AlignAllBaseline, metrics: nil, views: views)
        let c2 = NSLayoutConstraint(item: textFieldA, attribute: .Left, relatedBy: .Equal, toItem: cell.layoutMarginsGuide, attribute: .Left, multiplier: 1, constant: 0)
        let c3 = NSLayoutConstraint(item: textfieldB, attribute: .Right, relatedBy: .Equal, toItem: cell, attribute: .Right, multiplier: 1, constant: 0)
        let c4 = NSLayoutConstraint(item: textFieldA, attribute: .CenterY, relatedBy: .Equal, toItem: cell.contentView, attribute: .CenterY, multiplier: 1, constant: 0)
        let c5 = NSLayoutConstraint(item: textFieldA, attribute: .Width, relatedBy: .Equal, toItem: textfieldB, attribute: .Width, multiplier: 1, constant: 0)

        NSLayoutConstraint.activateConstraints(c1 + [c2, c3, c4, c5])

        return cell
    }
}

Результат:

38
задан Cleb 18 February 2016 в 23:24
поделиться

4 ответа

Вы должны использовать массив. Это сохранит x и y как:

var coordinates = [0, 0];
coordinates = d3.mouse(this);
var x = coordinates[0];
var y = coordinates[1];

// D3 v4
var x = d3.event.pageX - document.getElementById(<id-of-your-svg>).getBoundingClientRect().x + 10
var y = d3.event.pageY - document.getElementById(<id-of-your-svg>).getBoundingClientRect().y + 10
65
ответ дан SumNeuron 20 August 2018 в 08:42
поделиться

V3:

var svg = d3.select('body').append('svg')
    .attr('width', width)
    .attr('height', height)
    .on('mousemove', function() {
      console.log( d3.mouse(this) ) // log the mouse x,y position
    });

V4:

var svg = d3.select('body').append('svg')
    .attr('width', width)
    .attr('height', height)
    .on('mousemove', function() {
      console.log( d3.event.clientX, d3.event.clientY ) // log the mouse x,y position
    });
4
ответ дан duhaime 20 August 2018 в 08:42
поделиться

Я подозреваю, что вы можете попробовать что-то вроде:

var x = 0;

svg.on('mousemove', function () {
   x = d3.mouse(this)[0];         
});

console.log(x);

Если у вас нет супер быстрых рук, это всегда будет писать «0» на консоль, потому что весь скрипт выполняется, пока вы достигаете мышь. Попробуйте поместить свой фрагмент непосредственно в консоль, передвиньте мышь и введите «x» в консоль. Вы должны увидеть последнее значение x.

Надеюсь, это поможет, но я, возможно, неправильно понял этот вопрос.

0
ответ дан Eric 20 August 2018 в 08:42
поделиться

Вы очень хорошо понимаете функцию щелчка и перетаскивания в этом примере. Надеюсь, что это поможет.

 var point = d3.mouse(this)
  , p = {x: point[0], y: point[1] };

http://jsfiddle.net/mdml/da37B/

13
ответ дан user3603902 20 August 2018 в 08:42
поделиться
  • 1
    Синтаксическая ошибка в скрипте. Последний firefox, скрипка даже не начинается. – peterh 21 March 2017 в 17:57
Другие вопросы по тегам:

Похожие вопросы: