Baru-baru ini, saya menghadapi beberapa masalah semasa menggunakan uniapp untuk membangunkan fungsi pratonton gambar. Khususnya, apabila memanggil komponen pratonton imej terbina dalam uniapp, kedudukan imej diimbangi, yang sangat menjengkelkan. Selepas banyak penyelesaian masalah dan penyelidikan, akhirnya saya menemui penyelesaiannya. Kongsikan pengalaman saya, semoga dapat memberi manfaat kepada semua.
Penerangan Masalah
Mula-mula, mari kita lihat prestasi masalah khusus. Apabila menggunakan kaedah uni.previewImage
untuk pratonton imej dalam uniapp, imej tidak sejajar. Seperti yang ditunjukkan dalam rajah di bawah:
Dapat dilihat bahawa kedudukan imej sangat menyimpang daripada kedudukan imej yang kita lihat pada halaman.
Punca masalah
Seterusnya, mari analisa punca masalah ini. Dengan merujuk kepada dokumentasi uniapp rasmi, kita boleh mengetahui bahawa kaedah uni.previewImage
digunakan seperti berikut:
uni.previewImage({ urls: [], // 需要预览的图片链接列表 current: '', // 当前显示图片的链接,不填则默认为urls的第一张 indicator: true, // 是否显示图片指示器 loop: true, // 是否可以循环预览 longPressActions: { // 长按图片显示操作菜单 itemList: ['发送给朋友', '保存图片', '收藏'], success: function(data) { console.log('success:' + data.tapIndex); }, fail: function(err) { console.log('fail:', err.errMsg); } } })
Antaranya, fokus pada parameter current
. Parameter ini digunakan untuk menetapkan kedudukan awal imej pratonton. Jika tidak ditetapkan, sistem akan meletakkan imej kepada yang pertama secara lalai. Walau bagaimanapun, masalah boleh timbul jika imej dikaburkan atau diimbangi oleh unsur lain.
Penyelesaian
Jadi, bagaimana untuk menyelesaikan masalah? Selepas banyak percubaan dan penyelidikan, saya menemui penyelesaian yang agak mudah dan berkesan, iaitu menggunakan kaedah uni.getImageInfo
untuk mendapatkan maklumat imej, dan kemudian melaraskan kedudukan mengikut nisbah lebar dan ketinggian maklumat imej.
Secara khusus, penyelesaiannya adalah seperti berikut:
uni.getImageInfo
untuk mendapatkan maklumat imej. uni.getImageInfo({ src: 'https://img.php.cn/upload/article/000/000/068/168255885723504.png', // 图片链接 success: function(res) { // 图片加载成功,获取图片信息 const width = res.width; // 图片宽度 const height = res.height; // 图片高度 const aspectRatio = width / height; // 图片宽高比例 // 根据宽高比例进行图片位置调整 }, fail: function(err) { // 图片加载失败 console.log(err); } })
// 计算图片上下偏移量 const windowHeight = uni.getSystemInfoSync().windowHeight; // 屏幕高度 const marginTop = (windowHeight - width / aspectRatio) / 2; // 上侧偏移量 const marginBottom = (windowHeight + width / aspectRatio) / 2; // 下侧偏移量 // 调用预览图片组件 uni.previewImage({ urls: [], // 需要预览的图片链接列表 current: '', // 当前显示图片的链接,不填则默认为urls的第一张 indicator: true, // 是否显示图片指示器 loop: true, // 是否可以循环预览 longPressActions: { // 长按图片显示操作菜单 itemList: ['发送给朋友', '保存图片', '收藏'], success: function(data) { console.log('success:' + data.tapIndex); }, fail: function(err) { console.log('fail:', err.errMsg); } }, // 调整图片位置 // 注意:这里只调整上下偏移量,如果需要左右偏移量也可以进行计算 success: function() { uni.pageScrollTo({ scrollTop: marginTop, duration: 0 }); }, complete: function() { uni.pageScrollTo({ scrollTop: 0, duration: 0 }); } })
Melalui kaedah di atas, kita boleh menyelesaikan masalah kedudukan pratonton imej yang salah dengan mendapatkan nisbah aspek maklumat imej dan melaraskan offset kedudukan.
Kesimpulan
Di atas adalah penyelesaian yang saya dapat melalui kajian dan ringkasan. Semoga ia membantu semua orang. Dalam projek sebenar, kami boleh menggunakan teknik ini secara fleksibel untuk meningkatkan kecekapan pembangunan dan mengoptimumkan pengalaman pengguna.
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan ralat kedudukan dalam pratonton imej uniapp. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!