【小河今学 | JavaScript + JQuery】音乐播放器4-音量调整、单曲循环、全部循环

08.18今天来完善音乐播放器的音量调整、单曲循环和全部循环功能。
本篇基于上一篇【小河今学 | JavaScript + JQuery】音乐播放器3-歌词轮播和进度条跳转功能实现

一、音量调整

首先最基本的,点击音量键和静音键的图标切换。
在这里插入图片描述在这里插入图片描述

			// 点击静音
            $('.vol em').click(function() {
                if($(this).hasClass('mute')){   // 如果当前是静音
                    $(this).removeClass('mute')
                    player.muted = false;
                }else{  // 如果当前不是静音
                    $(this).addClass('mute');
                    player.muted = true;
                    $('.vol a').css('display','none')
                }
            })

接着是调整音量的功能,当鼠标移到音量图标上方时,出现音量调节模块
在这里插入图片描述

			// 鼠标移到图标上方出现音量调节
            $('.vol em').mouseover(function(){
                $('.vol a').css('display','block');
            })

当我们点击时,我们首先要获得鼠标点击在页面的位置,从而与音量键的长度进行对比,调整音量长度和当前音量,与调整进度条方法类型

			// 音量调节点击
            $('.vol span').click(function(){
                // // 获取当前鼠标点击的位置
                // console.log(getMousePosition().top)
                // // console.log(1)
                // // 获取span标签的最上方位置
                // console.log($(this).offset().top)
                // // 获取当前点击的长度
                var long = (getMousePosition().top) - ($(this).offset().top)
                // 求点击长度占比
                var meter = long / $(this).height();
                var finalLong = 1 - meter;
                // 将进度条调整为点击的长度
                $('.vol i').height(finalLong * $(this).height());
                    
                // 将audio音量调整为对应的音量
                player.volume = finalLong;
                // console.log(finalLong)
                    
                // 改变数字
                $('.vol b').html(parseInt(finalLong * 100) + '%')
                    
                // 点击后音量调整键隐藏
                $('.vol a').css('display','none')

            }) 

二、单曲循环

单曲循环只需要用到audio自带的属性loop就行了。

			// 点击单曲循环,改变图标
            $('.s-loop').click(function() {
                if($(this).hasClass('son')){   // 如果当前是单曲循环
                    $(this).removeClass('son')
                    player.loop = false;
                    
                }else{  // 如果当前不是单曲循环
                    $(this).addClass('son');
                    $('.a-loop').removeClass('aon');

                    player.loop = true;
                }
            })

三、全部循环

这里是基础的换图标,注意当点开全部循环时,单曲循环要取消。

			// 全部循环
            $('.a-loop').click(function() {
                if($(this).hasClass('aon')){   // 如果当前是全部循环
                    $(this).removeClass('aon')
                    
                }else{  // 如果当前不是全部循环
                    $(this).addClass('aon');
                    $('.s-loop').removeClass('son');
                    player.loop = false;
                }
            })

当这一首歌结束后,播放下一首歌,所以我们要将方法写在player.addEventListener('ended',function () {}

			// 当一首歌播放完毕后,改变图标,同时清理计时器
            player.addEventListener('ended',function () {
                $('.pp').removeClass('pause');
                $('.pp').addClass('play');
                clearInterval(timer);
                clearInterval(songTime);
                // 判断当前是否是全部循环
                if($('.a-loop').hasClass('aon')){
                    // 播放下一首
                    // 获取当前播放的歌下标加一
                    var newIndex =  $('.click').index() + 1;
                    
                    // 如果获取的是最后一首歌的下标4,加1为5,作条件判断语句
                    newIndex = newIndex > 4 ? 0 : newIndex;
                    // console.log(newIndex)
                    // 将click赋给获得的新下标的li标签
                    $('.content li').eq(newIndex).addClass('click').siblings().removeClass('click');
                    // 调用play方法
                    play(newIndex)
                    // console.log(1)
                }
            })

以上就是全部内容了。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在JavaFX界面上呈现流动小河的动图,可以使用JavaFX的动画类来实现。具体步骤如下: 1.准备流动小河的动图素材,可以是一组连续的图片,或者是一个动画文件如GIF。 2.在JavaFX界面上添加一个ImageView组件,用于显示动图。 3.使用JavaFX的Timeline类创建一个时间轴动画,设置动画的时间间隔和每一帧显示的图片。 4.将动画添加到ImageView组件中,启动动画即可在界面上呈现出流动小河的动图。 以下是一个简单的JavaFX代码示例,展示如何实现流动小河的动图: ``` java import javafx.animation.Animation; import javafx.animation.KeyFrame; import javafx.animation.Timeline; import javafx.application.Application; import javafx.geometry.Rectangle2D; import javafx.scene.Scene; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.Pane; import javafx.stage.Stage; import javafx.util.Duration; public class RiverAnimation extends Application { private static final int WIDTH = 800; private static final int HEIGHT = 600; private static final int FRAME_COUNT = 8; private static final int FRAME_WIDTH = 200; private static final int FRAME_HEIGHT = 150; private static final int ANIMATION_DURATION = 1000; private static final String IMAGE_URL = "river.gif"; @Override public void start(Stage primaryStage) { Pane root = new Pane(); ImageView imageView = new ImageView(new Image(IMAGE_URL)); imageView.setViewport(new Rectangle2D(0, 0, FRAME_WIDTH, FRAME_HEIGHT)); Timeline animation = new Timeline( new KeyFrame(Duration.millis(ANIMATION_DURATION / FRAME_COUNT), event -> { int index = (int) (event.getTickTime() / ANIMATION_DURATION * FRAME_COUNT); int x = (index % (FRAME_WIDTH / FRAME_HEIGHT)) * FRAME_WIDTH; int y = (index / (FRAME_WIDTH / FRAME_HEIGHT)) * FRAME_HEIGHT; imageView.setViewport(new Rectangle2D(x, y, FRAME_WIDTH, FRAME_HEIGHT)); }) ); animation.setCycleCount(Animation.INDEFINITE); animation.play(); root.getChildren().add(imageView); Scene scene = new Scene(root, WIDTH, HEIGHT); primaryStage.setScene(scene); primaryStage.setTitle("River Animation"); primaryStage.show(); } public static void main(String[] args) { launch(args); } } ``` 在这个例子中,我们使用了一个GIF动画文件作为流动小河的动图素材,每一帧的大小为200x150,共有8帧。我们将ImageView组件的视口设置为第一帧,然后使用Timeline类创建一个时间轴动画,每1000ms切换一帧,直到播放完所有8帧,然后循环播放。最后将ImageView组件添加到Pane中,创建一个Scene并显示到主窗口中即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值