【问题标题】:Limit the amount of times font size can be increased and decreased限制字体大小可以增加和减少的次数
【发布时间】:2015-02-22 02:42:36
【问题描述】:

在我的 ruby​​ on rails 应用程序中,我在 application.js 中使用以下 javascript 来增加和减少文本大小:

function resizeText(multiplier) {
var elem = document.getElementById("sizeable");
var currentSize = elem.style.fontSize || 1;
elem.style.fontSize = ( parseFloat(currentSize) + (multiplier * 0.2)) + "em";
}

这是由视图中的这些代码段调用的:

<img id="plustext" alt="INCREASE TEXT SIZE" src="images/makeTextBigger.jpg" onclick="resizeText(1)" /> | 
<img id="minustext" alt="DECREASE TEXT SIZE" src="images/makeTextSmaller.jpg" onclick="resizeText(-1)" />

然后,代码会根据点击的内容使带有 id 的文本变大或变小:

<tr id='sizeable'>
    <td><%= certificate.age_rating %></td>
    <td>
        <%= link_to 'Edit', edit_certificate_path(certificate) %>
        <%= link_to 'Show', certificate_path(certificate) %>
        <%= link_to 'Destroy', certificate_path(certificate), method: :delete, data: { confirm: 'Are you sure?' } %>
    </td>
</tr>

但我想要做的是将字体大小可以增加和减少的次数限制为 2 次点击。

我已经尝试过了,并替换了我以前的 java 脚本,所以我的 application.js 现在看起来像这样:

$(function(){
 $('#film_release_date').datepicker({
    dateFormat: 'dd-mm-yy', altFormat: 'yy-mm-dd', 
    changeYear: true, maxDate: "5Y", minDate: "0D", changeMonth: true
  });
 });

var minSize = 1;
var maxSize = 5;

function resizeText(multiplier) {
    var elem = document.getElementById("sizeable");
    var newSize = parseFloat(elem.style.fontSize) + multiplier * 0.2;
    if (newSize < minSize) newSize = minSize;
    if (newSize > maxSize) newSize = maxSize;
    elem.style.fontSize = newSize + "em";
}

但这似乎不起作用。

如何调整我的代码来做到这一点?我对java脚本了解不多。

【问题讨论】:

  • 不要将非 Java 问题标记为 Java。
  • 您确定要将其限制为 2 次点击吗?我猜你想限制最大字体大小。

标签: javascript jquery ruby-on-rails limit font-size


【解决方案1】:
var minSize = 1;
var maxSize = 5;

function resizeText(multiplier) {
    var elem = document.getElementById("sizeable");
    var newSize = parseFloat(elem.style.fontSize) + multiplier * 0.2;
    if (newSize < minSize) newSize = minSize;
    if (newSize > maxSize) newSize = maxSize;
    elem.style.fontSize = newSize + "em";
}

【讨论】:

  • 它有效。你可以在这里查看:zdg.ru/tmp/sizeable.html查看页面源代码。
  • 我在问题中添加了代码,但它不起作用。
  • 在浏览器中打开Javascript控制台,看看有没有错误。
【解决方案2】:
<p id="plustext"   onclick="resizeText(this,1)" >Hello</p> 
<p id="minustext"  onclick="resizeText(this,-1)">World</p>

javascript:

function resizeText(elem,multiplier) {
elem.count=elem.count || 0;
if(elem.count<2){
var currentSize = elem.style.fontSize || 1;
elem.style.fontSize = ( parseFloat(currentSize) + (multiplier * 0.2)) + "em";
elem.count++;
}

}

edit1 : 如果你想一键增加和减少。

function resizeText(elem,multiplier) {
elem.count=elem.count || 0;
var currentSize = elem.style.fontSize || 1;
if(elem.count<1){
elem.style.fontSize = ( parseFloat(currentSize) + (multiplier * 0.2)) + "em";
elem.count++;
} else {
elem.style.fontSize = ( parseFloat(currentSize) - (multiplier * 0.2)) + "em";
elem.count--;
}

}

【讨论】:

  • 如何将其应用于表格中的其他文本?
  • 你需要在哪里应用这个......只需调用 onclick="resizeText(this,1)".. 就像我在段落中所做的那样。
  • 是的,但这总是会使文本变大,如果用户想让文本变小怎么办?如果您查看我刚刚添加到问题中的代码,您可能会理解,此时我可以根据点击的内容来放大或缩小文本,而不仅仅是更大或更小。
  • @benjs 让我明白,如果你想一键放大,然后再点击减小它。我也编辑了答案。
  • 好吧,当用户点击按钮时,所有 ID 为 sizeable 的文本都可以变大或变小,但你的文本可以有 id="plustext" onclick="resizeText(this,1)",这将使它变大或 &lt;p id="minustext" onclick="resizeText(this,-1)"&gt;World&lt;/p&gt; 将使其变小,而之前文本可以变大或变小。
【解决方案3】:

假设您实际上想要控制字体大小而不是点击次数。我希望这可以帮助您使其比您预期的更好。

 var initialFontSize = getFontSize();
 var maxFontSize;
 var minFontSize;

 function getFontSize() {
   var temp = document.getElementById("sizeable").style.fontSize;
   if (temp) {
     return temp.substr(0, temp.indexOf("em"))
   } else {
     return 1;
   }
 }


 function resizeText(multiplier) {
   maxFontSize = parseFloat(initialFontSize) + multiplier * 0.4;
   minFontSize = parseFloat(initialFontSize) - multiplier * 0.4;

   var elem = document.getElementById("sizeable");
   var currentSize = getFontSize();
   if ((event.srcElement.id == "plustext" && currentSize < maxFontSize) || (event.srcElement.id == "minustext" && currentSize > maxFontSize)) {

     elem.style.fontSize = (parseFloat(currentSize) + (multiplier * 0.2)) + "em";

   }
 }
<div id="sizeable">sdfsfsd</div>
<img id="plustext" alt="INCREASE TEXT SIZE" src="images/makeTextBigger.jpg " onclick="resizeText(1)" />|
<img id="minustext" alt="DECREASE TEXT SIZE" src="images/makeTextSmaller.jpg" onclick="resizeText(-1)" />

【讨论】:

    【解决方案4】:

    在调整@Andrei Nikolaenko 提供的答案后,将其添加到我的 application.js 中:

    var minSize = 1;
    var maxSize = 1.5;
    
    function resizeText(multiplier) {
      var elem = document.getElementById("sizeable");
      var currentSize = elem.style.fontSize || 1;
      var newSize = parseFloat(currentSize) + multiplier * 0.2;
      if (newSize < minSize) newSize = minSize;
      if (newSize > maxSize) newSize = maxSize;
      elem.style.fontSize = newSize + "em";
    }
    

    主要区别在于我在var newSize = parseFloat(currentSize) + multiplier * 0.2; 行中使用了变量currentSize

    感谢所有帮助过的人。

    【讨论】:

    • 所以我看到了错误所在 - 最初 sizeable 元素没有 fontSize 属性,因此它转换为 NaN(不是数字)。并且fontSize || 1设为1,这样就可以正常使用了。
    猜你喜欢
    • 2014-04-26
    • 2020-01-21
    • 1970-01-01
    • 2012-06-03
    • 2021-03-13
    • 2012-12-10
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多