{"id":60,"date":"2007-05-31T12:39:39","date_gmt":"2007-05-31T17:39:39","guid":{"rendered":"http:\/\/www.pixelwit.com\/blog\/2007\/05\/31\/how-to-limit-a-number-between-2-values\/"},"modified":"2009-08-13T21:20:38","modified_gmt":"2009-08-14T02:20:38","slug":"how-to-limit-a-number-between-2-values","status":"publish","type":"post","link":"https:\/\/www.pixelwit.com\/blog\/2007\/05\/31\/how-to-limit-a-number-between-2-values\/","title":{"rendered":"How to Limit a Number Between 2 Values"},"content":{"rendered":"<p>Limiting or constraining a number to a specified range of values isn&#8217;t the most common task you&#8217;ll have to perform in Flash, but it does pop up from time to time.  If you encounter such a situation here is a little bit of code for your consideration:<!--more--><\/p>\n<div class=\"codecolorer-container actionscript default\" style=\"overflow:auto;white-space:nowrap;width:100%;\"><div class=\"actionscript codecolorer\"><span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Basic concept, easy to extend.<\/span><br \/>\n<span class=\"kw2\">function<\/span> limitBasic <span class=\"br0\">&#40;<\/span>num, lo, hi<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>num<span class=\"sy0\">&lt;<\/span>lo<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> lo;<br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"kw1\">else<\/span> <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>num<span class=\"sy0\">&gt;<\/span>hi<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> hi;<br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"kw1\">else<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> num;<br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Same concept, easy to remember and write.<\/span><br \/>\n<span class=\"kw2\">function<\/span> limitShort <span class=\"br0\">&#40;<\/span>num, lo, hi<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>num<span class=\"sy0\">&lt;<\/span>lo<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">return<\/span> lo;<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>num<span class=\"sy0\">&gt;<\/span>hi<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">return<\/span> hi;<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> num;<br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Same concept, short but hard to read.<\/span><br \/>\n<span class=\"kw2\">function<\/span> limitTiny <span class=\"br0\">&#40;<\/span>num, lo, hi<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> num<span class=\"sy0\">&lt;<\/span>lo ? lo : num<span class=\"sy0\">&gt;<\/span>hi ? hi : num;<br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Uses the Math object, short but a little counterintuitive and slow.<\/span><br \/>\n<span class=\"kw2\">function<\/span> limitSlow <span class=\"br0\">&#40;<\/span>num, lo, hi<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw3\">Math<\/span>.<span class=\"kw3\">min<\/span><span class=\"br0\">&#40;<\/span>hi, <span class=\"kw3\">Math<\/span>.<span class=\"kw3\">max<\/span><span class=\"br0\">&#40;<\/span>lo, num<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><\/div><\/div>\n<p>All four functions work the same basic way.<\/p>\n<ul>\n<li>If the number (&#8220;num&#8221;) is below the lower limit (&#8220;lo&#8221;), it is set to the lower limit.<\/li>\n<li>If the number is above the upper limit (&#8220;hi&#8221;) it is set to the upper limit.<\/li>\n<li>If the number is between or within both limits, it remains unchanged.<\/li>\n<\/ul>\n<p>The main thing to note is that the &#8220;limitSlow&#8221; function uses the Math object which makes it a good bit slower than the other limiting methods.  The other three &#8220;limit&#8221; or &#8220;constrain&#8221; functions are fundamentally the same in performance and concept but the structure of the conditional statements has been changed to suit different coding styles.  If you&#8217;re not sure which one is best, use &#8220;limitBasic&#8221; as it is the most common format for &#8220;if else&#8221; conditional statements and therefore easier for most people to read.<\/p>\n<p>Here&#8217;s a code sample to get you started:<\/p>\n<div class=\"codecolorer-container actionscript default\" style=\"overflow:auto;white-space:nowrap;width:100%;height:700px;\"><div class=\"actionscript codecolorer\"><span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Limit a number between two values.<\/span><br \/>\n<span class=\"kw2\">function<\/span> limit <span class=\"br0\">&#40;<\/span>num, lo, hi<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>num<span class=\"sy0\">&lt;<\/span>lo<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> lo;<br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"kw1\">else<\/span> <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>num<span class=\"sy0\">&gt;<\/span>hi<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> hi;<br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"kw1\">else<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> num;<br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Build Description textfields.<\/span><br \/>\n<span class=\"kw3\">createTextField<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;LoDescTF&quot;<\/span>, <span class=\"nu0\">10<\/span>, <span class=\"nu0\">50<\/span>, <span class=\"nu0\">10<\/span>, <span class=\"nu0\">100<\/span>, <span class=\"nu0\">20<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nLoDescTF.<span class=\"kw3\">text<\/span> = <span class=\"st0\">&quot;Lower Limit&quot;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"kw3\">createTextField<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;LimitedDescTF&quot;<\/span>, <span class=\"nu0\">20<\/span>, <span class=\"nu0\">200<\/span>, <span class=\"nu0\">10<\/span>, <span class=\"nu0\">100<\/span>, <span class=\"nu0\">20<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nLimitedDescTF.<span class=\"kw3\">text<\/span> = <span class=\"st0\">&quot;Limited Value&quot;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"kw3\">createTextField<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;HiDescTF&quot;<\/span>, <span class=\"nu0\">30<\/span>, <span class=\"nu0\">350<\/span>, <span class=\"nu0\">10<\/span>, <span class=\"nu0\">100<\/span>, <span class=\"nu0\">20<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nHiDescTF.<span class=\"kw3\">text<\/span> = <span class=\"st0\">&quot;Upper Limit&quot;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Build User-input textfields.<\/span><br \/>\n<span class=\"kw3\">createTextField<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;LoTF&quot;<\/span>, <span class=\"nu0\">11<\/span>, <span class=\"nu0\">50<\/span>, <span class=\"nu0\">30<\/span>, <span class=\"nu0\">100<\/span>, <span class=\"nu0\">20<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nLoTF.<span class=\"kw3\">type<\/span> = <span class=\"st0\">&quot;input&quot;<\/span>;<br \/>\nLoTF.<span class=\"kw3\">border<\/span> = <span class=\"kw2\">true<\/span>;<br \/>\nLoTF.<span class=\"kw3\">restrict<\/span> = <span class=\"st0\">&quot;0-9&quot;<\/span>;<br \/>\nLoTF.<span class=\"kw3\">text<\/span> = <span class=\"st0\">&quot;0&quot;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"kw3\">createTextField<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;LimitedTF&quot;<\/span>, <span class=\"nu0\">21<\/span>, <span class=\"nu0\">200<\/span>, <span class=\"nu0\">30<\/span>, <span class=\"nu0\">100<\/span>, <span class=\"nu0\">20<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nLimitedTF.<span class=\"kw3\">type<\/span> = <span class=\"st0\">&quot;input&quot;<\/span>;<br \/>\nLimitedTF.<span class=\"kw3\">border<\/span> = <span class=\"kw2\">true<\/span>;<br \/>\nLimitedTF.<span class=\"kw3\">restrict<\/span> = <span class=\"st0\">&quot;0-9&quot;<\/span>;<br \/>\nLimitedTF.<span class=\"kw3\">text<\/span> = <span class=\"st0\">&quot;50&quot;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"kw3\">createTextField<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;HiTF&quot;<\/span>, <span class=\"nu0\">31<\/span>, <span class=\"nu0\">350<\/span>, <span class=\"nu0\">30<\/span>, <span class=\"nu0\">100<\/span>, <span class=\"nu0\">20<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nHiTF.<span class=\"kw3\">type<\/span> = <span class=\"st0\">&quot;input&quot;<\/span>;<br \/>\nHiTF.<span class=\"kw3\">border<\/span> = <span class=\"kw2\">true<\/span>;<br \/>\nHiTF.<span class=\"kw3\">restrict<\/span> = <span class=\"st0\">&quot;0-9&quot;<\/span>;<br \/>\nHiTF.<span class=\"kw3\">text<\/span> = <span class=\"st0\">&quot;100&quot;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Build Instructions textfield.<\/span><br \/>\n<span class=\"kw3\">createTextField<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;Instructions&quot;<\/span>, <span class=\"nu0\">40<\/span>, <span class=\"nu0\">10<\/span>, <span class=\"nu0\">60<\/span>, <span class=\"nu0\">480<\/span>, <span class=\"nu0\">40<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nInstructions.<span class=\"kw3\">wordWrap<\/span> = <span class=\"kw2\">true<\/span>;<br \/>\nInstructions.<span class=\"kw3\">multiline<\/span> = <span class=\"kw2\">true<\/span>;<br \/>\nInstructions.<span class=\"kw3\">text<\/span> = <span class=\"st0\">&quot;Type a number in the middle box and press the enter key to limit the number between the low and high values.&quot;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Limit the value in the middle box when the Enter key is pressed.<\/span><br \/>\nLimitedTF.<span class=\"kw3\">onKeyDown<\/span> = <span class=\"kw2\">function<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">Key<\/span>.<span class=\"kw3\">isDown<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">Key<\/span>.<span class=\"kw3\">ENTER<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> lo = LoTF.<span class=\"kw3\">text<\/span> - <span class=\"nu0\">0<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> hi = HiTF.<span class=\"kw3\">text<\/span> - <span class=\"nu0\">0<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> lim = <span class=\"kw3\">this<\/span>.<span class=\"kw3\">text<\/span> - <span class=\"nu0\">0<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw3\">this<\/span>.<span class=\"kw3\">text<\/span> = limit<span class=\"br0\">&#40;<\/span>lim, lo, hi<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"kw3\">Key<\/span>.<span class=\"kw3\">addListener<\/span><span class=\"br0\">&#40;<\/span>LimitedTF<span class=\"br0\">&#41;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><\/div><\/div>\n<p>The above code produces the following SWF:<\/p>\n\n<object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"\n\t\t\tid=\"fm_limitbetweenvalues_03_1568447355\"\n\t\t\tclass=\"flashmovie\"\n\t\t\twidth=\"500\"\n\t\t\theight=\"100\">\n\t<param name=\"movie\" value=\"https:\/\/www.pixelwit.com\/blog\/wp-content\/uploads\/2007\/05\/limitbetweenvalues_03.swf\" \/>\n\t<!--[if !IE]>-->\n\t<object\ttype=\"application\/x-shockwave-flash\"\n\t\t\tdata=\"https:\/\/www.pixelwit.com\/blog\/wp-content\/uploads\/2007\/05\/limitbetweenvalues_03.swf\"\n\t\t\tname=\"fm_limitbetweenvalues_03_1568447355\"\n\t\t\twidth=\"500\"\n\t\t\theight=\"100\">\n\t<!--<![endif]-->\n\t\t\n\t<!--[if !IE]>-->\n\t<\/object>\n\t<!--<![endif]-->\n<\/object>\n","protected":false},"excerpt":{"rendered":"<p>An ActionScript tutorial examining various techniques used to limit a number between two values.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[8],"tags":[23,36,37],"class_list":["post-60","post","type-post","status-publish","format-standard","hentry","category-flash","tag-actionscript","tag-swfs","tag-tutorial"],"_links":{"self":[{"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/posts\/60","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/comments?post=60"}],"version-history":[{"count":0,"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/posts\/60\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/media?parent=60"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/categories?post=60"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/tags?post=60"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}