Commit 19e8ffeffba0b178a929f42d45fd5f8cc49a51d4
1 parent
47e9534a
直播海报分享优化显示
Showing
3 changed files
with
254 additions
and
7 deletions
packageA/pages/liveStream/liveStream.js
@@ -46,7 +46,8 @@ Page({ | @@ -46,7 +46,8 @@ Page({ | ||
46 | screenWidth: 0, | 46 | screenWidth: 0, |
47 | canvasHidden: 1, | 47 | canvasHidden: 1, |
48 | gid: '', | 48 | gid: '', |
49 | - shareImgPath: '' | 49 | + shareImgPath: '', |
50 | + shartitle:"" | ||
50 | }, | 51 | }, |
51 | // list: [], | 52 | // list: [], |
52 | // live: { | 53 | // live: { |
@@ -335,13 +336,15 @@ Page({ | @@ -335,13 +336,15 @@ Page({ | ||
335 | // 分享操作表 | 336 | // 分享操作表 |
336 | clickShare: function (e) { | 337 | clickShare: function (e) { |
337 | var sharimg = e.currentTarget.dataset.sharimg | 338 | var sharimg = e.currentTarget.dataset.sharimg |
339 | + var shartitle = e.currentTarget.dataset.shartitle | ||
338 | if(!getApp().globalData.user_id){ | 340 | if(!getApp().globalData.user_id){ |
339 | getApp().goto("/packageE/pages/togoin/togoin"); | 341 | getApp().goto("/packageE/pages/togoin/togoin"); |
340 | return false; | 342 | return false; |
341 | } | 343 | } |
342 | this.setData({ | 344 | this.setData({ |
343 | showActionSheet: !this.data.showActionSheet, | 345 | showActionSheet: !this.data.showActionSheet, |
344 | - sharimg : sharimg | 346 | + sharimg : sharimg, |
347 | + shartitle:shartitle | ||
345 | }) | 348 | }) |
346 | }, | 349 | }, |
347 | 350 | ||
@@ -406,7 +409,7 @@ Page({ | @@ -406,7 +409,7 @@ Page({ | ||
406 | if(!this.data.coverImg) { | 409 | if(!this.data.coverImg) { |
407 | 410 | ||
408 | // 请求主图 | 411 | // 请求主图 |
409 | - await that.getImageInfo(that.data['shareimg']).then(res => { | 412 | + await that.getImageInfo(that.data.sharimg).then(res => { |
410 | that.setData({ | 413 | that.setData({ |
411 | coverImg: res.path, | 414 | coverImg: res.path, |
412 | coverImgWidth: res.width, | 415 | coverImgWidth: res.width, |
@@ -446,7 +449,7 @@ Page({ | @@ -446,7 +449,7 @@ Page({ | ||
446 | 449 | ||
447 | 450 | ||
448 | // 数据准备 | 451 | // 数据准备 |
449 | - const title = this.data.details.name; | 452 | + const title = this.data.shartitle; |
450 | // const headImg = app.globalData.userInfo['head_pic']; | 453 | // const headImg = app.globalData.userInfo['head_pic']; |
451 | 454 | ||
452 | // console.log('----------------v', headImg); | 455 | // console.log('----------------v', headImg); |
@@ -573,6 +576,68 @@ Page({ | @@ -573,6 +576,68 @@ Page({ | ||
573 | 576 | ||
574 | }, | 577 | }, |
575 | 578 | ||
579 | + | ||
580 | + | ||
581 | + imageResize(imgWidth, imgHeight) { | ||
582 | + var imageSize = {}; | ||
583 | + var originalWidth = imgWidth;//图片原始宽 | ||
584 | + var originalHeight = imgHeight;//图片原始高 | ||
585 | + var originalScale = originalHeight/originalWidth;//图片高宽比 | ||
586 | + // console.log('originalWidth: ' + originalWidth) | ||
587 | + // console.log('originalHeight: ' + originalHeight) | ||
588 | + | ||
589 | + //获取屏幕宽高 | ||
590 | + var winWidth = 480; | ||
591 | + var winHeight = 380; | ||
592 | + var winScale = winHeight/winWidth;//屏幕高宽比 | ||
593 | + // console.log('windowWidth: ' + winWidth) | ||
594 | + // console.log('windowHeight: ' + winHeight) | ||
595 | + if(originalScale < winScale){//图片高宽比小于屏幕高宽比 | ||
596 | + //图片缩放后的宽为屏幕宽 | ||
597 | + imageSize.imageWidth = winWidth; | ||
598 | + imageSize.imageHeight = (winWidth * originalHeight) / originalWidth; | ||
599 | + }else{//图片高宽比大于屏幕高宽比 | ||
600 | + //图片缩放后的高为屏幕高 | ||
601 | + imageSize.imageHeight = winHeight; | ||
602 | + imageSize.imageWidth = (winHeight * originalWidth) / originalHeight; | ||
603 | + } | ||
604 | + console.log('缩放后的宽: ' + imageSize.imageWidth) | ||
605 | + console.log('缩放后的高: ' + imageSize.imageHeight) | ||
606 | + return imageSize; | ||
607 | + }, | ||
608 | + | ||
609 | + | ||
610 | +//文本换行 参数:1、canvas对象,2、文本 3、距离左侧的距离 4、距离顶部的距离 5、6、文本的宽度 | ||
611 | +drawText: function(ctx, str, leftWidth, initHeight, titleHeight, canvasWidth, unit) { | ||
612 | + var lineWidth = 0; | ||
613 | + var lastSubStrIndex = 0; //每次开始截取的字符串的索引 | ||
614 | + var han = 0; | ||
615 | + for (let i = 0; i < str.length; i++) { | ||
616 | + if (han == 2) return; | ||
617 | + //lineWidth += ctx.measureText(str[i]).width; | ||
618 | + lineWidth += ut.measureText(str[i], 21.3 * unit); | ||
619 | + if (lineWidth > canvasWidth) { | ||
620 | + han++; | ||
621 | + | ||
622 | + if (han == 2) { | ||
623 | + ctx.textAlign = 'justify'; | ||
624 | + ctx.fillText(str.substring(lastSubStrIndex, i) + '...', leftWidth, initHeight); //绘制截取部分 | ||
625 | + } else { | ||
626 | + ctx.textAlign = 'justify'; | ||
627 | + ctx.fillText(str.substring(lastSubStrIndex, i), leftWidth, initHeight); | ||
628 | + } | ||
629 | + initHeight += 35; //22为字体的高度 | ||
630 | + lineWidth = 0; | ||
631 | + lastSubStrIndex = i; | ||
632 | + titleHeight += 20; | ||
633 | + } | ||
634 | + if (i == str.length - 1) { //绘制剩余部分 | ||
635 | + ctx.textAlign = 'justify'; | ||
636 | + ctx.fillText(str.substring(lastSubStrIndex, i + 1), leftWidth, initHeight); | ||
637 | + } | ||
638 | + } | ||
639 | +}, | ||
640 | + | ||
576 | /** | 641 | /** |
577 | * 页面相关事件处理函数--监听用户下拉动作 | 642 | * 页面相关事件处理函数--监听用户下拉动作 |
578 | */ | 643 | */ |
@@ -694,7 +759,145 @@ Page({ | @@ -694,7 +759,145 @@ Page({ | ||
694 | }); | 759 | }); |
695 | 760 | ||
696 | return p; | 761 | return p; |
697 | - }, | 762 | + }, |
763 | + | ||
764 | + | ||
765 | + // 保存图片到手机 | ||
766 | + onSaveToPhone() { | ||
767 | + var self = this; | ||
768 | + // 获取用户的当前设置,返回值中有小程序已经向用户请求过的权限 | ||
769 | + this.getSetting().then((res) => { | ||
770 | + // 判断用户是否授权了保存到相册的权限,如果没有发起授权 | ||
771 | + if (!res.authSetting['scope.writePhotosAlbum']) { | ||
772 | + this.authorize().then(() => { | ||
773 | + // 同意授权后保存下载文件 | ||
774 | + this.saveImageToPhotosAlbum(self.data.canvasToImgPath) | ||
775 | + }) | ||
776 | + } else { | ||
777 | + // 如果已经授权,保存下载文件 | ||
778 | + this.saveImageToPhotosAlbum(self.data.canvasToImgPath) | ||
779 | + } | ||
780 | + }) | ||
781 | + }, | ||
782 | + | ||
783 | + //打开设置,引导用户授权 | ||
784 | + onOpenSetting() { | ||
785 | + wx.openSetting({ | ||
786 | + success:(res) => { | ||
787 | + // console.log(res.authSetting) | ||
788 | + } | ||
789 | + }) | ||
790 | + }, | ||
791 | + | ||
792 | + // 获取用户已经授予了哪些权限 | ||
793 | + getSetting() { | ||
794 | + return new Promise((resolve, reject) => { | ||
795 | + wx.getSetting({ | ||
796 | + success: res => { | ||
797 | + resolve(res) | ||
798 | + } | ||
799 | + }) | ||
800 | + }) | ||
801 | + }, | ||
802 | + | ||
803 | + // 发起首次授权请求 | ||
804 | + authorize() { | ||
805 | + // isFirst 用来记录是否为首次发起授权, | ||
806 | + // 如果首次授权拒绝后,isFirst赋值为1 | ||
807 | + let isFirst = wx.getStorageSync('isFirst') || 0; | ||
808 | + return new Promise((resolve, reject) => { | ||
809 | + wx.authorize({ | ||
810 | + scope: 'scope.writePhotosAlbum', | ||
811 | + // 同意授权 | ||
812 | + success: () => { | ||
813 | + resolve(); | ||
814 | + }, | ||
815 | + // 拒绝授权,这里是用户拒绝授权后的回调 | ||
816 | + fail: res => { | ||
817 | + if(isFirst === 0) { | ||
818 | + wx.setStorageSync('isFirst', 1); | ||
819 | + wx.showToast({ | ||
820 | + title: '保存失败', | ||
821 | + icon: 'none', | ||
822 | + duration: 1000 | ||
823 | + }) | ||
824 | + } else { | ||
825 | + this.showModal(); | ||
826 | + } | ||
827 | + console.log('拒绝授权'); | ||
828 | + reject(); | ||
829 | + } | ||
830 | + }) | ||
831 | + }) | ||
832 | + }, | ||
833 | + | ||
834 | + //保存下载文件 | ||
835 | + savedownloadFile(img) { | ||
836 | + this.downLoadFile(img).then((res) => { | ||
837 | + return this.saveImageToPhotosAlbum(res.tempFilePath) | ||
838 | + }).then(() => { | ||
839 | + // resolve() | ||
840 | + }) | ||
841 | + }, | ||
842 | + | ||
843 | + //单文件下载(下载文件资源到本地),客户端直接发起一个 HTTPS GET 请求,返回文件的本地临时路径。 | ||
844 | + downLoadFile(img) { | ||
845 | + var self = this; | ||
846 | + return new Promise((resolve, reject) => { | ||
847 | + wx.showLoading({ | ||
848 | + title: '保存中...', | ||
849 | + mask: true, | ||
850 | + }); | ||
851 | + wx.downloadFile({ | ||
852 | + url: img, | ||
853 | + success: (res) => { | ||
854 | + resolve(res); | ||
855 | + } | ||
856 | + }) | ||
857 | + }) | ||
858 | + }, | ||
859 | + | ||
860 | + // 保存图片到系统相册 | ||
861 | + saveImageToPhotosAlbum(saveUrl) { | ||
862 | + var self = this; | ||
863 | + return new Promise((resolve, reject) => { | ||
864 | + wx.saveImageToPhotosAlbum({ | ||
865 | + filePath: saveUrl, | ||
866 | + success: (res) => { | ||
867 | + wx.showToast({ | ||
868 | + title: '保存成功', | ||
869 | + duration: 1000, | ||
870 | + }); | ||
871 | + self.setData({ | ||
872 | + showPlaybill: 'true' | ||
873 | + }); | ||
874 | + resolve(); | ||
875 | + }, | ||
876 | + fail: () => { | ||
877 | + wx.showToast({ | ||
878 | + title: '保存失败', | ||
879 | + duration: 1000, | ||
880 | + }); | ||
881 | + } | ||
882 | + }) | ||
883 | + }) | ||
884 | + }, | ||
885 | + | ||
886 | + | ||
887 | + // 弹出模态框提示用户是否要去设置页授权 | ||
888 | + showModal() { | ||
889 | + wx.showModal({ | ||
890 | + title: '检测到您没有打开保存到相册的权限,是否前往设置打开?', | ||
891 | + success: (res) => { | ||
892 | + if (res.confirm) { | ||
893 | + console.log('用户点击确定') | ||
894 | + this.onOpenSetting() // 打开设置页面 | ||
895 | + } else if (res.cancel) { | ||
896 | + console.log('用户点击取消') | ||
897 | + } | ||
898 | + } | ||
899 | + }) | ||
900 | + }, | ||
698 | 901 | ||
699 | 902 | ||
700 | /** | 903 | /** |
packageA/pages/liveStream/liveStream.wxml
@@ -85,7 +85,7 @@ | @@ -85,7 +85,7 @@ | ||
85 | {{item['anchor_name']}}</view> | 85 | {{item['anchor_name']}}</view> |
86 | </view> | 86 | </view> |
87 | <view style="width: 30%;height: 90rpx;align-items: center;justify-items: center;"> | 87 | <view style="width: 30%;height: 90rpx;align-items: center;justify-items: center;"> |
88 | - <view bindtap="clickShare" data-sharimg="{{item.share_img}}" class="display: flex;" style="width: 70%;border-radius: 25rpx;border: 1rpx solid #fc6247;height: 46rpx;margin-top: 25rpx;margin-left: 30rpx;"> | 88 | + <view bindtap="clickShare" data-sharimg="{{item.share_img}}" data-shartitle="{{item.name}}" class="display: flex;" style="width: 70%;border-radius: 25rpx;border: 1rpx solid #fc6247;height: 46rpx;margin-top: 25rpx;margin-left: 30rpx;"> |
89 | <view class="share-image"></view> | 89 | <view class="share-image"></view> |
90 | <view class="fs26" style="color: #fc6247;margin-left: 10rpx;line-height: 46rpx;"> 分享 </view> | 90 | <view class="fs26" style="color: #fc6247;margin-left: 10rpx;line-height: 46rpx;"> 分享 </view> |
91 | </view> | 91 | </view> |
packageA/pages/liveStream/liveStream.wxss
@@ -257,6 +257,50 @@ subscribe { | @@ -257,6 +257,50 @@ subscribe { | ||
257 | } | 257 | } |
258 | 258 | ||
259 | .share-actionSheet.active ~ .mask, | 259 | .share-actionSheet.active ~ .mask, |
260 | + | ||
261 | +.mask { | ||
262 | + display: none; | ||
263 | + background-color: rgba(0,0,0,.7); | ||
264 | + position: fixed; | ||
265 | + top: 0; | ||
266 | + bottom: 0; | ||
267 | + left: 0; | ||
268 | + right: 0; | ||
269 | +} | ||
270 | +.playbill { | ||
271 | + position: fixed; | ||
272 | + left: 50%; | ||
273 | + top: 50%; | ||
274 | + transform: translate(-50%, -50%); | ||
275 | + z-index: 9999; | ||
276 | + background: none; | ||
277 | +} | ||
278 | +.share-actionSheet.active ~ .mask, | ||
260 | .playbill.active ~ .mask { | 279 | .playbill.active ~ .mask { |
261 | display: block; | 280 | display: block; |
262 | -} | ||
263 | \ No newline at end of file | 281 | \ No newline at end of file |
282 | +} | ||
283 | +.playbill-pic { | ||
284 | + display: block; | ||
285 | + width: 560rpx; | ||
286 | + height: auto; | ||
287 | + margin: 0 auto 26rpx; | ||
288 | + border-radius: 10rpx; | ||
289 | + overflow: hidden; | ||
290 | +} | ||
291 | + | ||
292 | +.playbill-save { | ||
293 | + width: 560rpx; | ||
294 | + height: 100rpx; | ||
295 | + line-height: 100rpx; | ||
296 | + background-color: #f23030; | ||
297 | + color: #fff; | ||
298 | + font-size: 36rpx; | ||
299 | + text-align: center; | ||
300 | + margin: 0 auto; | ||
301 | +} | ||
302 | +.playbill-save image { | ||
303 | + width: 44rpx; | ||
304 | + height: 36rpx; | ||
305 | + margin-right: 23rpx; | ||
306 | +} | ||
307 | + |