【问题标题】:How to change image preview on button click如何在按钮单击时更改图像预览
【发布时间】:2018-12-27 16:11:00
【问题描述】:

我有这些代码来显示从输入中选择的文件的名称,它会预览第一张图片:

function readURL(input) {
if (input.files && input.files[0]) {
    var reader = new FileReader();



    reader.onload = function (e) {

        var filename = input.value;
        var lastIndex = filename.lastIndexOf("\\");
        if (lastIndex >= 0) {
            filename = filename.substring(lastIndex + 1);
        }
        var files = $('#my_file')[0].files;
        for (var i = 0; i < files.length; i++) {
         $("#files").append('<div class="filename"><span name="fileNameList">'+files[i].name+'</span></div>');

        }

        $("#nextBtn").on("click",function(){

        })
        $('#myImg').attr('src', e.target.result);
    }

    reader.readAsDataURL(input.files[0]);

   }
} 

我想要做的是,当我点击“下一个”按钮时,它将转到下一个选定的图像,或者如果我点击“上一个”按钮,它将转到上一个图像(最后一个图像如果我显示第一个)。我该怎么做呢?谢谢。

更新:

var fileInput = document.getElementById("my_file");
$(fileInput).on("change",function(event){
var next = document.getElementById("nextBtn");
next.onclick = function(xFlip){
    curImage = curImage+xFlip;
    var files = event.target.files;
    if(curImage > files.length){
        curImage = 1;
    }
    if(curImage == 0){
        curImage = files.length;
    }
    $("#myImg").attr('src',files[curImage-1]);

};
console.log(document.getElementById("myImg").getAttribute("src"));
});

我这样做是因为图像是从多个输入类型文件中检索的。 https://jsfiddle.net/bfr6wp7e/2/

【问题讨论】:

  • 更新后还是不行?请使用 html + css + js 解决方案创建 js fiddle 示例,以便我可以更有效地帮助您
  • @mkbctrl 是的,它仍然无法正常工作......我在我的帖子中添加了 js fiddle。请看一下。谢谢
  • @mkbctrl 我使用方法 2 来预览图像,但我不确定如何在那里实现 Sridhar 的答案,所以它仍然不完整。方法1已经完成,但不起作用..
  • 你解决了吗?我今天有空闲,所以我会尽力为您服务
  • @mkbctrl 抱歉,没有..我仍然无法解决它

标签: javascript jquery


【解决方案1】:

感谢您的挑战,这是我第一次接触 File API :)

这是 jsFiddle,我认为这是您问题的正确答案:

https://jsfiddle.net/mkbctrll/aq9Laaew/300936/

JS部分

const fileInupt = document.getElementById('fileInput')
const fileList = document.getElementById('fileList')

const slickSettings = {
  infinite: true,
  speed: 300,
  slidesToShow: 1,
  slidesToScroll: 1,
  autoplay: true
}
const initSlickCarousel = (target, settings) => {
  $(target).slick(settings);
} 

const handleInputChange = (event) => {
  console.log('We are handling it sir!')
  const filesArray = Array.from(event.target.files)


  filesArray.map((singleFile) => {
    const outputImg = document.createElement('img')
    const fileReader = new FileReader()

    outputImg.className = 'img-thumbnail'

    // Let's read it as data url - onload won't return a thing without it
    fileReader.readAsDataURL(singleFile)

    fileReader.onload = (event) => { outputImg.src = event.target.result }

    console.log(outputImg)

    fileList.appendChild(outputImg)
  })

 initSlickCarousel(fileList, slickSettings)
}

if(window.File && window.FileReader && window.FileList) { // check if browser can handle this

  console.log('We are good to go sir!')
  fileInput.addEventListener('change', handleInputChange, false)

} else {

  alert('File features are not fully supported. Please consider changing the browser (newest Chrome or Mozilla).')
}

如果没有以下来源,我将无法掌握该技术:

https://www.html5rocks.com/en/tutorials/file/dndfiles/

https://developer.mozilla.org/en-US/docs/Web/API/FileReader

https://developer.mozilla.org/en-US/docs/Web/API/FileReader/onload

【讨论】:

  • 是的,这正是我想要的!非常感谢!我会试试的!!
  • 再次嗨!是否可以添加仅放大/缩小当前显示图片的功能?
  • 一切皆有可能,我想你可以很容易地用谷歌搜索如何做到这一点,尤其是在使用 Slick.js 的情况下。这是您开始使用谷歌搜索时遇到的第一件事:gist.github.com/GingerBear/62829e6c52218dbb1ad2
  • 请记住,您在设计上具有响应读取文件的功能,该功能与响应处理其显示方式的插件分离。也许不是 Slick.js 而是尝试使用像 PhotoSwipe 这样的东西会更好?
  • 对不起伙计,我现在很忙。请尝试使用此解决方案:codepen.io/hagiang1305/pen/YpXVgO 记住代码顺序,并在确定 Slick 已初始化后应用缩放功能
【解决方案2】:

上一张和下一张图片幻灯片的示例代码。

var numImages = 4;
var curImage = 1;

var imgArray =[
  "one.jpg",
  "two.jpg",
  "three.jpg",
  "four.jpg"
];

function imageShow( xflip ) {
 curImage = curImage + xflip;
 if (curImage > numImages)
  { curImage = 1 ; } 
 if (curImage == 0)
 { curImage = numImages ; } 
     document.images[2].src =  imgArray[curImage - 1];
}

HTML 按钮:

<input type="button" value="<< Prev" onclick="imageShow(-1)">
<input type="button" value="Next >>" onclick="imageShow(1)">

【讨论】:

  • 非常感谢!我会试试看!!
  • 我尝试实现你的方法,但没有成功。这是我的代码。请再看看我的帖子
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-24
  • 1970-01-01
  • 1970-01-01
  • 2013-11-05
  • 1970-01-01
  • 2014-06-15
  • 2015-12-03
相关资源
最近更新 更多