关于头像裁剪

1.上传图片的裁剪,并没有采用后端裁剪,而采用前端裁剪,基于cropbox进行了修改
编码使用一个隐藏的input框存放 存放到数据库
2.本来想在后端解析base64编码重新生成文件,后来发现并没有必要,如果图片不是很大直接保存字符串到数据库就行了,这样还可以少一些http请求,不过缺点是Ie6不支持date:url的解析
3.图片变成base64编码之后,保存在数据库的字符长度高达16W
个字符,后来想办法改成jpeg+中等保存之后,长度变成3W,可以接受
下面从代码说起 界面显示
如图所示,3个部分,一个用于显示图片 一个是按钮 右边的是图片裁剪之后的图,有3张 分别是180*180 128*128 64*64 就不多说了 

 1 1 <div class="imageBox">
 2  2
 3  3     <div class="thumbBox"></div>
 4  4
 5  5     <div class="spinner"  style="display: none"></div>
 6  6
 7  7   </div>
 8  8
 9  9   <div class="action">
10 10
11 11     <div class="new-contentarea tc"> <a href="javascript:void(0)" class="upload-img">
12 12
13 13       <label for="upload-file">请先选择图片...</label>
14 14
15 15       </a>
16 16
17 17       <input type="file" class="" name="upload-file" id="upload-file" />
18 18
19 19     </div>
20 20
21 21
22 22     <input type="button"  id="btnCrop" class="Btnsty_peyton" value="✔">
23 23
24 24     <input type="button" id="btnZoomIn" class="Btnsty_peyton" value="+"  >
25 25
26 26     <input type="button" id="btnZoomOut" class="Btnsty_peyton" value="-" >
27 27
28 28     <input type="button"  class="Btnsty_peyton"  value="✘" οnclick="cancel_shield()">
29 29   </div>
30 30
31 31   <div class="cropped"></div>
32 32
33 33 </div>

上图源码

 关于JS的
注意42行

swal("操作成功!", "图片上传喽!", "success"); 这是用了sweet-alert的弹窗效果,要注意引入sweet-alert的js文件对用户上传上来的图片进行裁剪 然后转成Base64 字符串分别保存在56 58 60行的img src里通过apepnd标签添加到
<div class="cropped"></div> 预留的这个DIV里
40     $('#btnCrop').on('click', function(){
41
42     swal("操作成功!", "图片上传喽!", "success");
43     $("#IconMessage").html("头像选择成功,再次点击更换头像");
44     var s=$("#haha1").attr("src");
45     $("#hideInput").val(s);
46     cancel_shield();
47     })然后将这个SRC放到表单里的隐藏INPUT框里,提交到到后台传到数据库,数据里保存的是BASE64编码,对上传进行了一定的限制之后 一般字符串大小为3W~5W的样子 如图

直接用img的src 可以在浏览器解析出来

 1  1 $(window).load(function() {
 2  2     var options =
 3  3
 4  4     {
 5  5
 6  6         thumbBox: '.thumbBox',
 7  7
 8  8         spinner: '.spinner',
 9  9
10 10         imgSrc: ''
11 11
12 12     }
13 13
14 14     var cropper = $('.imageBox').cropbox(options);
15 15
16 16     var img="";
17 17
18 18     $('#upload-file').on('change', function(){
19 19
20 20         var reader = new FileReader();
21 21
22 22         reader.onload = function(e) {
23 23
24 24             options.imgSrc = e.target.result;
25 25
26 26             cropper = $('.imageBox').cropbox(options);
27 27
28 28             getImg();
29 29
30 30         }
31 31
32 32         reader.readAsDataURL(this.files[0]);
33 33
34 34         this.files = [];
35 35
36 36 //        getImg();
37 37
38 38     })
39 39
40 40     $('#btnCrop').on('click', function(){
41 41
42 42     swal("操作成功!", "图片上传喽!", "success");
43 43     $("#IconMessage").html("头像选择成功,再次点击更换头像");
44 44     var s=$("#haha1").attr("src");
45 45     $("#hideInput").val(s);
46 46     cancel_shield();
47 47     })
48 48
49 49
50 50     function getImg(){
51 51
52 52         img = cropper.getDataURL();
53 53
54 54         $('.cropped').html('');
55 55
56 56         $('.cropped').append('<img src="'+img+'" align="absmiddle"  style="width:180px;margin-top:4px;border-radius:180px;box-shadow:0px 0px 12px #7E7E7E;"><p>180px*180px</p>');
57 57
58 58         $('.cropped').append('<img src="'+img+'" align="absmiddle"  id="haha1" style="width:128px;margin-top:4px;border-radius:128px;box-shadow:0px 0px 12px #7E7E7E;"><p>128px*128px</p>');
59 59
60 60         $('.cropped').append('<img src="'+img+'" align="absmiddle" style="width:64px;margin-top:4px;border-radius:64px;box-shadow:0px 0px 12px #7E7E7E;" ><p>64px*64px</p>');
61 61
62 62         }
63 63
64 64
65 65
66 66     $(".imageBox").on("mouseup",function(){
67 67
68 68          getImg();
69 69
70 70           });
71 71
72 72
73 73     $('#btnZoomIn').on('click', function(){
74 74
75 75         cropper.zoomIn();
76 76
77 77     })
78 78
79 79     $('#btnZoomOut').on('click', function(){
80 80
81 81         cropper.zoomOut();
82 82
83 83     })
84 84
85 85 });

JS控制代码

跨音乐播放音乐

关于jframe的逻辑判断
首先一共有三个窗口 一个父窗口 两个子窗口 子窗口分别叫做显示框(给用户看的) 和音乐框(用来播放歌曲的)
总窗口-- 写一个公用方法 效果是将显示框的数值传递到音乐框(通过调用音乐框里的方法)
显示框:里面的按钮经过一个ajax 回调函数的时候调用 父窗口的公用方法,传递一个参数(歌曲列表playList)
父窗口: 调用音乐框里改变音乐列表的方法(传递一个歌曲列表参数playList)
显示框用于回调函数的方法(用于调用父方法,传递歌曲列表)
function passMusic(obj){top.PassData(obj)}

父方法里的方法是(调用音乐框方法,传递歌曲列表)
function PassData(obj){obj.window.frames["音乐框"].changeMusic();}

音乐框里的方法是(根据传递过来的歌曲列表进行改变)
function changeMusic(obj){playlist=obj}

然后是音乐列表的坑,先是直接把playlist直接remove掉了,找了半天没弄明白为什么不出列表,后来调用浏览器窗口才发现了问题所在,问题很快就解决了。
 
<a href="albumAction!goIntoAlbumDetails.action?dvd.dvdName='${d.dvdName }'">${d.dvdName }</a>
 

在JS中调用EL表达式的要加上单引号 
但是这里是A标签 传值 就不用加了,不然后台的值会多个引号
根据名字查数值可能会查不到
发现两边多了个单引号...
另外一个关于A标签调用JS 不会影响页面GIF 同时又能保持A标签
在HTML页面的特性的方法
 
<a οnclick="javascript:playSong('${d.dvdId}','${d.dvdIconSrc}');return false;" href="#" class="img">
 

关于分页 有时候看起来效果简单 做起来不是很容易
首先将样式写在class里面,对页码绑定js,让其被点中的时候变成被
选择的绿色,同时其他的变成未选择的白色
            $("div[class='mod_page_nav js_pager']>a[class='js_pageindex'],div[class='mod_page_nav js_pager']>a[class='current']").click(function(){$("div[class='mod_page_nav js_pager'] a[class='current']").attr('class','js_pageindex');$(this).attr('class','current');});

 

当前按钮变成被选中的clas 'current'类,同时其余的按钮变成未变选择的'js_pageindex' 类
            /*下一页的绑定*/$("a[class='next js_pageindex']").click(function(){$("a[class='current']").next("a[class='js_pageindex']").attr('class','current');$("a[class='current']").first().attr('class','js_pageindex');});/*上一页的绑定*/$("a[class='previous js_pageindex']").click(function(){$("a[class='current']").prev("a[class='js_pageindex']").attr('class','current');$("a[class='current']").last().attr('class','js_pageindex');});

接着对上一页 下一页的按钮进行绑定 让current类也就是当前被选择的页码变成未选择 ,同时根据上一页下一页让对应的页码被选择
 
本来的逻辑是这样的,但是事实上在做的时候发现,让current被选择的这个按钮变成未选择之后,之后的操作不管上一页还是下一页 都没有效果 因为上一页下一页都是根据current的位置来判断的 而这个current类已经被我删除了 所以操作不行
 
于是就改成了上面的代码, 比如说下一页的操作,先根据current类,将下一个按钮变成已选择

大概长这样子,先将第二页选中,接着选中所有被选中的按钮,将第一个按钮给变成未选择的
也就是上图所示的这行代码  $("a[class='current']").first().attr('class','js_pageindex');

于是效果就完成了 

只有2被选中
上一页同理 ,本以为这样就结束了,但是又发现一个问题就是用户点击了不同页码,页面发生了跳转
而我页面每次重新载入之后 默认的初始选中都是第一页
也就是说 上面的这些效果在页面被点击之后就被重置了,说白了就是没什么用 于是乎 将当前页码currentPage放入session中,并用onload js函数 每次加载的时候对这些选项进行初始化
因为后台默认给currentPage一个1的默认值 
发现前台代码就很简单了
            var currentPage="${currentPage}";$("div[class='mod_page_nav js_pager']>a").eq(currentPage).attr('class','current');

这样就完成了分页的页面效果

总结

一开始都不准备做分页的,因为觉得很简单,但事实上,只有自己去做才发现有些小效果并不是看起来那么容易实现的
 
缺点 很多问题没有来得及记录,有些问题自己都忘记当时是怎么解决的了 要想一会才能想出来 
比如级联AJAX的问题 我忘记我怎么解决的了 好像是选择了传对象过去解决的 早上别人提起的时候我想了半天都没记起来 因为这个问题我也碰到了
 
项目开的有点大了 时间不太够 然后数据库设计的时候还是有点问题 中间项目做到一半发现少了一些字段 比如歌曲 歌手的多重分类 是有很多个分类的
很多功能都没做 只是做了个DEMO 还有这次项目想做的
多利用浏览器缓存去处理一些数据 比如说历史搜索记录之类的
还有搜索的利用拼音搜索 歌手页面的那种点击按钮实现多条件搜索包括分页 
就把前台JS效果写好了 后台没时间去实现
有时间的话 最好重新整理一下 整个项目的结构 做到后面已经明显发现结构什么的可能有点开始混乱了 没有前面的那么清晰 就拿命名来说吧 Song SongList Singer SingerList 之类名词很相近 然后有些是排行榜的 有些是首页的 有些是歌单的 有些的独立显示的
 
名字很多 因为赶时间 没有对这些对象设立统一的命名规则 想到一个名字就用了 然后复制过去 虽然不会报错 但是估计以后看会很头疼 然后很多效果图快就做了 其实心里清楚这样做并不是什么很好的方式
写工具轮子,JAVA的封装继承平常做项目的就可以多利用 ,多写点工具类对自己很有帮助,尽量减少重复代码,这样效率会高很多
工具写多了,就是自己的东西了。
感觉有时候限定时间内做项目就像做数学卷子 感觉有强迫症 应该先做会做的 然后再做难的 
但是比如说这次 前面比较注重代码质量还有一些验证判断之类的
包括头像裁剪什么的 
登录注册之类的就搞了蛮久 后面时间很紧 再加上前面两天扒网页
爬数据 之类的 导致后面时间很紧 我几天前就觉得有限时间内根本完不成了.. 所以觉得项目开大了 或者说太扣细节了 
不过和上次项目一样,多尝试一些自己不懂的,过程很痛苦,但这是正常最快的方式,所以不要把自己放在舒适区,那样进步的太慢。

转载于:https://www.cnblogs.com/invoker-/p/6655042.html

音乐平台项目的几个问题总结(头像裁剪以及跨页面播放音乐)相关推荐

  1. 实训说明书 在线音乐平台项目规格说明书

    在线音乐平台项目规格说明书 概况 项目名称 在线音乐平台 行业 网络媒体 架构类型 B/S结构 开发技术 1. B/S开发环境

  2. 十三款NFT音乐平台测评:为什么一线基金和主流市场纷纷选择押注音乐 NFT ?...

    原文作者:木木 & 一点点 原标题:<Web 3.0学习笔记第二期:最全NFT音乐平台测评> 看够了PFP之类的图片NFT和崩盘边缘试探的链游,不如来学点新鲜的. 如果有持续关注一 ...

  3. vue实现音乐平台项目

    成果 具体效果看B站视频演示: B站地址:视频演示 github地址:项目源码 码云地址:项目源码 vue3版本地址:添加链接描述 各位大佬,帮忙点个赞,投个币,star下,万分感谢大家! 项目结构 ...

  4. matlab 播放声音,matlab播放音乐

    最近在做计算,写了一些matlab代码,脑壳还疼,所以决定发挥一下逗B精神,写一个程序玩一下. 想了想,既然写代码的时候喜欢听歌,而且我的电脑打开网易音乐的速度巨慢(不知道为什么..),那些一个程序直 ...

  5. html怎么设置点击播放音乐,html5点击播放音乐试听按钮动画特效

    特效描述:html5 点击播放 音乐试听 按钮动画特效.html5鼠标滑过或点击播放音乐试听特效 代码结构 1. 引入CSS 2. 引入JS 3. HTML代码 Examples eventType ...

  6. C/C++笔记之播放音乐的函数

    前缀为mci(Media Control Iterface): //头文件mmsystem.h或windows.h //需要添加静态库 (lib,"winmm.lib") //支持 ...

  7. 解决iphone 微信H5自动播放音乐问题

    解决iphone 微信H5自动播放音乐问题 参考文章: (1)解决iphone 微信H5自动播放音乐问题 (2)https://www.cnblogs.com/hlhs/p/11157401.html ...

  8. linux音乐服务器mpd,在你的 Fedora 终端上播放音乐 | Linux 中国

    原标题:在你的 Fedora 终端上播放音乐 | Linux 中国 做一个极客,在你的终端上播放音乐! -- Carmine Zaccagnino MPD(Music Playing Daemon), ...

  9. (音乐可视化项目)Light-Dancer为音乐而生

    序言: 这是以我为项目组长所做的一个训练项目,项目结题之后笔者决定拿出来跟诸位分享,希望对你对我都有所帮助 一.成果简单介绍: (1)Reading-LED(作品) (2)Listening-LED( ...

最新文章

  1. 【CVPR2021】旷视研究院入选学术成果盘点
  2. js window.event 对象学习
  3. 作为程序猿----别说你不知道的人物!
  4. XBMC源代码分析 6:视频播放器(dvdplayer)-文件头(以ffmpeg为例)
  5. 微信机器人控制linux,微信运维交互机器人的示例代码
  6. 自动驾驶决策规划研究综述
  7. 非线性光纤光学_《Nature》子刊:解决大纵横比光纤中传质不匀的难题!
  8. Linux 用户授权的方法,linux中用户和权限管理
  9. 抖音短视频去水印方法 2018短视频伪原创
  10. 加ing形式的单词有哪些_动词ing形式变化规则有哪些
  11. java实现发送匿名邮件,帮帮忙!现在要实现邮件发送(还必须要匿名发送)!该怎么解决...
  12. QT的triggered意思
  13. 1325:【例7.4】 循环比赛日程表 2020-12-18
  14. Y2K问题和2038问题
  15. 988-211所有学校
  16. 机器学习算法学习——RBF算法原理图解
  17. 2020十大最佳大数据分析工具
  18. Agisoft Metashape 照片高程改正 附python源码
  19. android 视频相册,安卓11版本保存视频到相册,提示保存成功,相册里没有视频...
  20. BYOD携带自己的设备办公

热门文章

  1. using matlab drawing line graph for latex
  2. 朴素贝叶斯算法+模型的评价-查准率、召回率、F1-score及混淆矩阵(code实现)
  3. html5晶格化,前端开发——滚滚屏(没纵向滚动条)
  4. 百度图神经网络学习——day03:图神经网络算法(一)
  5. 集成学习(二)——XGBoost
  6. html css字幕滚动代码,纯CSS实现滚动3D字幕
  7. python顺序结构的关键字_Python相关数据结构的排序
  8. mysql st centroid_postgresql – ST_Distance的返回值单位
  9. python入门到应用实践_Python 3.x入门到应用实践
  10. 不能编辑access_vcf通讯录编辑器 v3.1.6 vcf通讯录编辑器软件