Raphael.js attr 函数设置了错误的值

2023-12-11

我正在使用 Raphael.js 实现拖放系统。为此,我存储了 mousedown 上的原始 x 和 y 位置,如果 mouseup 上发生碰撞,我想将位置重置为原始位置。这是执行重置的代码(“this”指的是此处的 raphael 对象):

    var transformString = "t" + this.original_x + "," + this.original_y;
    this.attr("transform", transformString);

奇怪的是,设置属性后,变换字符串改变了几个像素。我用以下方法调试了这个:

    var transformString = "t" + this.original_x + "," + this.original_y;
    this.attr("transform", transformString);
    console.log("transformString: " + transformString);
    console.log("transformAttrib: " + this.attr("transform"));

AFAIK,在任何情况下,两个记录的值都应该相等。但有时它们会偏离 20 像素之多。有谁知道这是怎么回事?

E:这是一个简化版本,没有碰撞测试,仍然重现了该错误:http://jsfiddle.net/6ozsfdaf


我不知道为什么会发生这种情况。我之前甚至尝试过捕获坐标onstart using onmousedown事件,即使这样也不起作用。 Raphael 还提供了不同的方法来获取坐标getBBox(),访问x and y直接,没有帮助。

所以我的想法是,我们应该维护和跟踪坐标手动。所以我用过你的original_x and original_y捕获位置的变量<path>创建并设置一些变换值后。下面是相同的代码

这是工作中的fiddle.

this.raph = R.path(svgPath).attr({
    stroke: "hsb(0, 1, 1)",
    fill: "#fff", 
    opacity: 1.0, 
    cx: 100, 
    cy: 900 
}).transform("t" + x + "," + y); 

this.raph.original_x = x;
this.raph.original_y = y;


//comment the lines in start method which captures original_x and original_y
//this.original_x = Raphael.parseTransformString(this.attr("transform"))[0][1];
//this.original_y = Raphael.parseTransformString(this.attr("transform"))[0][2];

有关跟踪坐标的更多信息:

我们还会有一个坐标说updated_x and updated_y,将在move方法。 onFinish/onUp 方法,我们可以检查是否应该更新新位置。在这里,它只是询问是否应该更新新位置,并根据我们的输入设置最终结果。

检查这个fiddle:

this.start = function() {
    if (this.reference.static) return;
    //this.original_x = Raphael.parseTransformString(this.attr("transform"))[0][1];
    //this.original_y = Raphael.parseTransformString(this.attr("transform"))[0][2];
    this.animate({r: 70, opacity: 0.25}, 500, ">");
    this.updated_x = this.original_x;
    this.updated_y = this.original_y;
};

this.move = function(dx, dy) {
    //var ts = Raphael.parseTransformString(this.attr("transform"));
    this.updated_x = this.original_x + dx;
    this.updated_y = this.original_y + dy;
    //ts[0][1] = this.original_x + dx; 
    //ts[0][2] = this.original_y + dy; 
    this.attr({transform: 't' + this.updated_x + ',' + this.updated_y});
};

this.up = function() {

    if(confirm("Shall I update the new position??")) {
        this.original_x = this.updated_x;
        this.original_y = this.updated_y;
    }

    var transformString = "t" + this.original_x + "," + this.original_y;
    this.attr("transform", transformString);    
    this.attr({fill: "#fff"});
    this.animate({r: 50, opacity: 1}, 500, ">");
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Raphael.js attr 函数设置了错误的值 的相关文章

随机推荐

  • 使用 LightOpenID 登录/注销用户状态

    我正在尝试在我的网站上使用 LightOpenId 来登录 注销用户 这工作正常 但我的问题是 如何跟踪用户登录 注销状态并采取相应的操作 我希望用户仅在登录时访问我的网站功能 并在用户注销时重定向到登录页面 提前致谢 你的问题实际上与Op
  • 创建自定义键盘控件 [Elm]

    我正在尝试为 4 人游戏创建自定义键盘控件 现在 密钥是这样预先确定的 type Orient x Int y Int type GameInput space Bool delta Time so1 Orient so2 Orient s
  • 在 bash 中获取某些列

    假设我有一个数组 其中数组中的每个元素都采用以下格式 someText x1 y1 z1 x2 y2 z2 x3 y2 z3 KEY 构建新数组的方法是什么 其中新数组中的元素只是前一个数组的第一列和最后一列 你可以做这样的事情 其中OLD
  • CloudFormation - 从 Lambda 代码访问参数

    我有一个CloudFormation模板看起来像这样 AWSTemplateFormatVersion 2010 09 09 Description This template will deploy stuff Parameters my
  • 如何使用文件权限保护 Laravel 中的 .env 文件?

    我的 env 文件包含所有凭据 可通过 URL 访问 我发现了一些问题 比如如何在 laravel 5 4 中保护 env 文件 上面说要使用htaccess以防止用户访问该文件 但我更喜欢使用文件权限 所以我将权限更改为0111它只能执行
  • select语句中列的顺序会影响查询速度吗?

    例如 我有一个这样的数据库 id fname lname sex age tel cell address If I do select cell fname address sex而不是做select fname sex cell add
  • getResourceAsStream() 没有看到资源

    我想从我的 jar 文件中解压资源 jar的结构如下 my jar META INF resources my exe my dll my namespace UnpackResourceFromThisClass class 我想从 ja
  • 在响应文本中显示换行符

    我使用 Swagger UI v2 2 0 我有一个返回纯文本的 RESTful 方法 我想用换行符显示此文本 目前 返回的文本包含换行符 但它们显示为 n The Content Type响应头是text plain 我可以返回文本并插入
  • 如何仅使用 php 脚本播放声音文件

    请告诉我如何使用 php 脚本播放声音文件 wav 我需要从数据库获取值 并根据这些值我应该播放声音文件 预先感谢 iam 使用 Linux 操作系统 PHP只是一种处理语言 它cannot为用户播放音频 它can显示将播放 wav 声音的
  • ImageMagick 与 VS2012

    首先非常感谢您阅读我的帖子 我正在尝试使用图像魔术师 with VS2012 on Windows 7 64 位用于图像旋转 这是我所做的 下载图像魔术师对于 Windows 并解压缩它 进入 ImageMagick 6 8 8 Visua
  • ContentFile 未保存在 Django 模型 FileField 中

    我在 Django 模型中将字符串保存为文件时遇到问题 因为每当我尝试取回数据时 它都会给我一个 ValueError 属性没有关联的文件 详细信息如下 MODEL class GeojsonData models Model dname
  • 参考我自己的类型的最佳方式

    abstract class A
  • 无法将实体框架连接到本地 SQL Server Express

    我有连接字符串
  • MPMoviePlayerController 在 iPhone 应用程序中反向(向后)播放电影不流畅

    我正在开发一个 iPhone 应用程序 我需要反转视频播放 我目前正在使用 XCode 4 2 我正在尝试使用 MPMoviePlayerController 反向播放电影 但反向播放时就没有正向播放那么流畅 它变得有点断断续续 一点也不光
  • SQL 中日期范围内的工作日数

    这比看起来更难 我需要一个函数来计算日期范围内给定工作日的数字 我不需要任何循环或递归 SQL 有数以百万计的例子就是这样做的 我需要一个快速的计算函数 函数的输入将是工作日 起始日期 今日 counting fridays set dat
  • 将更接近的白色像素组合在一起,并在 OpenCV 中在它们周围绘制一个矩形

    我想将这些彼此更接近的白色像素分组 并使用 C 在 OpenCV 中在它们周围绘制一个矩形 原图 预期结果 我是 OpenCV 新手 任何帮助将不胜感激 您可以根据给定的谓词对白色像素进行分组分割 在这种情况下 您的谓词可以是 将给定欧氏距
  • 如何将滚动条附加到文本小部件?

    我试图将滚动条附加到我的文本字段 但无法执行此操作 这是代码段 self scroller Scrollbar self root self scroller place x 706 y 121 self outputArea Text s
  • 将 pandas groupby 结果与小计转换为相对值

    我遇到过一个插入小计的好解决方案进入 pandas groupby 数据框 但是 现在我想修改结果以显示相对于小计的相对值 而不是绝对值 这是显示 groupby 的代码 import pandas as pd import numpy a
  • Firebird 从表中选择字段,其中 Field = current_date

    我有一个简单但对我来说无法解决的问题 我有这样的要求 Firebird 从表中选择字段 其中 Field current date 问题是该字段是一个文本字段 保存以下格式的日期 25 04 2014 如果是当前日期 我该如何转换这个问题有
  • Raphael.js attr 函数设置了错误的值

    我正在使用 Raphael js 实现拖放系统 为此 我存储了 mousedown 上的原始 x 和 y 位置 如果 mouseup 上发生碰撞 我想将位置重置为原始位置 这是执行重置的代码 this 指的是此处的 raphael 对象 v