waypoints的使用

一、最简易的使用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>waypoints的最简单使用</title>
    <!-- 定义css样式 -->
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        #example-basic{
            height: 500px;
            text-align: center;
        }
    </style>
    
    <!-- 引入js文件 -->
    <script src="js/jquery-3.0.0.min.js"></script>
    <script src="js/jquery.waypoints.js"></script>
    <script src="js/jquery-ui.min.js"></script>
    
    <!-- 启动waypoints -->
    <script>
    $(function () {
        $('#example-basic').waypoint(function() { 
            console.log("hi,example-basic,你的顶部碰到了浏览器窗口的顶部!");//测试打开web调试器,看控制台信息
        });
    });
    //注:无论是鼠标向上或向下只要该元素的顶部碰到浏览器的顶部都会触发waypoints事件
    </script>

</head>
<body>
    <div style="background:#ccc;height:1800px;">one div</div>
    <div id="example-basic">example-basic.</div>
    <div style="background:#ccc;height:1800px;">one div</div>
</html>
 

二、能检测鼠标滚动方向的基本应用

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>检测鼠标滚动方向</title>
    
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        #example-basic{
            height: 500px;
            text-align: center;
        }
        .in{
            font-size: 36px;
            color: #ff0;
            background:red;
            transition:all 0.5s;
        }
    </style>

    <script src="js/jquery-3.0.0.min.js"></script>
    <script src="js/jquery.waypoints.js"></script>
    <script src="js/jquery-ui.min.js"></script>

    <script>
    $(function () {
        $('#example-basic').waypoint(
            function(direction){ 
                if(direction=="down"){
                    $('#example-basic').addClass("in");
                    $('#example-basic').html("你在向下滚动!")
                }else{
                    $('#example-basic').removeClass("in");
                    $('#example-basic').html("你在向上滚动!")
                }
            },//第1个参数为waypoints事件响应时所执行的代码,是一个匿名函数即可
            {
                offset:'50%'
            }//第2个参数为偏移量,本例即该div到窗口高度一半时触发
            );
    });
    </script>
</head>
<body>
    <div style="background:#ccc;height:1800px;">one div</div>
    <div id="example-basic">example-basic.</div>
    <div style="background:#ccc;height:1800px;">one div</div>
</html>

三、鼠标滚动监听加动画效果1

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>加下动画效果的</title>
    
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        div{
            background: #eee;
        }
        .banner{
            width: 1100px;
            margin: 0 auto;
        }
        .title{
            height: 100px;
            background: #9f9;
        }
        .lt{
            position: relative;
            height: 400px;
            border:1px dotted #999;
        }

        .lt_left{
            position: absolute;
            width: 500px;
            height: 300px;
            left: -20%;
            top: 0;
            margin-left: -550px;
            background: #f99;
        }
        .lt_right{
            position: absolute;
            width: 500px;
            height: 300px;
            left: 120%;
            top: 0;
            margin-left: 50px;
            background: #99f;
        }
    </style>

    <script src="js/jquery-3.0.0.min.js"></script>
    <script src="js/jquery.waypoints.js"></script>
    <script src="js/jquery-ui.min.js"></script>

    <script>
    $(function () {
        //获取运动的盒子
        var boxElemets = $('.boxaction');
        $.each(boxElemets, function() {
            $(this).attr('init', 'false');
        }); 
        
        //判断是否出现在浏览器界面里面!
        function isScrolledIntoView(elem) { 
            var docViewTop = $(window).scrollTop();
            var docViewBottom = docViewTop + $(window).height();
            var elemTop = $(elem).offset().top;
            if (elemTop + 50 < docViewBottom) {
                return true
            } else {
                return false
            }
        }

        //定义动画
        function animateInit() {
            $.each(boxElemets, function() {
                if ($(this).attr('init') == 'false' && isScrolledIntoView($(this))) { //没有显示过且刚出现在浏览器界面
                    $(this).attr('init', 'true');
                    $(this).animate({
                        'left': '50%'
                    }, 1000, 'easeOutCubic');
                }
            });
        }

        animateInit(); //先执行一次animateInit
        $(window).scroll(function() { //滑动执行animateInit
            animateInit();
        });
    })
    </script>
</head>
<body>
    <div style="background:#ccc;height:1800px;text-align:center;">top div</div>
    <div class="banner">
        <div class="title">这是标题</div>
        <div class="lt">
            <div class="lt_left boxaction">这是左边盒子</div>
            <div class="lt_right boxaction">这是右边盒子</div>
        </div>
    </div>
</body>
</html>
 

 

四、鼠标滚动监听加动画效果2

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>加下动画效果的</title>
    
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        div{
            background: #eee;
        }
        .banner{
            width: 1100px;
            margin: 0 auto;
        }
        .title{
            height: 100px;
            background: #9f9;
        }
        .lt{
            position: relative;
            height: 400px;
            border:1px dotted #999;
            overflow: hidden;
        }

        .l_box{
            position: absolute;
            width: 500px;
            height: 300px;
            left: -20%;
            top: 0;
            margin-left: -550px;
            background: #f99;
            opacity: 0;
            transition:all 1s;
        }
        .r_box{
            position: absolute;
            width: 500px;
            height: 300px;
            left: 120%;
            top: 0;
            margin-left: 50px;
            background: #99f;
            opacity: 0;
            transition:all .3s;
        }
        .active{
            left: 50%;
            opacity: 1;
            transition:all .7s;
        }
        
    </style>

    <script src="js/jquery-3.0.0.min.js"></script>
    <script src="js/jquery.waypoints.js"></script>
    <script src="js/jquery-ui.min.js"></script>

    <script>
    $(function () {
        $(".banner").waypoint(
            function(direction){
                var active_boxs = $('.active_box');
                if(direction=="down"){
                    $.each(active_boxs, function() {
                        $(this).addClass("active");
                    }); 
                }else{
                    $.each(active_boxs, function() {
                        $(this).removeClass("active");
                    }); 
                }
            },
            {offset:'50%'}
        );
    });
    </script>
</head>
<body>
    <div style="background:#ccc;height:1800px;text-align:center;">top div</div>
    <div class="banner">
        <div class="title">这是标题</div>
        <div class="lt">
            <div class="l_box active_box">这是左边盒子</div>
            <div class="r_box active_box">这是右边盒子</div>
        </div>
    </div>
</body>
</html>
 
### 使用 Waypoints 的基本概念 在 Simulink 中,`waypoints` 是一种用于描述路径规划的关键点集合。这些关键点通常被用来表示机器人或其他动态系统的运动轨迹。通过设置 `waypoints`,可以实现复杂的动作控制,例如机械臂的拾取和放置操作[^2]。 以下是有关如何在 MATLAB 和 Simulink 中使用 `waypoints` 的具体方法: --- ### 创建 Waypoints 数据 可以通过手动定义或者从外部文件加载的方式创建 `waypoints` 数据。以下是一个简单的例子,展示如何保存 `waypoints` 到 `.mat` 文件中: ```matlab % 定义时间戳和对应的关节角度位置 tWaypoints = [0, 1, 2, 3]; % 时间序列 (秒) qWaypoints = [ 0, pi/4, pi/2; % 关节1的角度变化 0, pi/6, pi/3; % 关节2的角度变化 ]; % 将数据保存到 .mat 文件 save('lbr_trajectory.mat', 'tWaypoints', 'qWaypoints'); ``` 上述代码展示了如何将时间和对应的位置信息存储起来以便后续调用[^1]。 --- ### 在 Simulink 中应用 Waypoints 为了在 Simulink 中利用 `waypoints` 实现复杂动作,可以按照以下方式配置模型: #### 1. **导入 Waypoints** - 如果已经生成了 `waypoints` 数据(如上所示),可以在 Simulink 模型中通过 From Workspace 或其他模块读取该数据。 - 假设 `tWaypoints` 表示时间轴,而 `qWaypoints` 表示各个时刻下的目标状态,则可以直接将其作为输入信号传递给控制系统。 #### 2. **插值处理** - 对于离散的时间步长之间的平滑过渡,推荐采用插值技术来计算中间的状态值。MATLAB 提供了多种插值函数,比如 `interp1()` 可以完成这一任务。 ```matlab tQuery = linspace(0, max(tWaypoints), 100); % 插值查询点 qInterpolated = interp1(tWaypoints, qWaypoints.', tQuery).'; % 平滑插值 ``` #### 3. **集成至动力学仿真环境** - 结合 Simscape Multibody 工具箱中的刚体组件,能够构建完整的物理建模框架[^4]。例如,对于 ABB YuMi 这样的双臂协作机器人,可基于其实际参数设定虚拟原型,并验证由 `waypoints` 驱动的动作逻辑是否合理。 #### 4. **优化与调试** - 当初步测试完成后,可能还需要进一步调整控制器增益或者其他算法细节以提升整体表现效果。如果发现某些特定条件下存在偏差现象,则可通过修改参考轨迹或增强鲁棒性措施加以改进[^5]。 --- ### 示例代码片段 下面给出一段综合性的脚本样例,演示整个流程的核心部分: ```matlab function sim_waypoint_example() clc; clear; %% Step 1: Define Trajectory Data tWaypoints = [0, 1, 2, 3]; qWaypoints = [ 0, pi/4, pi/2; 0, pi/6, pi/3; ]; %% Step 2: Interpolate Between Points tQuery = linspace(min(tWaypoints), max(tWaypoints), 100); qInterpolated = interp1(tWaypoints, qWaypoints.', tQuery).'; %% Step 3: Save Results For Use In Simulink Model save('trajectory_data.mat', 'tQuery', 'qInterpolated'); disp('Trajectory data has been saved successfully.'); end ``` 此程序会生成适合导入 Simulink 的连续化轨迹资料集。 --- ### 注意事项 - 确保所选采样频率足够高从而获得精确的结果; - 考虑加入约束条件防止超出硬件能力范围内的指令发出; - 不同类型的设备可能会有不同的接口协议需提前查阅文档确认兼容情况。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值