javascript - CSS 转换未在所有浏览器中使用 jQuery 更新

标签 javascript jquery html css

我正在尝试翻译 html 范围输入 slider 的 input 事件中的元素。但是当我检查元素时,jQuery 创建的内联样式不会更新,而只会在转换时更新。我已经应用了一些虚拟样式,只是为了确保 css 得到了更新,它们确实得到了更新。其他一切都完全按照预期更新。

如果元素还没有被转换,它几乎只工作一次。但在应用 CSS 转换后,它不会更新。我在 Safari、Chrome 和 Firefox 中进行了测试,结果相同。

方法如下:

useInputValues : function(){
    $('input[id$="-x"]').on('input', function(e){
        var id = $(this).parents('li').attr('data-item-id'),
            item = $('.grid [data-item-id="' + id + '"]'),
            x = $(this).val(),
            y = $(item).css('transform').split(',')[5] || 0,
            trans = 'translate(' + x + 'px, ' + y + 'px)';
            console.log(x + ", " + y); // this shows the values are correct and updating properly       

        // translate the element. Why doesn't this update each time?
        $(item).css('transform', trans); 

        // update the position attribute
        $(item).attr('data-x', x); // this happily updates in real time as expected
    })
},

更多上下文:不使用 jQuery 工作

我正在使用 interact.js脚本,以便可以将元素四处拖动以获得相同的效果。它使用的功能与我的非常相似,但它更新正确(没有 jQuery)。

resizeMove : function(event){
    var target = event.target,
        x = (parseFloat(target.getAttribute('data-x')) || 0),
        y = (parseFloat(target.getAttribute('data-y')) || 0);
    target.style.width  = event.rect.width + 'px';
    target.style.height = event.rect.height + 'px';
    x += event.deltaRect.left;
    y += event.deltaRect.top;

    // Notice here: same general idea, but it's working
    target.style.webkitTransform = target.style.transform =
        'translate(' + x + 'px,' + y + 'px)';

    target.setAttribute('data-x', x);
    target.setAttribute('data-y', y);
    this.updateInputValues(target);
},

非常感谢任何帮助。

编辑: fiddle

看到它在这里做同样的事情:https://jsfiddle.net/d5kdmp0v/1/

最佳答案

获取 transform 样式的值将返回如下所示的矩阵:

matrix(1, 0, 0, 1, 0, 0)

因为你是用逗号分割这个字符串,所以结果的第 6 个元素的字符串中仍然有一个括号,所以字符串是 0)。这是一个无效的 CSS 值。

如果您在拆分之前移除该括号,您会得到您期望的结果:

y = $(item).css('transform').replace(')', '').split(',')[5] || 0

JSFiddle

关于javascript - CSS 转换未在所有浏览器中使用 jQuery 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33610917/

相关文章:

javascript - 如何使用 Uglify.js 解析和迭代原型(prototype)方法?

javascript - Mousedown回调不会停止

php - jQuery tokeninput 插件,返回 1 个字符数字的结果时出现问题

javascript - 背景颜色不会永久改变

html - 如何使提交按钮位于搜索输入旁边

javascript - 如何获取 HTML 标签的值(getAttribute 返回 NULL)

javascript - 上一页 推荐到我的网站

jquery - 从图像中删除空白

javascript - JQuery ajax 忽略 url

jquery - 使用 jQuery 重复元素