点击div时更改页面背景图片的函数

5
我想要一个行为像按钮的小图片,可以被点击,并且有一个功能来改变网页的背景图片。我是一个完全的新手,正在尝试学习。我认为最简单的方法是使用一个带有background-image
标签。同时我需要使用unsemantic网格。
因此,我基本上只有一个带有背景图片的
标签。如何编写这个函数?我相信这非常简单,我已经阅读了20多个帖子,但其中没有一个对我有用。
编辑:添加了我的代码。

#knapp {
  height:50px;
  width:50px;
  background-image:url(http://ingridwu.dmmdmcfatter.com/wp-content/uploads/2015/01/placeholder.png);
  background-repeat:no-repeat;
  background-size:contain; 
  position:absolute;
  top:90vh;
  right:3vw;
}
<div id="knapp" class="grid-10 prefix-90"></div>


这里是您需要使用的方法:http://api.jquery.com/click和http://api.jquery.com/css - Rory McCrossan
3
请将代码包含在您的回复中,或者至少提供您已经尝试过的HTML代码。 - Mi-Creativity
谢谢!我会尽力理解那篇长文的。英语不是我的母语。 - Alice Holmer Lazar
1
你的英语和问题很清晰,但你至少需要提供一些尝试。 - Mi-Creativity
把它们循环起来其实更好,我只是没想到。 - Alice Holmer Lazar
显示剩余6条评论
6个回答

4
添加光标使其呈现可点击状态
   #knapp {
      cursor: pointer;
   }

您可以将新的 background-image 放在一个新的 CSS 规则中。

body.newbg {
    background-image:url(path-to-new-background.png);
}

这是带有旧背景图片的正文

body {
    background-image:url(path-to-old-background.png);
}

使用jQuery,您可以通过以下方式添加/切换类(在 $(document).ready() 中):

$('#knapp').on('click', function(){

    $('body').addClass('newbg');
    // you could instead do toggleClass if you want for each click to have background switch between old background and new background
});

这是一种更清晰的方法,与其他答案相比,它将演示(css),结构(html)和行为(javascript)分开。 这是因为它不使用JavaScript直接更改样式。另外,它也不会用onclick污染html,这也是一种不好的做法。
这里有一个plunkr:https://plnkr.co/edit/aiGZmvvi6WWGFs7E9xTp 这里还有一个带有循环背景集合的plunkr(感谢Kai的想法):https://plnkr.co/edit/0djmmNM9OOTdfYyvLvUH?p=preview

我不需要改变HTML吗?这似乎是一个很好的解决方案,但唯一的问题是你不能点击div,因为它不是链接或其他任何东西。 - Alice Holmer Lazar
你可以将“点击”放在任何地方,它不一定是一个链接;如果你想让它看起来可点击,你可以将光标改为指针。 - Michail Michailidis
2
等一下,这会改变按钮的背景,而不是整个页面的背景? - Alice Holmer Lazar
1
@AliceHolmerLazar 很可能是你忘记在 HTML 完成渲染后绑定点击事件 ($(document).ready) - 我已经在答案中添加了它 - 检查我的 plunkr 并让我知道是否需要更多帮助 :) - Michail Michailidis
1
@guest271314,这些文档非常详细(https://api.jquery.com/addclass/和https://api.jquery.com/toggleclass/)- 如果您已经看到了我的代码中的评论,我期望OP表达任何进一步的问题,否则我的回答会太长并且不是很有用。 - Michail Michailidis
显示剩余11条评论

3
  1. Create a button with onclick attribute with a function name like replace.
  2. Defined the function in your script like:

    function replace() {
       document.body.style.backgroundImage = 'url(https://lh6.ggpht.com/8mgTDZXaLMS1JsnF28Tjh6dahHwN1FqcXCVnifkfppmNLqnD-mPBuf9C1sEWhlEbA4s=w300)';  
    }
    

说明:

您可以使用 document.body 对象将主体的 style 属性设置为其他 background-image

如果有什么不清楚的地方,我很乐意解释。

工作示例:

function replace() {
  document.body.style.backgroundImage = 'url(https://lh6.ggpht.com/8mgTDZXaLMS1JsnF28Tjh6dahHwN1FqcXCVnifkfppmNLqnD-mPBuf9C1sEWhlEbA4s=w300)';  
}
body {
  background-image: url(http://www.julienlevesque.net/preview/google-smile-preview.jpg);
}

div {
  background:blue;
  color:#fff;
  float:left;
}
<div onclick="replace()">Replace background-image</div>


我尝试使用按钮代替 div,但这不起作用,因为它不应该是一个按钮,而是一个可点击的图像。 - Alice Holmer Lazar
我更新了我的回答。这并不重要,因为你也可以在 div 上设置 onclick - Mosh Feu

1
尝试在 div#knapp 元素上使用 onclick,将 document.body.style.background 设置为图像文件的 URL。

#knapp {
  height:50px;
  width:50px;
  background-image:url(http://lorempixel.com/50/50);
  background-repeat:no-repeat;
  background-size:contain; 
  position:absolute;
  top:90vh;
  right:3vw;
}
<div id="knapp" class="grid-10 prefix-90" onclick="document.body.style.background = 'url(http://lorempixel.com/'+ window.innerWidth + '/'+ window.innerHeight +') no-repeat'"></div>


1
@MichailMichailidis,你不能只因为“认为这是一种不好的做法”就给它点踩。请发表评论并让用户向你解释他的想法。 - Mosh Feu
1
@MichailMichailidis 还要注意,你发布的解决方案没有改变 body 元素的 background?请参考原始帖子中的 "更改 body 背景图片"。也许你应该给自己点个 "踩"? - guest271314
1
@MichailMichailidis 好奇,短语“这是一个非常糟糕的做法”的来源、参考是什么?还是这是你的观点? - guest271314
@MichailMichailidis,链接页面上没有出现“这是一个非常糟糕的做法”这个短语。 - guest271314
1
@guest271314 我见过很多应用程序,花费数百万制作,使用类似的编码实践,使技术债务不可持续。糟糕的代码最终会花费大量资金,我希望您至少同意这一点。 - Michail Michailidis
显示剩余18条评论

1
如果我理解问题正确,您应该能够在jQuery中创建一个变量,其中包含您想要使用的所有图像url的字符串版本的数组: var images = ['../images/####','../images/$$$$', 'http://some.other/url.here]; // 为要循环的所有图像执行此操作
就像这样。
然后,您可以创建一个计数器变量: var counter = 0; 并将其设置为零。
接下来,像这样将事件侦听器on()添加到您的div中:
$('#knapp').on('click', function(){



});

最后,在您的事件监听器中,将 div 的 CSS background-image 属性更改为数组中的其中一张图片:
// do this inside a document.ready() function
$('#knapp').on('click', function(){

    $(this).css('background-image','url("' + images[counter] + '")');
    counter++;

});

我希望这可以帮到你!同时,请记得递增counter编辑 ---------------------------------------------------------------- 好的,所以我完全忽略了一个显而易见的问题,那就是计数器可能会过高并访问超出范围的内容。为了防止这种情况,在on()监听器内添加以下内容:
if(counter >= images.length - 1){

    counter = 0;

}

编辑2 --------------------------------------------------------------

好的,起初我不知道你确切想要什么,所以这是我的第二个答案。既然看起来你实际上只想在单击时切换一次背景图像,那么你可以使用类似以下代码:

$(document).ready(function(){

    $('#knapp').on('click', function(){

        $(this).css('background-image','url("YOUR_NEW_URL_HERE")');

});

});

或者你可以通过在CSS中创建两个完全相同的类(除了背景图片),并使用.addClass和.removeClass将其中一个替换为另一个,从而在两个图像之间切换。
编辑3---------------------------------------------------------------
我从未想过我会如此频繁地编辑这篇文章,但显然我忽略了需要更改背景图片(感谢评论)。我的错误,谢谢你指出(即使你是在跟别人说话)。

我将你的圆形背景想法添加到了一个额外的 Plunkr 中!谢谢。 - Michail Michailidis
谢谢你的帮助,Kai。虽然我选择了另一个建议,因为它似乎更简单、更合理。这是结果:https://plnkr.co/edit/eOClcBGhKPz2UoS8oHXm?p=catalogue。但仍然无法正常工作。我一定是从一开始就做错了什么。 - Alice Holmer Lazar

1
这可能会对您有所帮助…
$('.yourClassofDiv').click({
   $(this).css("background-image",'url("' + URLofIMAGE+ '")')
});

1
这是一个关于jQuery的简单方法。

$(document).ready(function() {
  $("body").css('background-image', 'url(http://julienlevesque.net/Requiem/images/detail-requiem.jpg)').css('background-repeat', 'no-repeat');
  $('div').css('cursor', 'pointer').click(function() {
        $("body").css('background-image', 'url(http://julienlevesque.net/Requiem/images/Requiem-Julien-Levesque.jpg)');
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<body>
  <div style="background-color:yellow">Click Here to change background Image</div>
</body>

我将为您翻译有关编程的内容。以下是需要翻译的文本:

在这里,我将解释代码。 jQuery语法是专门用于选择HTML元素并对元素执行某些操作的。

基本语法是:$(选择器).动作()

A $ sign to define/access jQuery
A (selector) to "query (or find)" HTML elements
A jQuery action() to be performed on the element(s)

$(this).hide() - hides the current element.

$("p").hide() - hides all <p> elements.

$(".test").hide() - hides all elements with class="test".

$("#test").hide() - hides the element with id="test".

这是代码中发生的事情。
1.
$(document).ready(function(){

   // jQuery methods go here...

}); 

这是为了防止在文档加载完成之前(即准备就绪)运行任何jQuery代码。在使用文档之前等待文档完全加载和准备好是一个好的实践。这也允许您将JavaScript代码放在文档主体之前,即头部部分。

2

$("body").css('background-image', 'url(http://julienlevesque.net/Requiem/images/detail-requiem.jpg)').css('background-repeat', 'no-repeat');

使用.css()方法获取HTML文档的元素并设置其背景图像。我给它添加了另一个操作。

3

$('div').css('cursor', 'pointer').click(function() {
        $("body").css('background-image', 'url(http://julienlevesque.net/Requiem/images/Requiem-Julien-Levesque.jpg)');
    });

这是变化发生的地方。我使用$('div')使div点击,首先将鼠标指针更改为光标以指示其可点击性,然后给它点击功能,其中我们的背景图像在点击时会发生变化。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接