IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    jQuery实现上传进度条效果

    dwqs发表于 2015-08-08 14:25:52
    love 0

    最近呢,老大让做一个进度条的效果出来,这个之前还真没做过。刚好这周没什么东西了,就拿这个来充一下数吧。

    文件上传,得先准备一个“按钮”:

    这个看上去还是不错的吧,实现也是很简单的:

    1. <span class="upload-span">开始上传文件</span>

    <button>太丑了,就用span来做了,可控性强。添加点css:

    1. .upload-span{
    2. display: inline-block;
    3. width: 120px;
    4. height: 40px;
    5. color: #FFFFFF;
    6. text-align: center;
    7. line-height: 40px;
    8. background-color: blue;
    9. border: 2px solid blue;
    10. border-radius:5px;
    11. cursor: pointer;
    12. letter-spacing: 2px;
    13. }

    当点击就会触发上传效果,之后添加事件。
    逼真一点,得再加一个遮罩和一个显示进度条的控件,点击span后,效果大概是这样子的:

    1. <div class="upload-mask"></div>
    2. <div class="upload-component">
    3. <div class="upload-close">
    4. <span class="upload-close-span">关闭</span>
    5. </div>
    6. <div class="upload-content">
    7. <div class="progress">
    8. <span class="upload-text"></span>
    9. <span class="uploaded"></span>
    10. </div>
    11. <div class="confirm-cancel">
    12. <span class="confirm">确认</span>
    13. <span class="cancel">取消</span>
    14. </div>
    15. </div>
    16. </div>

    加点css上去:

    1. .upload-mask{
    2. position: absolute;
    3. top: 0;
    4. left: 0;
    5. z-index: 9;
    6. width: 100%;
    7. height: 100%;
    8. background-color: rgba(84,84,84,0.3);
    9. display: none;
    10. }
    11. .upload-component{
    12. position: absolute;
    13. z-index: 99;
    14. top: 50%;
    15. left: 50%;
    16. margin-left: -120px;
    17. margin-top: -60px;
    18. width: 240px;
    19. height: 120px;
    20. background-color: #FFFFFF;
    21. display:none;
    22. }
    23. .upload-close{
    24. position: relative;
    25. height: 30px;
    26. background-color: rgb(234,234,234);
    27. }
    28. .upload-close span{
    29. position: absolute;
    30. right: 15px;
    31. line-height: 30px;
    32. cursor: pointer;
    33. }
    34. .upload-content,.confirm-cancel{
    35. margin-top: 15px;
    36. }
    37. .progress{
    38. position:relative;
    39. width:90%;
    40. height:22px;
    41. margin-left: 4.88888%;
    42. text-align: center;
    43. line-height: 22px;
    44. /*background-color: blue;*/
    45. border:1px solid #ccc;
    46. }
    47. .upload-text{
    48. position:absolute;
    49. z-index: 99999;
    50. color:red;
    51. }
    52. .uploaded{
    53. position:absolute;
    54. left:0;
    55. z-index: 9999;
    56. width:0%;
    57. height:100%;
    58. background-color: blue;
    59. color:#FFFFFF;
    60. }
    61. .confirm-cancel span{
    62. display:inline-block;
    63. width:60px;
    64. height:30px;
    65. line-height: 30px;
    66. text-align: center;
    67. /*cursor:pointer;*/
    68. background-color:#ccc;
    69. cursor:wait;
    70. }
    71. .confirm{
    72. /*background-color: rgb(111,197,293);*/
    73. margin-left:40%;
    74. }
    75. .cancel{
    76. /*background-color: rgb(175,194,211);*/
    77. margin-left: 10px;
    78. }

    为了模拟进度的显示,在这里用了两个span:

    1. <div class="progress">
    2. <span class="upload-text"></span>
    3. <span class="uploaded"></span>
    4. </div>

    上面一个是用来显示百分比的,下面一个用来填色的:

    1. .upload-text{
    2. position:absolute;
    3. z-index: 99999;
    4. color:red;
    5. }
    6. .uploaded{
    7. position:absolute;
    8. left:0;
    9. z-index: 9999;
    10. width:0%;
    11. height:100%;
    12. background-color: blue;
    13. color:#FFFFFF;
    14. }

    为了逼真,给填色的span设置背景色,其宽度就是进度的百分比,最后就用js来模拟进度的变化了:

    1. // 模拟进度
    2. function progressBar() {
    3. var max = 100;
    4. var init = 0;
    5. var uploaded;
    6. var test = setInterval(function() {
    7. init += 10;
    8. uploaded = parseInt((init / max * 100)) + '%';
    9. $uploadTextSpan.text(uploaded).next().css({
    10. width:uploaded
    11. });
    12. if (init === 100) {
    13. clearInterval(test);
    14. $uploadTextSpan.text('上传完成');
    15. $('.confirm-cancel span').css({
    16. cursor:'pointer'
    17. });
    18. $('.confirm').css({
    19. backgroundColor:'rgb(111,197,293)'
    20. });
    21. $('.cancel').css({
    22. backgroundColor:'rgb(175,194,211)'
    23. })
    24. $closeConfirmCancel.on('click',closeConfirmCancel);
    25. }
    26. else {
    27. $closeConfirmCancel.off('click',closeConfirmCancel);
    28. $('.upload-close-span').on('click',function(){
    29. clearInterval(test);
    30. closeConfirmCancel();
    31. });
    32. $uploadMask.on('click',function() {
    33. clearInterval(test);
    34. closeConfirmCancel();
    35. })
    36. }
    37. },1000);
    38. }

    其它次要代码就不贴了,最终效果可以戳:http://test92.sinaapp.com/upload/upload.html

    css下载:http://test92.sinaapp.com/upload/upload.css
    js下载:http://test92.sinaapp.com/upload/upload.js

    淡忘~浅思猜你喜欢

    JQuery总结三:DOM完全操作和动画

    JQuery总结四:Ajax和延迟对象

    JQuery总结二:DOM遍历和事件处理

    DOM笔记(六):怎么进行JQuery扩展?

    JQuery总结一:选择器归纳
    无觅

    转载请注明:淡忘~浅思 » jQuery实现上传进度条效果



沪ICP备19023445号-2号
友情链接