如何在javascript中制作下一个或上一个移动的文本滑块?
好的,我已经修改了标记/代码,使其更容易理解。使用JavaScript,我想知道如何创建一个文本滑块,在html5中单击“向前”或“向后”更改段落 我只希望一次显示一个div,第一个div(div_1)需要在开始时作为默认设置可见。我还希望能够在将来添加更多的文本div。我是JavaScript新手,所以我想让它尽可能简单 我曾经尝试过用JavaScript创建它,但没有成功,我不确定我是否用正确的方法来实现它如何在javascript中制作下一个或上一个移动的文本滑块?,javascript,html,css,Javascript,Html,Css,好的,我已经修改了标记/代码,使其更容易理解。使用JavaScript,我想知道如何创建一个文本滑块,在html5中单击“向前”或“向后”更改段落 我只希望一次显示一个div,第一个div(div_1)需要在开始时作为默认设置可见。我还希望能够在将来添加更多的文本div。我是JavaScript新手,所以我想让它尽可能简单 我曾经尝试过用JavaScript创建它,但没有成功,我不确定我是否用正确的方法来实现它 <!DOCTYPE html> <html lang="en"&
<!DOCTYPE html>
<html lang="en">
<head>
<style type="text/css">
.showHide {
display: none;
}
</style>
<script type="text/javascript">
var sdivs = [document.getElementById("div_1"),
document.getElementById("div_2"),
document.getElementById("div_3"),
document.getElementById("div_4")];
function openDiv(x) {
//I need to keep div_1 open as a starting point
sdivs[0].style.display ="block";
var j;
for (var j = 0; j < sdivs.length; j++) {
if (j === x) {
continue;
}
else {
sdivs[j].style.display = "none";
}
}
}
</script>
<title>text</title>
</head>
<body>
<a href="#" onlick="openDiv(1)">forward</a>
<a href="#" onlick="openDiv(-1)">backwards</a>
<div id="text_holder">
<div id="div_1" class="showHide">One</div>
<div id="div_2" class="showHide">Two</div>
<div id="div_3" class="showHide">Three</div>
<div id="div_4" class="showHide">Four</div>
</div>
</body>
</html>
.展示皮{
显示:无;
}
var sdivs=[document.getElementById(“div_1”),
文件getElementById(“div_2”),
文件getElementById(“div_3”),
文件.getElementById(“div_4”)];
函数openDiv(x){
//我需要保持div_1的开放作为起点
sdivs[0].style.display=“block”;
var j;
对于(var j=0;j
当处理像这样的多个元素时,我发现单独使用CSS是不够的(尽管它非常适合修改简单的悬停状态或任何东西)。这里的这一方法非常简单,并且特定于这一组标记(因此可以根据需要进行修改)。更重要的是,它演示了如何设置一个简单的javascript“类”来处理您的逻辑
//使用模块格式保持DOM整洁
(函数($){
//定义变量
var_容器;
var_模糊;
var_blurbWidth;
var_指数;
var_点击;
//初始化应用程序
函数init(){
console.log('init');
//初始化变量
_容器=$('#text_holder.inner');
_blurbs=$('.blurb');
_blurbWidth=$(_blurbs[0])。innerWidth();
_点击次数=$('.clicks');
_指数=0;
//分配处理程序并启动
样式();
addEventHandlers();
}
//初始化样式
函数样式(){
_容器宽度(_blurbs.length*_blurbWidth);
}
//捕捉用户交互
函数addEventHandlers(){
_点击({
“单击”:函数(el、args){
captureClicks($(this.attr('id'));
}
});
}
//基于点击项的迭代索引
函数captureClicks(term){
开关(术语){
“远期”案例:
_索引++;
如果(\u index>\u blurbs.length-1){
_指数=0;
}
打破
案例“向后”:
_索引--;
如果(_指数<0){
_索引=_blurbs.length-1;
}
打破
}
updateView();
}
//更新_containerelements left值
函数updateView(){
//_容器动画({
//“左”:(索引*宽度)*-1
//}, 500);
_css('left',(([u index*\u blurbWidth)*-1)+'px');
}
init();
})(jQuery);
我使用jQuery来处理事件绑定和动画,但是,同样有很多选项(包括普通javascript和CSS3转换的组合)
我还要注意,这都是html4和css2(保存您的doctype)
希望这会有所帮助-我可能应该提到我在这方面是一个真正的新手,我现在只对JavaScript感兴趣。我花了几个小时在网上试图找到一种方法,让我的段落在没有运气的情况下来回移动。我可能在用谷歌搜索错误的问题,谁知道呢。您在上面创建的内容很酷,但我只需要更改文本而不是幻灯片。是否可以删除此问题?我只是不想让另一个初学者在谷歌上搜索javascript答案,然后陷入另一个jQuery死胡同。你似乎在区分他们。不过,对于新手来说,使用jQuery进行事件绑定要容易一些,这就是我使用它的原因。也就是说,语法和类结构是完全相关的。如果你只是想在没有幻灯片过渡的情况下更新模糊,只需使用“CSS”而不是动画(请参阅我的更新)。(如果你不想让文本滑动,你可能不应该称之为“文本滑动条”)。你可以投票让帖子关闭,但更好的选择是澄清你的问题并专注于你真正想要实现的目标。祝你好运。那么(如何通过点击一个按钮打开不同的div?)是我最接近于找到我想要的问题/答案的地方。唯一的问题是JavaScript解决方案不能一次打开一个div。
// use a module format to keep the DOM tidy
(function($){
// define vars
var _container;
var _blurbs;
var _blurbWidth;
var _index;
var _clicks;
// initialize app
function init(){
console.log('init');
// initialize vars
_container = $('#text_holder .inner');
_blurbs = $('.blurb');
_blurbWidth = $(_blurbs[0]).innerWidth();
_clicks = $('.clicks');
_index = 0;
// assign handlers and start
styles();
addEventHandlers();
}
// initialize styles
function styles(){
_container.width(_blurbs.length * _blurbWidth);
}
// catch user interaction
function addEventHandlers(){
_clicks.on({
'click': function(el, args){
captureClicks( $(this).attr('id') );
}
});
}
// iterate _index based on click term
function captureClicks(term){
switch(term){
case 'forwards':
_index++;
if(_index > _blurbs.length - 1){
_index = 0;
}
break;
case 'backwards':
_index--;
if(_index < 0){
_index = _blurbs.length - 1;
}
break;
}
updateView();
}
// update the _container elements left value
function updateView(){
//_container.animate({
//'left' : (_index * _blurbWidth) * -1
//}, 500);
_container.css('left', ((_index * _blurbWidth) * -1) + 'px');
}
init();
})(jQuery);