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 | 46 | screenWidth: 0, |
| 47 | 47 | canvasHidden: 1, |
| 48 | 48 | gid: '', |
| 49 | - shareImgPath: '' | |
| 49 | + shareImgPath: '', | |
| 50 | + shartitle:"" | |
| 50 | 51 | }, |
| 51 | 52 | // list: [], |
| 52 | 53 | // live: { |
| ... | ... | @@ -335,13 +336,15 @@ Page({ |
| 335 | 336 | // 分享操作表 |
| 336 | 337 | clickShare: function (e) { |
| 337 | 338 | var sharimg = e.currentTarget.dataset.sharimg |
| 339 | + var shartitle = e.currentTarget.dataset.shartitle | |
| 338 | 340 | if(!getApp().globalData.user_id){ |
| 339 | 341 | getApp().goto("/packageE/pages/togoin/togoin"); |
| 340 | 342 | return false; |
| 341 | 343 | } |
| 342 | 344 | this.setData({ |
| 343 | 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 | 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 | 413 | that.setData({ |
| 411 | 414 | coverImg: res.path, |
| 412 | 415 | coverImgWidth: res.width, |
| ... | ... | @@ -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 | 453 | // const headImg = app.globalData.userInfo['head_pic']; |
| 451 | 454 | |
| 452 | 455 | // console.log('----------------v', headImg); |
| ... | ... | @@ -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 | 759 | }); |
| 695 | 760 | |
| 696 | 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 | 85 | {{item['anchor_name']}}</view> |
| 86 | 86 | </view> |
| 87 | 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 | 89 | <view class="share-image"></view> |
| 90 | 90 | <view class="fs26" style="color: #fc6247;margin-left: 10rpx;line-height: 46rpx;"> 分享 </view> |
| 91 | 91 | </view> | ... | ... |
packageA/pages/liveStream/liveStream.wxss
| ... | ... | @@ -257,6 +257,50 @@ subscribe { |
| 257 | 257 | } |
| 258 | 258 | |
| 259 | 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 | 279 | .playbill.active ~ .mask { |
| 261 | 280 | display: block; |
| 262 | -} | |
| 263 | 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 | + | ... | ... |