【问题标题】:Transform scaleX and maintain fixed right position变换 scaleX 并保持固定的正确位置
【发布时间】:2020-10-29 03:49:38
【问题描述】:

使用 jquery 缩放带有mousemove 的一些文本,但无法弄清楚如何使右侧的单词(h2)从固定的右侧位置从单词的右侧向左扩展。相反,它总是从单词的左边缘开始缩放。

我希望这 2 个单词组合在一起以始终填充窗口的宽度,并且随着光标向左移动,左侧单词 (h1) 缩小,右侧单词 (h2) 增长,反之亦然。

还有一个问题是我正在使用一些脚本将每个单词缩放到 document.ready 上窗口宽度的 50%,但是正确的单词 (h2) 再次根据 css 字体大小从其原始位置缩放所以缩小了页面。

使用text-align: right 无效。如何将正确的单词保留在窗口中并向左扩展? jsFiddle

var originwidth = $('h1').width()
var originheight = $('h1').height()
var origh1scalex = $(window).width()/2 / $('h1').width()
var origh2scalex = $(window).width()/2 / $('h2').width()

$(function() {    
  $('h1').css('transform', 'scaleX(' + origh1scalex + ')'); 
  $('h2').css('transform', 'scaleX(' + origh1scalex + ')');
});

$(document).on('mousemove', function(event) {
  var scaleX = event.pageX / originwidth
  var scaleY = event.pageY / originheight

  $('h1').css('transform', 'scale(' + scaleX + ',' + scaleY + ')')
})

var originwidth = $('h2').width()
var originheight = $('h2').height()

$(document).on('mousemove', function(event) {
  var scaleX = ($(window).width() - event.pageX) / originwidth
  var scaleY = event.pageY / originheight

  $('h2').css('transform', 'scale(' + scaleX + ',' + scaleY + ')')
})
h1,
h2 {
  margin: 0;
  padding: 0;
  border: 0;
  font-size: 100%;
  font: inherit;
  vertical-align: baseline;
}

hgroup {
  display: block;
}

body {
  line-height: 1;
}

* {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

body {
  font-family: Arial;
  font-size: 32px;
  line-height: 1.5;
  background-color: #ffdc00;
  color: #333333;
}

h1 {
  font-size: 5vw;
  font-weight: 700;
  position: fixed;
  top: 0;
  left: 0;
  transform-origin: 0 0;
}

h2 {
  font-size: 5vw;
  font-weight: 700;
  position: fixed;
  top: 0;
  right: 0;
  transform-origin: 0 0;
  text-align: right;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h1>LSNR.B</h1>
<h2>DESIGN</h2>

【问题讨论】:

    标签: html jquery css transform scale


    【解决方案1】:

    我做了一些改进,结果如下:https://codepen.io/adelriosantiago/pen/RwryoLj?editors=1010

    问题是 H2 的 CSS 上缺少 transform-origin: top right;。这将设置进行所有平移、缩放和旋转的原点。

    还需要在 mousemove 事件内计算 originwidth,因为每次计算转换时它都会发生变化。

    其他一些改进是:

    • 现在只使用了一个mousemove 事件。
    • 使用String template literalsscale(${ scaleX }, ${ scaleY }) 之类的,以便更容易辨别字符串是如何构建的。

    这个进一步的版本允许在第一次加载页面并且尚未发生mousemove 事件时设置大小:https://codepen.io/adelriosantiago/pen/vYLjybR?editors=0111

    【讨论】:

    • 这非常适合mousemove 效果,但我确实需要每个单词的初始比例为窗口的 50%。 (好像页面加载时光标直接位于页面中心)。这就是顶部代码的原因
    • 啊,现在我明白了那个顶级代码的意义。我已将代码提取到一个函数中,然后当有来自mousemove 的事件时,它将使用来自鼠标的数据,否则它将设置 50% 的大小。这是示例:codepen.io/adelriosantiago/pen/vYLjybR?editors=0111。您可以在函数顶部设置初始设置。
    • 另外,我发现我错过了原始代码不起作用的真正原因。它主要只是 CSS 中缺少的transform-origin: top right;。您可能想在原始的 sn-p 中尝试一下。
    • 啊哈!所以这就是为什么它不会向左扩展。这段代码很棒。比我做的简单多了。谢谢你。也许将代码放入 SO sn-p 以供未来用户使用。 codepen 链接可能不会永远存在。
    • 是的,在原来的 sn-p 中做了一点小改动,效果很好。我还是更喜欢你的代码!
    猜你喜欢
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 2021-01-24
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多