当前位置: 首页 > news >正文

wordpress建站优化做网站还是租用服务器

wordpress建站优化,做网站还是租用服务器,企业网站开发的目的,全网营销推广是什么上篇文章《一步一步实战HTML音乐播放器》中#xff0c;我用HTMLJS CSS的方式一步步实现了一个音乐播放器#xff0c;因为最近接触了一下React#xff0c;感觉挺不错的#xff0c;在这里我用React的方式实现一个同样的音乐播放器。 播放器功能 自动显示 专辑图片、歌手名、…上篇文章《一步一步实战HTML音乐播放器》中我用HTMLJS CSS的方式一步步实现了一个音乐播放器因为最近接触了一下React感觉挺不错的在这里我用React的方式实现一个同样的音乐播放器。 播放器功能 自动显示 专辑图片、歌手名、歌曲名、专辑名显示播放器进度条音乐播放暂停、上一曲、下一曲实时显示播放时间、播放总长度歌曲播放完后自动切换下一曲 播放器效果 React 环境准备 在这个小项目中不再使用传统的构建React的方式来搭建环境了这里用一种很方便的小工具来实现环境的搭建。 在Node.js环境下执行如下命令安装一下create-react-app并创建musicPlayer项目 npm install -g create-react-app create-react-app musicPlayer cd musicPlayer npm start 执行完后后工具会自动打开浏览器来显示这个项目的内容效果如下 这里我用到的是src目录首先把src目录的内容全部删除我们一点一点的来编写项目代码。 引入必要文件 因为系统默认将index.js作为入口文件所以我们要先在src下创建index.js文件所有代码也是在这个文件中编写。 先在index.js中引入一些必要的文件 import React from react; import ReactDOM from react-dom; import ./index.min.css; index.min.css是播放器的样式文件这里主要说React这个样式文件的详细说明可以参考 《一步一步实战HTML音乐播放器》 创建播放器容器组件 var Player React.createClass({render: function() { return (div classNameplayer{/* 各类子组建…… */}/div);}}); 子组建我们下面会一一创建这里先用做一下占位说明。 页面渲染 ReactDOM.render(Player /,document.getElementById(root) ); 容器内的各类组件 根据播放器结构创建如下组件 var Player React.createClass({render: function() { return (div classNameplayer{/* 播放器名称 */}div classNameheader音乐播放器.React版/div {/* 音乐信息 */}TrackInfo /{/* 播放进度条 */}Progress /{/* 播放控制 */}Controls /{/* 播放时间 */}Time /{/* 音频控件 */}audio idaudio/audio/div);}}); 初始化STATEPROPS 根据需求进行状态和属性的创建。 这里歌单就手动制作一个了把这个歌单写的props中用于系统的调用 getDefaultProps: function() {//歌单列表return{tracks: [{name: 元日,artists: [{name: 于文华,}],album: {name: 国学唱歌集,picUrl: http://p3.music.126.net/SR9eFEjRB0NsscxN7-fHMw/3344714372906000.jpg, },duration: 136829,mp3Url: http://m2.music.126.net/rUcfqqZbq7TIfJeAHfTrkw/3376600210116829.mp3},{name: 元日 ,artists: [{name: 清弄,}],album: {name: 热门华语261,picUrl: http://p4.music.126.net/ly2FJHh5-lYMdC3NZxvavQ/7714173580661848.jpg,},duration: 109000,mp3Url: http://m2.music.126.net/jwwZVlWJ78HEarft42uKUQ/7906588115920636.mp3},{name: 青龙·花木苍苍,artists: [{name: 五色石南叶,}],album: {name: 热门华语234,picUrl: http://p4.music.126.net/tHAfnugCElS93EDp5cHLIw/8909342719897560.jpg,},duration: 295575,mp3Url: http://m2.music.126.net/rnq_W32zFX_utQbBhE0xkg/8934631487358481.mp3}]} }, 接着初始化一下播放器的状态 //初始化状态getInitialState: function() {return{currentTrackLen: this.props.tracks.length, //歌单歌曲数currentTrackIndex: 0, //当前播放的歌曲索引默认加载第一首歌currentTime: 0, //当前歌曲播放的时间currentTotalTime: 0, //当前歌曲的总时间playStatus: true, //true为播放状态false为暂停状态 }}, 创建子组件 TrackInfo组件 var TrackInfo React.createClass({render: function() {return(divdiv classNamealbumPic style{{backgroundImage:url( this.props.track.album.picUrl )}}/divdiv classNametrackInfodiv classNamename{this.props.track.name}/divdiv classNameartist{this.props.track.artists[0].name}/divdiv classNamealbum{this.props.track.album.name}/div /div/div);} }); 在Player容器中的标签修改为 {/* 音乐专辑 */} TrackInfo track{this.props.tracks[this.state.currentTrackIndex]} / Progress组件 var Progress React.createClass({render: function(){return (div classNameprogress style{{width:this.props.progress}}/div)} }); 在Player容器中的标签修改为 {/* 播放进度条 */} Progress progress{this.state.currentTime / this.state.currentTotalTime * 100 %} / 通过当前时间和总时间来计算播放百分百。 Controls组件 var Controls React.createClass({render: function(){let className;if(this.props.isPlay true){className icon-pause;}else{className icon-play;}return (div classNamecontrolsdiv classNameplay onClick{this.props.onPlay}i className{className}/i/divdiv classNameprevious onClick{this.props.onPrevious}i classNameicon-previous/i/divdiv classNamenext onClick{this.props.onNext}i classNameicon-next/i/div/div )} }); 通过isPlay来控制播放按钮图标的显示。 在Player容器中的标签修改为 {/* 播放控制 */} Controls isPlay{this.state.playStatus} onPlay{this.play} onPrevious{this.previous} onNext{this.next} / Time组件 var Time React.createClass({timeConvert: function(timestamp){var minutes Math.floor(timestamp / 60);var seconds Math.floor(timestamp - (minutes * 60));if(seconds 10) {seconds 0 seconds;}timestamp minutes : seconds;return timestamp;}, render:function() {return(div classNametimediv classNamecurrent{this.timeConvert(this.props.currentTime)}/divdiv classNametotal{this.timeConvert(this.props.currentTotalTime)}/div/div );} }); timeConvert做为一个时间转换显示来用。 在Player容器中的标签修改为 {/* 播放时间 */} Time currentTime{this.state.currentTime} currentTotalTime{this.state.currentTotalTime} / audio标签 audio这里不需要在创建组件了修改一下在Player中的标记就行 {/* 音频控件 */} audio idaudio src{this.props.tracks[this.state.currentTrackIndex].mp3Url}/audio 事件处理方法 创建updatePlayStatus方法用于更新播放器的状态 //更新播放状态updatePlayStatus: function(){let audio document.getElementById(audio);if(this.state.playStatus){audio.play();}else{audio.pause();}//更新当前歌曲总时间this.setState({currentTotalTime: this.props.tracks[this.state.currentTrackIndex].duration / 1000});}, 创建三个播放控制按钮的事件方法 //播放事件处理play:function(){//这里有setState是异步的需要在回调中执行this.setState({playStatus:!this.state.playStatus}, (){this.updatePlayStatus();});},//上一曲事件处理previous:function(){if(this.state.currentTrackIndex - 1 0){alert(已经没有上一首了);}else{this.setState({currentTrackIndex:--this.state.currentTrackIndex},(){this.updatePlayStatus();});} },//下一曲事件处理next:function(){if(this.state.currentTrackIndex 1 this.state.currentTrackLen){alert(已经没有下一首了);}else{this.setState({currentTrackIndex:this.state.currentTrackIndex},(){this.updatePlayStatus();}); }}, 在页面渲染完成后需要执行一下updatePlayStatus方法根据React生命周期我们在DOM加载完成后执行一下这个方法 componentDidMount: function(){ this.updatePlayStatus();}, 好了各类事件的方法基本完成这里还需要一个监测的方法用来实时更新播放时间和自动下一曲 componentDidMount: function(){ this.updatePlayStatus();setInterval((){let audio document.getElementById(audio);this.setState({currentTime:audio.currentTime},(){if(~~this.state.currentTime ~~this.state.currentTotalTime){this.next();}});}, 300);}, 完整代码 //index.js import React from react; import ReactDOM from react-dom; import ./index.min.css;var Player React.createClass({getDefaultProps: function() {//歌单列表return{tracks: [{name: 元日,artists: [{name: 于文华,}],album: {name: 国学唱歌集,picUrl: http://p3.music.126.net/SR9eFEjRB0NsscxN7-fHMw/3344714372906000.jpg, },duration: 136829,mp3Url: http://m2.music.126.net/rUcfqqZbq7TIfJeAHfTrkw/3376600210116829.mp3},{name: 元日 ,artists: [{name: 清弄,}],album: {name: 热门华语261,picUrl: http://p4.music.126.net/ly2FJHh5-lYMdC3NZxvavQ/7714173580661848.jpg,},duration: 109000,mp3Url: http://m2.music.126.net/jwwZVlWJ78HEarft42uKUQ/7906588115920636.mp3},{name: 青龙·花木苍苍,artists: [{name: 五色石南叶,}],album: {name: 热门华语234,picUrl: http://p4.music.126.net/tHAfnugCElS93EDp5cHLIw/8909342719897560.jpg,},duration: 295575,mp3Url: http://m2.music.126.net/rnq_W32zFX_utQbBhE0xkg/8934631487358481.mp3}]} },//初始化状态getInitialState: function() {return{currentTrackLen: this.props.tracks.length, //歌单歌曲数currentTrackIndex: 0, //当前播放的歌曲索引默认加载第一首歌currentTime: 0, //当前歌曲播放的时间currentTotalTime: 0, //当前歌曲的总时间playStatus: true, //true为播放状态false为暂停状态 }},//更新播放状态updatePlayStatus: function(){let audio document.getElementById(audio);if(this.state.playStatus){audio.play();}else{audio.pause();}//更新当前歌曲总时间this.setState({currentTotalTime: this.props.tracks[this.state.currentTrackIndex].duration / 1000});},//播放事件处理play:function(){//这里有setState是异步的需要在回调中执行this.setState({playStatus:!this.state.playStatus}, (){this.updatePlayStatus();});},//上一曲事件处理previous:function(){if(this.state.currentTrackIndex - 1 0){alert(已经没有上一首了);}else{this.setState({currentTrackIndex:--this.state.currentTrackIndex},(){this.updatePlayStatus();});} },//下一曲事件处理next:function(){if(this.state.currentTrackIndex 1 this.state.currentTrackLen){alert(已经没有下一首了);}else{this.setState({currentTrackIndex:this.state.currentTrackIndex},(){this.updatePlayStatus();}); }},//DOM加载完componentDidMount: function(){ this.updatePlayStatus();setInterval((){let audio document.getElementById(audio);this.setState({currentTime:audio.currentTime},(){if(~~this.state.currentTime ~~this.state.currentTotalTime){this.next();}});}, 300);},render: function() { return (div classNameplayer{/* 播放器名称 */}div classNameheader音乐播放器.React版/div {/* 音乐信息 */}TrackInfo track{this.props.tracks[this.state.currentTrackIndex]} /{/* 播放进度条 */}Progress progress{this.state.currentTime / this.state.currentTotalTime * 100 %} /{/* 播放控制 */}Controls isPlay{this.state.playStatus} onPlay{this.play} onPrevious{this.previous} onNext{this.next} /{/* 播放时间 */}Time currentTime{this.state.currentTime} currentTotalTime{this.state.currentTotalTime} /{/* 音频控件 */}audio idaudio src{this.props.tracks[this.state.currentTrackIndex].mp3Url}/audio/div);} });var TrackInfo React.createClass({render: function() {return(divdiv classNamealbumPic style{{backgroundImage:url( this.props.track.album.picUrl )}}/divdiv classNametrackInfodiv classNamename{this.props.track.name}/divdiv classNameartist{this.props.track.artists[0].name}/divdiv classNamealbum{this.props.track.album.name}/div /div/div);} });var Progress React.createClass({render: function(){return (div classNameprogress style{{width:this.props.progress}}/div)} });var Controls React.createClass({render: function(){let className;if(this.props.isPlay true){className icon-pause;}else{className icon-play;}return (div classNamecontrolsdiv classNameplay onClick{this.props.onPlay}i className{className}/i/divdiv classNameprevious onClick{this.props.onPrevious}i classNameicon-previous/i/divdiv classNamenext onClick{this.props.onNext}i classNameicon-next/i/div/div )} });var Time React.createClass({timeConvert: function(timestamp){var minutes Math.floor(timestamp / 60);var seconds Math.floor(timestamp - (minutes * 60));if(seconds 10) {seconds 0 seconds;}timestamp minutes : seconds;return timestamp;}, render:function() {return(div classNametimediv classNamecurrent{this.timeConvert(this.props.currentTime)}/divdiv classNametotal{this.timeConvert(this.props.currentTotalTime)}/div/div );} });ReactDOM.render(Player /,document.getElementById(root) ); 发布项目 在Node.js环境下执行 npm run build 进行代码打包处理打包文件生成了项目目录下的build中执行如下命令可直接查看build打包后的内容 npm install -g pushstate-server pushstate-server build 浏览器中输入如下地址http://localhost:9000 好了用React来实现音乐播放器彻底完成因为React我也是刚接触不久代码中可能存在着缺点我这里就抛砖引玉了。 总体来说用React的思想来做东西确实挺好的逻辑上也变得比较清晰。 React 音乐播放器代码下载代码下载 博客名称王乐平博客 博客地址http://blog.lepingde.com CSDN博客地址http://blog.csdn.net/lecepin
http://wiki.neutronadmin.com/news/391664/

相关文章:

  • 电子商务网站建设与管理课后网站改版公司
  • 网站屏蔽搜索引擎阿里云服务器如何上传网站
  • 设置网站关键词建设人行官方网站
  • 旅游网站策划书常德论坛市民留言板
  • 提高网站流量的软文案例安徽振兴集团网站开发
  • asp网站开发有前景吗中国最好的室内设计公司
  • 国际电子商务网站建设连云港网站制作
  • 辽宁网站建设招标杭州app建设
  • 中山网站的建设网站开发综合实训报告
  • 俄罗斯女孩制作论文网站网站开发三大流行语言
  • 怎样在赶集微网站做微招聘信息wordpress导入sql失败
  • 商务网站建设 模板做网站公司哪家公司好
  • 惠城东莞网站建设网站建设招聘信息
  • 自己能不能做个网站wordpress中文验证码
  • 中国建设银行北京天竺支行网站怎么在百度上创建网站
  • 网站 目标wordpress主题安装后
  • 企业网站展示织梦网站转移
  • 广州黄埔区做网站培训机构甘肃网站开发企业
  • 做网站的新闻关键词点击工具
  • 网站备案ip地址段淘宝如何做推广
  • 提供秦皇岛网站建设哪家好wordpress 报表图形
  • 兴义做网站的帮别人起名 做ppt的网站
  • 阿克苏地区建设局网站网站的ip地址是什么
  • 建设电影播放网站制作图片用什么软件
  • 成都做网站设泰安高品质网站建设
  • 专业网站建设策划网络投放广告
  • 网站的建设需要考虑什么安徽建设学校官方网站
  • 深圳制作网站多少费用拱墅网站建设制作
  • 沧州模板建站平台网上购物管理系统设计与实现
  • 百度网盘可以做网站吗帮网站网站做推广被抓会判刑吗