Jquery实现鼠标可拖动的进度条

news/2024/7/10 23:10:31 标签: jquery, 进度条, 鼠标可拖动进度条

效果图
这里写图片描述

html

<div class="progress">
    <div class="progress_bg">
        <div class="progress_bar"></div>
    </div>
    <div class="progress_btn"></div>
    <div class="text">0%</div>
</div>

css

.progress{position: relative; width:300px;margin:100px auto;}
.progress_bg{height: 10px; border: 1px solid #ddd; border-radius: 5px; overflow: hidden;background-color:#f2f2f2;}
.progress_bar{background: #5FB878; width: 0; height: 10px; border-radius: 5px;}
.progress_btn{width: 20px; height: 20px; border-radius: 5px; position: absolute;background:#fff; 
left: 0px; margin-left: -10px; top:-5px; cursor: pointer;border:1px #ddd solid;box-sizing:border-box;}
.progress_btn:hover{border-color:#F7B824;}

js

$(function(){
   var tag = false,ox = 0,left = 0,bgleft = 0;
    $('.progress_btn').mousedown(function(e) {
        ox = e.pageX - left;
        tag = true;
    });
    $(document).mouseup(function() {
        tag = false;
    });
    $('.progress').mousemove(function(e) {//鼠标移动
        if (tag) {
            left = e.pageX - ox;
            if (left <= 0) {
                left = 0;
            }else if (left > 300) {
                left = 300;
            }
            $('.progress_btn').css('left', left);
            $('.progress_bar').width(left);
            $('.text').html(parseInt((left/300)*100) + '%');
        }
    });
    $('.progress_bg').click(function(e) {//鼠标点击
        if (!tag) {
            bgleft = $('.progress_bg').offset().left;
            left = e.pageX - bgleft;
            if (left <= 0) {
                left = 0;
            }else if (left > 300) {
                left = 300;
            }
            $('.progress_btn').css('left', left);
            $('.progress_bar').animate({width:left},300);
            $('.text').html(parseInt((left/300)*100) + '%');
        }
    });
});

实现原理

  首先是用mousedown()鼠标按下事件保存一个状态值,mouseup()鼠标抬起事件取消该状态,再同时配合mousemove()鼠标移动事件,实现按住拖动的效果。

在鼠标移动的同时去改变精度条的长度和按钮的相对左部的距离。

  然后就是距离的计算,主要利用的就是pageX() 属性。pageX是鼠标指针相对于文档的左边缘的位置。在鼠标按下是就记录相对位置,在鼠标移动后就可求出鼠标移动的距离。从而改变按钮位置和进度条长度。
  原文链接:http://www.cnblogs.com/Strom-HYL/archive/2017/06/21/7028531.html


http://www.niftyadmin.cn/n/696334.html

相关文章

GPS坐标转换成百度坐标和火星坐标

WGS坐标系是国际通用的一种地心坐标系&#xff0c;WGS本身也有多个版本&#xff08;不赘述了&#xff09;&#xff0c;GCJ-02是国内官方采用的一种坐标系&#xff0c;国内许多坐标系也是基于GCJ-02变种而来的&#xff0c;比如百度坐标系BD-09。就这么简单介绍一下吧&#xff0c…

elasticsearch 工具类_[译] Elasticsearch 新手指南

原文地址&#xff1a;The Beginners Guide to Elasticsearch原文作者&#xff1a;Landy Simpson译文出自&#xff1a;掘金翻译计划本文永久链接&#xff1a;https://github.com/xitu/gold-miner/blob/master/article/2020/the-beginners-guide-to-elasticsearch.md译者&#xf…

信号调制疑问_苹果隐瞒 iPhone 信号差,被索赔 500 万美元

说到 iPhone&#xff0c;很多人都认为它是完美的。苹果 A 系列处理器几乎地表最强的移动处理性能&#xff0c;iOS 也几乎是优化最到位的手机系统&#xff0c;软硬结合&#xff0c;很多人购买 iPhone 不外乎一个安心使用。然而&#xff0c;在 iPhone 上有一个公认的缺点&#xf…

log4j日志配置(超详细)

一、Log4j简介 Log4j有三个主要的组件&#xff1a;Loggers(记录器)&#xff0c;Appenders (输出源)和Layouts(布局)。这里可简单理解为日志类别&#xff0c;日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松地记录信息的类型和级别&#xff0c;并可以在运行…

光谱 波长_拉曼光谱仪如何选择合适的激发波长?

拉曼光谱仪的激发波长种类繁多&#xff0c;例如奥谱天成常规提供的波长有266nm,532nm,633nm,785nm,830nm,1064nm。面对如此繁多的激发波长应该如何选择呢&#xff1f;表1 激发波长选择那么红外激发波长的优劣势&#xff1f;近红外的激发波长一般在700nm以上&#xff0c;常见的有…

animejs走马灯_web前端攻城狮超爱的JS动画库插件—anime.js

作为一名web前端攻城狮&#xff0c;除了完成日常业务逻辑处理之外&#xff0c;也会去注重一些用户体验交互的问题。特别是如今web前端的发展很快&#xff0c;很多优秀js插件层出不穷。对于web前端开发者&#xff0c;也要会利用这些现有的js插件&#xff0c;提升自己项目的交互体…

单利模式(Singleton)

单利模式的优缺点和使用场景 一、首先介绍一下单例模式&#xff1a; 单例模式&#xff08;Singleton&#xff09;&#xff0c;也叫单子模式&#xff0c;是一种常用的软件设计模式。在应用这个模式时&#xff0c;单例对象的类必须保证只有一个实例存在。许多时候整个系统只需…

Java工厂模式(Factory)

工厂模式定义&#xff1a;提供创建对象的接口。 为何使用工厂模式 工厂模式是我们最常用的模式了&#xff0c;著名的Jive论坛&#xff0c;就大量使用了工厂模式&#xff0c;工厂模式在Java程序系统可以说是随处可见。 为什么工厂模式是如此常用&#xff1f;因为工厂模式就相…