javascript - 使用 javascript、范围输入和 css 转换的数学 : scale()

标签 javascript html css range

我有一个宽度为 794px 的 div 和一个最大 250 最小 0 的范围输入。 我正在使用 css 变换缩放 div:scale(1),其中 1 是当 div 实际显示为 794px 时。

但是,当浏览器窗口的宽度大于该宽度时,我希望能够进一步放大,以便当窗口为 1588 像素时,div 的值应为 scale(2)。当浏览器窗口小于 794px 时,最大值 (250) 应该代表窗口的宽度。

我已经为此尝试了几种不同的解决方案,我只发布最后一个,这样我就不会混淆任何人。

Javascript:

const baseWidth = 794;
const maxWidth = (baseWidth * 2) + 50;
const workspace = document.getElementById('workspace');
const oWidth = workspace.offsetWidth;
const rangeValue = zoomElement.target.value;
const rangeStepSizeByPixels = (oWidth - 0) / 250;
const rangeStepSizeByPercent = (rangeStepSizeByPixels / oWidth) * 100;
const trueZoom = rangeValue * this.state.rangeStepSize;

this.setState({
    ...this.state,
    actualZoom: trueZoom,
    height: (700 * trueZoom) / 100,
    width: (550 * trueZoom) / 100,
});

HTML:

<section id="infobar" class="inner-margin">
    <input type="range" step="0.4" min="0" max="250" class="zoomslider" value="250">
</section>

<section id="workspace" class="scrollable tender-edit orange-midnight-them">

    <div class="doccontainer" style="width: 794px; height: 1123px;">
        <section class="init-scale" style="transform: scale(1);">
            <div class="doc-header">
            ...
            </div>
            <div class="doc-inner">
            ...
            </div>
            <div class="doc-footer">
            ...
            </div>
        </section>
    </div>

</section>

这导致范围值 250 与设置 scale(1) 相同的情况,这不是我想要的。

最佳答案

好吧,在得到 friend 的帮助后,事实证明答案比我想象的要简单得多。

const factor = (oWidth - 50) / baseWidth;

(-50 只是为了在父元素上设置一些填充。)

有了这个数字,我就得到了倍增因子,然后我可以用它来设置我所追求的百分比值,还可以计算我的范围输入默认应该具有的值。

const rangeValue = zoomElement.target.value;
const trueZoom = (rangeValue / 250) * 100 * this.state.factor;

这是范围输入更改时我得到的值。

下面是我根据父元素的实际宽度设置默认缩放和默认范围值的计算。

const defaultDocWidth = ((oWidth - 50) * 0.5) / 2;
const newFactor = (defaultDocWidth / (oWidth - 50));
const defaultZoom = (defaultDocWidth) * newFactor;
const defaultRangeValue = (250 / 100) * defaultZoom;

关于javascript - 使用 javascript、范围输入和 css 转换的数学 : scale(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46301612/

相关文章:

javascript - 如何使背景图像滚动速度比页面慢?

javascript - 创建特定范围值内的动态数组

javascript - 有没有更简单的方法来检查属性的存在?

jquery - 如何获得每个 swiper-slide 元素的宽度

javascript - 从 jQuery 迁移到原型(prototype)

html - 如何使用 css 刷新到 HTML 页面的顶部

html - 我如何将这个 &lt;iframe&gt; 放在网页上

html - 如何在按钮内放置图像?

css - IE 10 的 -ms-clear 伪元素和 IE5 怪癖模式

css - slider 行为不当