jQuery抛物线运动实现方法(附完整demo源码下载)

以下是详细讲解“jQuery抛物线运动实现方法(附完整demo源码下载)”的完整攻略。

标题

介绍

本文将介绍如何使用jQuery实现抛物线运动效果,抛物线运动效果在页面中应用广泛,比如购物车飞入效果、搜索框提示效果等等。

实现方法

第一步:引入jQuery和Bezier插件

我们需要引入jQuery和Bezier插件,Beizer插件用于实现曲线运动效果,可以在GitHub中下载。

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="./jquery.bezier.js"></script>

第二步:定义起点和终点

我们需要定义起点和终点的坐标,以及上抛的高度和拋物线的曲率。

var start = {
    x: $('#start').offset().left + $('#start').outerWidth() / 2 - 20,
    y: $('#start').offset().top + $('#start').outerHeight() / 2 - 20
};

var end = {
    x: $('#end').offset().left + $('#end').outerWidth() / 2 - 20,
    y: $('#end').offset().top + $('#end').outerHeight() / 2 - 20
};

var h = 100 // 上抛的高度
var curve = $.bezier(start, {x: start.x, y: end.y + h}, end); // 计算拋物线路径

第三步:实现拋物线运动效果

我们使用定时器不断更新小球的位置,根据当前时间和曲线的计算公式计算小球的位置,并使用CSS设置小球的位置。

var ball = $('<div>').addClass('ball');
$('body').append(ball);

var start_time = null;
var duration = 1000; // 动画持续时间

requestAnimationFrame(function step(timestamp) {
    if (!start_time) start_time = timestamp;
    var progress = timestamp - start_time;
    if (progress > duration) progress = duration;
    var x = curve(progress / duration).x;
    var y = curve(progress / duration).y;

    // 小球运动的位置
    ball.css({
        left: x + 'px',
        top: y + 'px'
    });

    if (progress < duration) {
        requestAnimationFrame(step);
    }
});

第四步:定义CSS

最后,我们需要定义CSS样式,给小球添加样式。

.ball {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background-color: red;
    position: absolute;
}

示例说明

示例1:购物车飞入效果

在购物车页面中,当用户添加到购物车时,可以实现购物车飞入的效果。我们可以使用上述方法实现。

var start = {
    x: $('.add-to-cart').offset().left + $('.add-to-cart').outerWidth() / 2 - 20,
    y: $('.add-to-cart').offset().top + $('.add-to-cart').outerHeight() / 2 - 20
};

var end = {
    x: $('.cart-icon').offset().left + $('.cart-icon').outerWidth() / 2 - 20,
    y: $('.cart-icon').offset().top + $('.cart-icon').outerHeight() / 2 - 20
};

var h = 100 // 上抛的高度
var curve = $.bezier(start, {x: start.x, y: end.y + h}, end); // 计算拋物线路径

var ball = $('<div>').addClass('ball');
$('body').append(ball);

var start_time = null;
var duration = 1000; // 动画持续时间

requestAnimationFrame(function step(timestamp) {
    if (!start_time) start_time = timestamp;
    var progress = timestamp - start_time;
    if (progress > duration) progress = duration;
    var x = curve(progress / duration).x;
    var y = curve(progress / duration).y;

    // 小球运动的位置
    ball.css({
        left: x + 'px',
        top: y + 'px'
    });

    if (progress < duration) {
        requestAnimationFrame(step);
    }
});

setTimeout(function(){
    ball.remove();
}, duration);

示例2:搜索框提示效果

在搜索框中,当用户输入关键字时,可以显示提示内容,并且提示内容飞入的效果。我们也可以使用上述方法实现。

var start = {
    x: $('.search-box').offset().left + $('.search-box').outerWidth() / 2 - 20,
    y: $('.search-box').offset().top + $('.search-box').outerHeight() / 2 - 20
};

var end = {
    x: $('.search-result').offset().left + $('.search-result').outerWidth() / 2 - 20,
    y: $('.search-result').offset().top + $('.search-result').outerHeight() / 2 - 20
};

var h = 100 // 上抛的高度
var curve = $.bezier(start, {x: start.x, y: end.y + h}, end); // 计算拋物线路径

var ball = $('<div>').addClass('ball');
$('body').append(ball);

var start_time = null;
var duration = 1000; // 动画持续时间

requestAnimationFrame(function step(timestamp) {
    if (!start_time) start_time = timestamp;
    var progress = timestamp - start_time;
    if (progress > duration) progress = duration;
    var x = curve(progress / duration).x;
    var y = curve(progress / duration).y;

    // 小球运动的位置
    ball.css({
        left: x + 'px',
        top: y + 'px'
    });

    if (progress < duration) {
        requestAnimationFrame(step);
    }
});

setTimeout(function(){
    ball.remove();
}, duration);

以上就是实现“jQuery抛物线运动实现方法”的完整攻略,其中包含了两个示例说明。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jQuery抛物线运动实现方法(附完整demo源码下载) - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • jQuery实现input[type=file]多图预览上传删除等功能

    题目要求讲解 “jQuery实现input[type=file]多图预览上传删除等功能”,首先我们需要明确一下这个需求具体包括哪些功能: 在页面上添加一个input[type=file]控件,支持上传多张图片 选择图片后,实现图片的预览功能 提供对所选图片进行删除的功能 上传图片到服务器 上传成功后,提示用户上传成功,或者在页面中显示上传后的图片 下面我们逐…

    jquery 2023年5月27日
    00
  • jQWidgets jqxResponsivePanel宽度属性

    “jQWidgets jqxResponsivePanel宽度属性”是用于响应式设计的一个组件,它可以根据屏幕大小自动改变宽度,并且可以通过设置最小和最大宽度的方式进行控制。 基本使用 首先,我们需要引入jQWidgets库和样式文件: <link rel="stylesheet" href="https://jqwidg…

    jquery 2023年5月11日
    00
  • jQuery UI进度条禁用选项

    jQuery UI进度条禁用选项攻略 jQuery UI进度条是一个强大的JavaScript库,它提供了许多选项和功能,以便创建自定义的进度条。其中,禁用选项用于禁用进度条。以下是详细攻略,含两个示例,演示如何使用禁用选项: 步骤1:引入库 在使用之前,需要先在HTML中引入jQuery库和jQuery UI库。可以通过以下方式引入: <link r…

    jquery 2023年5月9日
    00
  • jQuery UI Selectable classes选项

    以下是关于 jQuery UI Selectable classes 选项的详细攻略: jQuery UI Selectable classes 选项 jQuery UI Selectable classes 选项用于指定选择框的 CSS 类。该选项可以通过 selectable() 方法调用。 语法 $( ".selector" ).s…

    jquery 2023年5月11日
    00
  • jQWidgets jqxGrid getcelltext()方法

    以下是关于“jQWidgets jqxGrid getcelltext()方法”的完整攻略,包含两个示例说明: 简介 jqxGrid 控件 getcelltext() 方法用于获取表格中指定单元格的文本内容。该方法可以用于获取单元的文本内容,以便进行处理。 完整攻略 以下是 jqxGrid 控件 getcelltext() 方法的完整攻略: 获取指定单元格的…

    jquery 2023年5月10日
    00
  • jquery $(document).ready() 与window.onload的区别

    jQuery的 $(document).ready() 与window.onload的区别是前者在DOM结构渲染完毕后就会执行,后者则需要等待页面上所有的资源(如图片、js文件等)完全加载后才会执行。下面详细介绍它们的区别和使用方法。 $(document).ready() 与 window.onload 的区别 $(document).ready() $(…

    jquery 2023年5月27日
    00
  • jQWidgets jqxListBox filterDelay属性

    jQWidgets jqxListBox filterDelay属性详解 jQWidgets是一个基于jQuery的UI组件库,提供了丰富UI组件工具包。jqxListBox是其中之一。本文将详细介绍jqxListBox的filterDelay属性,包括定义、语法和示例。 filterDelay属性的定义 jqxListBox的filterDelay属性用于…

    jquery 2023年5月10日
    00
  • jQuery调用ajax请求的常见方法汇总

    下面是jQuery调用ajax请求的常见方法汇总的完整攻略。 1. 基本语法 jQuery调用ajax请求的基本语法如下: $.ajax({ url: ‘your-url’, type: ‘your-method’, data: ‘your-data’, dataType: ‘your-data-type’, success: function(data) …

    jquery 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部