jQuery中 单/多图像选择器 媒体选择器

  • 源码大小:5.88KB
  • 所需积分:1积分
  • 源码编号:19JP-3663
  • 浏览次数:707次
  • 最后更新:2023年07月08日
  • 所属栏目:其他
本站默认解压密码:19jp.com 或 19jp_com

简介

Media Selector是一个很小的jQuery脚本,可以从库中选择单个或多个图像(或任何其他元素)。用户可以通过Shift+Ctrl键选择多个文件。

如何使用它:

1.将图像和复选框图标(在本例中使用Font Awesome)一起插入到CSS类为“image checkbox”的标签中。不要忘记使用“su media ID”属性为每个图像分配一个唯一的ID。

  1. <label class="image-checkbox">
  2. <img su-media-id="jquery" src="1.jpg" />
  3. <i class="fa fa-check"></i>
  4. </label>
  5. <label class="image-checkbox">
  6. <img su-media-id="script" src="2.jpg" />
  7. <i class="fa fa-check"></i>
  8. </label>
  9. <label class="image-checkbox">
  10. <img su-media-id="net" src="3.jpg" />
  11. <i class="fa fa-check"></i>
  12. </label>
  13. ...

2.创建一个普通复选框,在单选和多选之间切换。

  1. <input type="checkbox" class="custom-control-input" id="allowmultiple">
  2. <label class="custom-control-label" for="allowmultiple" style="cursor: pointer;">
  3. Multiple Select
  4. </label>

3.创建一个结果容器,媒体选择器在其中显示一个包含您选择的图像ID的JSON字符串。

  1. <div id="selectedmediapreview"></div>

4.为图像复选框设置样式所需的CSS。

  1. .image-checkbox {
  2. cursor: pointer;
  3. box-sizing: border-box;
  4. -moz-box-sizing: border-box;
  5. -webkit-box-sizing: border-box;
  6. border: 3px solid transparent;
  7. box-shadow: 0 0 4px #ccc;
  8. outline: 0;
  9. margin: 4px;
  10. border-radius: 12px;
  11. }
  12.  
  13. .image-checkbox-checked {
  14. border-color: #2196f3;
  15. }
  16.  
  17. img {
  18. border-radius: 8px;
  19. max-height: 160px !important;
  20. max-width: -webkit-fill-available;
  21. }
  22.  
  23. .image-checkbox i {
  24. display: none;
  25. color: #2196f3;
  26. }
  27.  
  28. .image-checkbox-checked {
  29. position: relative;
  30. }
  31.  
  32. .image-checkbox-checked i {
  33. display: block;
  34. position: absolute;
  35. top: 10px;
  36. right: 10px;
  37. }

5.在文档末尾加载必要的jQuery库。

  1. <script src="/path/to/cdn/jquery.slim.min.js"></script>

6.用于激活图像选择器的主JavaScript(jQuery脚本)。

  1. jQuery(function ($) {
  2. var mediaArray = [];
  3. var selectedMediasId;
  4. var isMultipleAllowed = false;
  5. $('#allowmultiple').click(function () {
  6. isMultipleAllowed = $('#allowmultiple').is(':checked') ? true : false;
  7. $('.image-checkbox-checked').each(function () {
  8. $(this).removeClass('image-checkbox-checked');
  9. });
  10. mediaArray = [];
  11. $('#selectedmediapreview').html('');
  12. });
  13. $(".image-checkbox").on("click", function (e) {
  14. var selected = $(this).find('img').attr('su-media-id');
  15. //console.log(selected);
  16. if ($(this).hasClass('image-checkbox-checked')) {
  17. $(this).removeClass('image-checkbox-checked');
  18. // remove deselected item from array
  19. mediaArray = $.grep(mediaArray, function (value) {
  20. return value != selected;
  21. });
  22. }
  23. else {
  24. if (isMultipleAllowed == false) {
  25. $('.image-checkbox-checked').each(function () {
  26. $(this).removeClass('image-checkbox-checked');
  27. });
  28. mediaArray = [];
  29. mediaArray.push(selected);
  30. } else {
  31. if (mediaArray.indexOf(selected) === -1) {
  32. mediaArray.push(selected);
  33. }
  34. }
  35. $(this).addClass('image-checkbox-checked');
  36. }
  37. //console.log(selected);
  38. console.log(mediaArray);
  39. selectedMediasId = mediaArray.join(",");
  40. console.log(selectedMediasId);
  41. $('#selectedmediapreview').html('<div class="alert alert-success"><pre lang="js">' + JSON.stringify(mediaArray.join(", "), null, 4) + '</pre></div>');
  42. //console.log(isMultipleAllowed);
  43. e.preventDefault();
  44. });
  45. });

更新日志:

  • 2022-03-23
  • 新增功能。现在用户可以通过Shift+Ctrl键选择多个文件

预览截图