jquery - css“transform:scale”影响 jquery 的“.offset()”

2024-04-17

我正在尝试用 jQuery 进行验证。

之后会产生错误blur通过检查给定的事件是否发生input是空的。在此基础上,它将创建一个<div class="errdiv">在那旁边input这将会有特定的错误。我用.offset获取该特定位置input定位.errdiv there.

CSS:

.inpt {
    width:500px;
    height:50px;
    background:#eee;
    color:#444;
    border:2px solid #ddd;
    padding:5px;
    transition: all ease 1s;
    border-radius:5px;
    outline:none;
}
.inpt:focus {
    background:#fff;
    color:#222;
    border:2px solid #000;
}
.err {
    background:pink;
    border:2px solid #f00;
    color:#a00;
}
.errdiv {
    position:absolute;
    top:0px;
    left:0px;
    height:30px;
    display:inline-block;
    padding:5px;
    border-radius:5px;
    background:#a00;
    border:1px solid #a44;
    color:#fff;
    text-align:center;    
    font-weight:bolder;
    visibility:visible;
    opacity:0;
}

JS:

$(document).ready(function(){
    $(".inpt").blur(function(){
        // Check Input for validation.
        $(".errdiv").remove(); //Remove Any Previous Error.
        var vl=$(this).val();
        var vl1=vl.split(" ").join("");
        if(vl==""||vl1==""){
            // Input is Empty Mark It red.
            $(this).addClass("err");
        }
    });
    $(".inpt").focus(function(){
        //Check Whether Input is marked Red or Not (hasClass) err?
        $(".errdiv").remove(); //Remove Any Previous Error.
        if($(this).hasClass("err")){
        // Input is Marked!
        $(this).removeClass("err");
        var tp=$(this).offset().top+12;
        var lf=$(this).offset().left+$(this).width()+12;
         // Add Error Div and appropriate Message.
        $("body").append("<div class='errdiv' style='position:absolute;top:"+tp+"px;left:"+lf+"px;'>*This is Required.</div>");
        $(".errdiv").animate({
            "visibility":"visible",
            "opacity":"1"
        },1000); //Show What is The Error?
    });
});

HTML:

<center>Hello Every One!</center>
<hr>    
<center>
<input class="inpt" placeholder="name" type="text" /><br />
<input class="inpt" placeholder="email" type="text" /><br />
<input class="inpt" placeholder="password" type="password" /><br />
 </center>
 <center>
Just Try Focusing and Bluring the Inputs
</center>

而且效果很好。你可以测试一下here http://jsfiddle.net/9hm58/12/.

正如你所看到的,它会产生错误<div>并显示如下:

"Actual and Expected Output".


实际问题

当我尝试时出现问题scale(zoom)我的专为视障人士和/或大屏幕显示器设计的页面,使用:

body{
    /*mozilla hack*/
    -moz-transform: scale(1.25,1.25);
    /* Chrome and Safari */
   -webkit-transform: scale(1.25,1.25);
    /*IE */
    -ms-transform:scale(1.25,1.25);
    /*Opera*/
    -o-transform:scale(1.25,1.25);
    /*Others*/
    transform:scale(1.25,1.25);
} 

然后我不知道会发生什么。但事情却变得非常糟糕。这.offset()似乎无法正常工作。你可以看到Here http://jsfiddle.net/9hm58/13/.

The error div now gets positioned as: Error After Zoom


谁能告诉我如何定位.errdiv即使在之后也正确scaling这一页?

我做错了什么?

欢迎任何建议或想法。希望大家尽快帮助我。提前致谢 :)。


PS:
transform-origin: 0 0;

没有帮助我。和我不想使用<table><td>或写div以前在HTML我想动态添加它。

编辑赏金

我接受的解决方案对于验证部分来说是可以的,但是现在我正在尝试使用ajax来实现它,其中内容将动态添加到div中,并且我必须添加transition:all ease 2.0s to body的 css 使一些东西看起来很棒。但添加后trasition从而影响其性质transform它会被接受的解决方案改变(变换也会变得动画)。并且没有解决定位问题。那么有没有更好的方法来满足需求呢?谁能提供跨浏览器的解决方案吗?


你的问题是 jquery 没有返回元素的正确大小($(this).width()).

尝试使用 getBoundingClientRect 函数(请参阅this https://developer.mozilla.org/en-US/docs/Web/API/Element.getBoundingClientRect)来获取包围您的元素的矩形对象。

你可以在你的函数中以这种方式使用它

var lf=$(this).offset().left+$(this)[0].getBoundingClientRect().width+12;

尝试这个解决方法

http://jsfiddle.net/H5sW9/10/ http://jsfiddle.net/H5sW9/10/

获取 matches[ 1] (scaleX) 和 matches[ 2] (scaleY) 中的当前比例

var matrixRegex = /matrix\((-?\d*\.?\d+),\s*0,\s*0,\s*(-?\d*\.?\d+),\s*0,\s*0\)/;
var matches =$("body").css('transform').match(matrixRegex);

在追加之前将缩放存储为 100%

$("body").css('transform', 'scale(' + '1' + ')');

添加 div 后恢复到 125%

 $("body").css('transform', 'scale(' + matches[1] + ')');

我只使用了transform,而不是你应该使用的-webkit-transition、-moz-transform...。

要缩放不同的因素 x 和 y,您应该使用

$("body").css('transform', 'scale(' + '1' +','  +'1' + ')');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jquery - css“transform:scale”影响 jquery 的“.offset()” 的相关文章

随机推荐

  • GitHub 将多个提交合并为一个

    我搜索了很多但没有找到类似的问题 假设我有两个分支 分支 S 稳定 和分支 E 实验 实验是从 稳定 分支创建的 我一直在 E 分支上执行 git add A git commit m my new commit git push orig
  • ping 请求会给服务器带来负载吗?

    我有很多客户 大约4000个 每个客户端每 2 秒 ping 一次我的服务器 这些 ping 请求会给服务器带来负载并减慢速度吗 我怎样才能监控这个负载 现在服务器响应缓慢 但处理器几乎空闲 可用内存也可以 我在 Ubuntu 上运行 Ap
  • 乘积对符号数量的变量的偏导数之和

    我希望 SymPy 计算如 下所示的表达式 我如何定义符号和表达式以便 SymPy 可以很好地处理它 我想保留N只是一个符号 即不制作实际的有限列表x的 我尝试过各种组合IndexedBase and Sum Product 但没有让它正常
  • Github API:过早获取超出速率限制的问题

    我正在构建一个应用程序来获取问题和拉取请求 https developer github com v3 超过 1K 的 github 存储库 就像这样 curl i https api github com repos user repo
  • 我需要一个在 python 中使用面板重叠诅咒窗口的示例

    我正在寻找有关如何使用的示例curses panel保持重叠的窗口 我在这里找到了这个https mail python org pipermail python list 2001 April 105015 html https web
  • 在 MVC 中从同步调用异步而没有等待时,TPL 任务死锁

    我知道在同步 MVC 方法中调用异步方法 同时使用 Wait 或 Result 等待任务完成时 存在 TPL 死锁陷阱 但我们刚刚在 MVC 应用程序中发现了一个奇怪的行为 同步操作调用异步方法 但由于它是触发器 因此我们从未等待它完成 尽
  • 如何检查线程是否终止?

    线程什么时候到达终止地位 结束时是否会终止run 方法达到了 那么检查线程是否终止的正确方法是什么 因为以下条件对我来说似乎总是成立 if thread getState equals TERMINATED 有任何想法吗 First Thr
  • 如何读取 XML 文件的 php DOM 中的分隔符?

    我有一些 XML 文件 我必须读取它们并将其转换为 HTML XML 的格式是这样的
  • 使用 jQuery 拖放时保留元素的副本

    我正在使用 Jquery 拖放功能 并且我想保留正在拖动的元素的副本 draggable draggable revert invalid stack draggable helper clone droppable droppable a
  • Angular 4 多个字段的表单验证

    EDIT 我想要实现的是对单个 formControl 而不是整个表单的验证 验证器应该检查所有原子字段 如门牌号 街道等 然后使谷歌地图输入控件无效 我正在使用 Google 地图自动完成功能编写表单 用户应在触发 Google 地图自动
  • 如何正确处理httpStatuscode

    我想使用新功能 http api jquery com jQuery ajax 对 http 状态代码 如 200 201 或 202 做出反应 但该函数忽略了我的 201 和 202 回调 firefox 4 0 b10 和 chromi
  • 如何在matlab中检查字符串中的模式?

    我想检查字符串中是否存在特定模式来执行某些操作 filename pathname uigetfile fullpath pathname filename 在我的程序中 我只会浏览图片 所有图片都以该模式命名 cam1 jpg cam1
  • 更改特定 WooCommerce 电子邮件通知的发件人姓名和电子邮件地址

    如何在 WooCommerce 中更改特定电子邮件通知的电子邮件发件人地址和姓名 例如 更改发件人姓名和电子邮件地址仅用于客户处理订单电子邮件通知 但不适用于所有电子邮件通知 仅适用于特定电子邮件通知 发件人姓名和电子邮件地址在此处设置 在
  • 如何从 Mac OS 中的 SwiftUI 列表中删除底部/顶部项目填充

    我很难使用 SwiftUI 从 MacOS 中的单元格中删除所有填充 即使在苹果的代码中我似乎也无法做到这一点 https developer apple com tutorials swiftui creating a macos app
  • 在 TypeScript 中创建全局变量

    在 JavaScript 中我可以这样做 something testing 然后在另一个文件中 if something testing 它将有something被定义 只要它们以正确的顺序被调用 我似乎不知道如何在 TypeScript
  • WP7 难以将数据绑定到列表框项目源 - 不会刷新

    因此 我的 WP7 应用程序上有一个详细信息页面 其中显示了一个列表框 其中显示了我的应用程序中的一些数据 在代码隐藏中 我将列表框 itemssource 设置为对象集合 到目前为止非常简单 我在同一屏幕上还有几个文本框和一个按钮 可以让
  • 每个领域都有不同的分析仪

    如何为使用 Lucene 索引的文档中的每个字段启用不同的分析器 例子 RAMDirectory dir new RAMDirectory IndexWriter iw new IndexWriter dir new StandardAna
  • C# 如何选择歧义和参数

    假设我有以下方法 public static void MyCoolMethod params object allObjects public static void MyCoolMethod object oneAlone params
  • 以下新的重载是否会泄漏内存?

    我遇到过以下代码 class a public void operator new size t l int nb double values void a operator new size t l int n return new ch
  • jquery - css“transform:scale”影响 jquery 的“.offset()”

    我正在尝试用 jQuery 进行验证 之后会产生错误blur通过检查给定的事件是否发生input是空的 在此基础上 它将创建一个 div class errdiv 在那旁边input这将会有特定的错误 我用 offset获取该特定位置inp