1. 程式人生 > >JavaScript 一個文字跑馬燈程式碼實現 可以設定文字內容、左右滾動方向、文字大小和顏色、滾動速度

JavaScript 一個文字跑馬燈程式碼實現 可以設定文字內容、左右滾動方向、文字大小和顏色、滾動速度

JavaScript 一個文字跑馬燈程式碼實現,可以設定文字內容、左右滾動方向、文字大小及顏色、滾動速度,暫停和繼續播放。這是一個比較簡單,甚至完全可以用css實現,其實就是滿足小朋友興趣愛好寫的這麼一個demo。看似簡單,其實這裡還是有些實現細節需要注意,所以就跟大家分享下。

1、頁面截圖

在這裡插入圖片描述
在這裡插入圖片描述
操作說明:
1)可以設定文字滾動方向、滾動速度,文字顏色、大小,文字滾動內容,點選“確定”按鈕即可生效,並重新播放;
2)確定按鈕右側的小按鈕:暫停/播放

  • 點暫停,按鈕圖示顯示為播放圖示,暫停播放;
  • 點播放,按鈕圖示顯示為停止圖示,繼續播放;

2、頁面程式碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文字跑馬燈效果</title>
    <link rel="stylesheet" href="https://cdn.bootcss.com/twitter-bootstrap/3.3.7/css/bootstrap.min.css" />
    <link rel="stylesheet" href="https://cdn.bootcss.com/font-awesome/4.5.0/css/font-awesome.min.css"
/>
<style type="text/css"> .w100{width: 100px!important} .w200{width: 200px!important} .form-horizontal .form-group{margin-right:0; margin-left:0;} .form-group-np .col-xs-1, .form-group-np .col-xs-2{ padding-right: 0; padding-left: 0; } </style> <script src="https://cdn.bootcss.com/jquery/1.11.1/jquery.min.js"
>
</script> </head> <body> <div align="center" id="demo" style="overflow:hidden; width:620px; margin: 50px auto;"> <div id="words-wrap" style="border: 1px solid #000; position:relative; overflow:hidden; height: 60px; margin-bottom: 15px;"> <div id="words" style="line-height:60px; font-weight:bold; position:absolute; display:inline-block; width: auto; white-space:nowrap;"> HTML5是一個豐富的應用,可以給使用者很多視覺上的享受! </div> </div> <div class="form-horizontal" style="border: 1px solid #ddd; padding-top:15px;"> <div class="form-group form-group-sm form-group-np clearfix"> <label class="col-xs-2 control-label w100">滾動方向:</label> <div class='col-xs-2 w200'> <select id="gd_fx" class="form-control input-sm"> <option value="ltr">從左向右</option> <option value="rtl" selected>從右向左</option> </select> </div> <label class="col-xs-2 control-label w100">滾動速度:</label> <div class="col-xs-2 w200"> <select id="gd_speed" class="form-control input-sm"> <option value="200">很快</option> <option value="300"></option> <option value="500" selected>適中</option> <option value="1000"></option> <option value="2000">很慢</option> </select> </div> </div> <div class="form-group form-group-sm form-group-np clearfix"> <label class="col-xs-2 control-label w100">文字顏色:</label> <div class='col-xs-2 w200'> <input id="font_color" type="color" class="form-control input-sm" placeholder="文字顏色" value="#ff0000" /> </div> <label class="col-xs-2 control-label w100">文字大小:</label> <div class='col-xs-2 w200'> <select id="font_size" class="form-control input-sm"> <option value="14px">14px</option> <option value="16px" selected>16px</option> <option value="18px">18px</option> <option value="20px">20px</option> <option value="24px">24px</option> <option value="30px">30px</option> </select> </div> </div> <div class="form-group form-group-sm form-group-np clearfix"> <label class="col-xs-2 control-label w100">文字大小:</label> <div class='col-xs-2' style="width: 500px;"> <input id="words_desc" type="text" class="form-control input-sm" placeholder="文字描述"></input> </div> </div> <div class="form-group form-group-sm form-group-np clearfix"> <div class='col-xs-2' style="width: 100%; padding:0 18px;"> <button type="button" class="btn btn-primary" style="width:535px" onclick="start();"> <span class="fa fa-check" style="margin-right: 5px;"></span>確 定</button> <button type="button" class="btn btn-default" style="width:40px;" onclick="stopOrPlay(this);"> <span class="fa fa-stop"></span></button> </div> </div> </div> </div> <script language="javascript" type="text/javascript"> var interval = 0, step = 20, tw = 620, twpx = "620px"; var gd_fx = $("#gd_fx").val(), gd_speed = $("#gd_speed").val(); var $words = $("#words"), words_width = $("#words").outerWidth(); var marquee = function () { var v = 0; if(gd_fx == "ltr") { v = parseFloat($words.css("right")) - step; $words.css("right", v); if(v + words_width < 0) { $words.css("right", tw); } } else { v = parseFloat($words.css("left")) - step; $words.css("left", v); if(v + words_width < 0) { $words.css("left", tw); } } } function start() { if(interval) clearInterval(interval); var font_color = $("#font_color").val() || "red"; var font_size = $("#font_size").val(); var words_desc = $("#words_desc").val() || "HTML5是一個豐富的應用,可以給使用者很多視覺上的享受!"; gd_fx = $("#gd_fx").val(), gd_speed = $("#gd_speed").val(); // $words.text(words_desc); words_width = $words.outerWidth(); if(gd_fx == "ltr") { $words.css({right: twpx, left:"auto"}); } else { $words.css({left: twpx, right:"auto"}); } $words.css({"font-size": font_size, "color": font_color}); interval = setInterval(marquee, gd_speed); } function stopOrPlay(obj) { var $fa = $(obj).find(".fa"); if($fa.hasClass('fa-stop')) { $fa.removeClass('fa-stop').addClass('fa-play'); if(interval) clearInterval(interval); } else { $fa.removeClass('fa-play').addClass('fa-stop'); if(interval) clearInterval(interval); interval = setInterval(marquee, gd_speed); } } $(function() { start(); }); </script> </body> </html>

3、細節及注意事項

1)原材料:使用了jquery, bootstrap, fa圖示;
2)技術點:

  • css 改變absolute定位的left, right實現文字左右滾動;
  • setInterval, 定時器使用

3)小細節:

  • div內容自適應寬度css處理,見 #words
  • jquery css賦值,取值,具體看js程式碼
    words.css({left: twpx, right:“auto”});
    v = parseFloat(words.css(“right”)) - step;
    words.css(“left”, tw);
  • 暫停/播放,一個按鈕實現2個行為的切換
    demo是用class做標記來處理的